Skip to content

Instantly share code, notes, and snippets.

@erikgregorywebb
Last active March 2, 2025 04:44
Show Gist options
  • Save erikgregorywebb/da4f956563ea597d3b28f210223b4a96 to your computer and use it in GitHub Desktop.
Save erikgregorywebb/da4f956563ea597d3b28f210223b4a96 to your computer and use it in GitHub Desktop.
# import packages
library(tidyverse)
library(httr)
library(jsonlite)
library(lubridate)
library(scales)
# get list of shows
headers = c(
`sec-ch-ua-platform` = '"macOS"',
Referer = "https://tickets.broadwaydirect.com/tickets/series/546654/the-lion-king-new-york-ny-1032631?startDate=03-01-2025",
`Accept-Language` = "en-US",
`sec-ch-ua` = '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
`sec-ch-ua-mobile` = "?0",
`User-Agent` = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
Accept = "application/json, text/plain, */*",
DNT = "1"
)
months = c("2025/03/01", "2025/04/01", "2025/05/01")
datalist = list()
for (i in 1:length(months)) {
print(i)
Sys.sleep(10)
params = list(
requestedTime = months[i],
salesChannel = "Web",
seriesCode = "546654"
)
res <- httr::GET(url = "https://tickets.broadwaydirect.com/api/events/getbymonth", httr::add_headers(.headers=headers), query = params)
raw = fromJSON(rawToChar(res$content))
datalist[[i]] = raw %>% tibble() %>% select(ID, EndDate, AvailabilityCount, AvailabilityColor)
}
raw = do.call(rbind, datalist)
shows = raw %>%
select(id = ID, timestamp = EndDate, availability_count = AvailabilityCount, availability_color = AvailabilityColor) %>%
mutate(timestamp = ymd_hms(timestamp))
# get price array for every show
cookies = c(
.AspNetCore.Culture = "c=en-US|uic=en-US",
series = "546654",
mcuid = "N1739756221112",
`_evga_1a0f` = '{"uuid":"45903a9e7026fe47"}',
lantern = "8ef5c960-5796-4ddd-a5c0-42210201f91d",
`_pin_unauth` = "dWlkPVpqazVNakF5Wm1VdFl6STNZUzAwTlRCaUxXSXdaVEV0TWpaa1lqRTRaVEZrWkdReQ",
CookieInformationConsent = '{"website_uuid":"c3c64d1a-0563-4694-9bcf-8c2259cc76cd","timestamp":"2025-02-17T01:37:22.615Z","consent_url":"https://tickets.broadwaydirect.com/tickets/series/546654/the-lion-king-new-york-ny-1212243/bestAvailable?startDate=04-26-2025","consent_website":"broadwaydirect.com","consent_domain":"tickets.broadwaydirect.com","user_uid":"5f7ef6f3-f712-47a6-96a1-15db198aefd4","consents_approved":["cookie_cat_necessary","cookie_cat_functional","cookie_cat_statistic","cookie_cat_marketing","cookie_cat_unclassified"],"consents_denied":[],"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"}',
`_tt_enable_cookie` = "1",
`_ttp` = "CJMkMZeO5khkYhLmYIUj-RXcu9R.tt.1",
`_sfid_c26b` = '{"anonymousId":"45903a9e7026fe47","consents":[]}',
`__attentive_id` = "1a2cb11664e24e83af3840732cf499b7",
`__attentive_cco` = "1739756221825",
`__zlcmid` = "1QGnOwBCBZfUS23",
`_gcl_au` = "1.1.273712821.1739756243",
broadwaydirect_ga = "GA1.1.1086508586.1739756221",
`__cf_bm` = "P8TI01C.PsouUeDk2WUCBOXVDt7WpKCHxlar.qUuRtM-1740877339-1.0.1.1-G6UeYdznF.5xYkdKmsNIXg5OJlzpoPU8SlSm3N.0Qt9C8R8FHwwKj9aABfrpSq3hzYMsXnpbLXfrNoEFw.K8EE_kczNHnqYi7r8csGZjNzQ",
cf_clearance = "GJYAoEiOPWcpq2V_1S1IhJ.HD8etJIovzr5vu1BP9x4-1740877340-1.2.1.1-tDYDl6fyMUEeWc_YVCDVrNf.g50FcTcoTeMVmaHXytMhJPh5dSB8xABPz24WilYoUw7kjNbfmrBaTMfS4of51mOXr3gp7Ydsyj8iLLS3i4TIoAeTu_Z.XmNy.a1IX0gc.GVInaVWiihozlzDGplx675bVC4c2YeZ2ltTfppa59K9SUhiS4ygVdspm4jUZcjNiWxsSA4qHi7XOvxsBkw.WYAg_YWxgS2kDdRGfhsH1vt6.DmzlYlC5cRPXyZLpK2vNbDAJHf9Iglw82k8E8x57JgT.hP57.usv7hDFkvWHO2ZtLD19Fcz19OKVvPcyZNM6mlF1sRRvKIddAXpVAF.J5nNKcjjDkEUlXNHZGCCmMkopcURm3ksfXIENXLJmAut03DqR_AxzuptLv4pHoJ__9YqwlaRDxaGwPQ9ZTZgIPk",
`_gid` = "GA1.2.1790488932.1740877340",
mcsid = "TAKjvYHr",
`__attentive_domain` = "broadwaydirect",
`__attentive_ceid` = "2kG",
`__attentive_session_id` = "28c347251f954a0097773cba2a3edea1",
`__attentive_ss_referrer` = "https://www.google.com/",
`_pin_unauth` = "dWlkPVpqazVNakF5Wm1VdFl6STNZUzAwTlRCaUxXSXdaVEV0TWpaa1lqRTRaVEZrWkdReQ",
`__attentive_dv` = "1",
`_cfuvid` = "iglmWmE7RP832t93QvQZ9.GsZLkFaEy4Smtac.PG2nU-1740877342949-0.0.1.1-604800000",
`QueueITAccepted-SDFrts345E-V3_broadwaydirect` = "EventId=broadwaydirect&RedirectType=safetynet&IssueTime=1740877343&Hash=465a122a768c56e816e53f64e0b7fde3f9a30ebb305d817e79d2fac85d5a19c7",
accountAllowsLogin = "true",
cf_clearance = "0iW7KI_724w1mX3rbT839TgEGlZLC1xpIH9mcbvt.L8-1740877344-1.2.1.1-ldaFLI9go71F9xPkH7trYe02drjSQ8fEP4bmt6TXBPn7bed6RjUxqTbIu.kDQ6BRZ_qHhuBJ00C4ZImoaO1ooVsT_XMARRaHJlZHkYzy4s3.kasEoSd7.CrqG9xnQe_dioh3pZDblgpVhyQZIf1yiYtxE2pB8nF4qAu9Mf2vPgLvujxG05ht6cCHVXARtcEfnr.2EADPTMBrz0z9FARviWyXOi4A5bQpvLL7gVjoejzj3dCrgv_00_Qr4KxId7BBFnShMRw.UdlHqPO97bOupakiAO1EtT6COsS8KzYjG_AjUKBMxB9s79yGJ6NYIT4LE35DvQW5619ASlX6uXb7TK5ymQR1fZk73T6hyfg1.gNQIStfeSze5sF.Rw3X.8DnHU_Ie1fzVi31.vPQBhJstZbH57gsPSqiy8H3UObtPpI",
consumerFeatures = '{"showNewBasketPage":false}',
`__attn_exit_intent_triggered` = "true",
gtmProductList = "",
returnPage = "/tickets/series/546654/the-lion-king-new-york-ny-1212270",
sellMoreSameEventPage = "/tickets/series/546654/the-lion-king-new-york-ny-1212270?startDate=03-16-2025",
actualReferrer = "https://tickets.broadwaydirect.com/tickets/series/546654/the-lion-king-new-york-ny-1212270?startDate=03-16-2025",
selectSeatsUrl = "/Tickets/series/546654/the-lion-king-new-york-ny-1212270",
`_gat` = "1",
nLivenClientNavLoginRedirect = "https://tickets.broadwaydirect.com/tickets/series/546654/the-lion-king-new-york-ny-1212242?startDate=04-19-2025",
`_uetsid` = "fe290b00f70111ef900a93a7cb8c010b",
`_uetvid` = "65a380204c7411efa66fed5678b32b4f",
`_ga_CE4BESHVHE` = "GS1.2.1740877344.2.1.1740877863.60.0.0",
`_attn_` = "eyJ1Ijoie1wiY29cIjoxNzM5NzU2MjIxODI0LFwidW9cIjoxNzM5NzU2MjIxODI0LFwibWFcIjoyMTkwMCxcImluXCI6ZmFsc2UsXCJ2YWxcIjpcIjFhMmNiMTE2NjRlMjRlODNhZjM4NDA3MzJjZjQ5OWI3XCJ9Iiwic2VzIjoie1widmFsXCI6XCIyOGMzNDcyNTFmOTU0YTAwOTc3NzNjYmEyYTNlZGVhMVwiLFwidW9cIjoxNzQwODc3ODYzODEwLFwiY29cIjoxNzQwODc3ODYzODEwLFwibWFcIjowLjAyMDgzMzMzMzMzMzMzMzMzMn0ifQ==",
`__attentive_pv` = "9",
`_ga_F9SL9L2PG0` = "GS1.1.1740877344.2.1.1740877864.0.0.0",
`_gat_UA-26194249-1` = "1",
`_gat_UA-43841211-3` = "1",
`_ga_2BCYEF8XG6` = "GS1.1.1740877340.2.1.1740877864.58.0.0",
`_ga` = "GA1.2.948673810.1739756220",
broadwaydirect_ga_Y4Z8911974 = "GS1.1.1740877340.2.1.1740877864.58.0.240948745",
.ASPXANONYMOUS = "0KgJzfiL2wEkAAAAMGI2MTMwNDktZGQzYi00ZTc5LWExNTUtNjAzNDAxYTY0ZGRj",
`__cf_bm` = "tJFi0p1eGbkwtZ.hjR6L.wUqGMN_ZSqQSS4gPQM2lUw-1740877864-1.0.1.1-nkpLYZkRV7pGUj9qk855pc3LpvbTE7CnkJnqhT9MAziYHv7f3p8EkOEaV.AGHA16s9r.0Zm70oFgcMjidT4H01J9tL9DlgZAfvYNej013ug"
)
headers = c(
accept = "application/json, text/plain, */*",
`accept-language` = "en-US",
dnt = "1",
priority = "u=1, i",
referer = "https://tickets.broadwaydirect.com/tickets/series/546654/the-lion-king-new-york-ny-1212242?startDate=04-19-2025",
`sec-ch-ua` = '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
`sec-ch-ua-mobile` = "?0",
`sec-ch-ua-platform` = '"macOS"',
`sec-fetch-dest` = "empty",
`sec-fetch-mode` = "cors",
`sec-fetch-site` = "same-origin",
`user-agent` = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
)
params = list(
includeOpens = "true",
salesChannel = "Web"
)
ids = shows %>% select(id) %>% pull(id)
datalist = list()
for (i in 1:length(ids)) {n
print(ids[i])
Sys.sleep(10)
res <- httr::GET(url = paste("https://tickets.broadwaydirect.com/api/eventinventory/", ids[i], sep = ''),
httr::add_headers(.headers=headers), query = params, httr::set_cookies(.cookies = cookies))
raw = fromJSON(rawToChar(res$content))
prices = tibble(raw$PriceMaps)
datalist[[i]] = prices %>% select(DisplayPrice, Class, PriceLevelID) %>% mutate(id = ids[i])
}
raw = do.call(rbind, datalist)
prices = raw %>%
select(id, class = Class, price_level_id = PriceLevelID, price = DisplayPrice)
# join together
all = left_join(x = prices, y = shows, by = c('id')) %>%
select(id, timestamp, price, class, price_level_id, availability_count, availability_color)
# roll-up
summary = all %>%
group_by(id, timestamp, availability_count, availability_color) %>%
summarise(Min = min(price), Max = max(price), Median = median(price)) %>% ungroup() %>%
arrange(timestamp)
# plot
chart = summary %>%
pivot_longer(cols = c(Min, Max, Median)) %>%
ggplot(., aes(x = timestamp, y = value, col = name)) +
#geom_point() +
geom_line(size = .9) +
scale_colour_manual(values=c(Min="#f8069a", Max="#ecb516", Median="#6d1301")) +
labs(x = '', y = '', title = "'The Lion King' Broadway Ticket Prices: Min, Max, & Median",
subtitle = 'March 1 to May 31, 2025 | Prices scraped from broadwaydirect.com') +
scale_y_continuous( labels = label_dollar()) +
theme_minimal() +
theme(legend.position = "top") +
theme(legend.title=element_blank()) +
theme(plot.title=element_text(face="bold"))
setwd("~/Downloads")
png(filename="lion-king-broadway-price-chart.png", width = 12, height = 6, units = "in", res = 1000)
chart
dev.off()
# stats
median(summary$Min)
median(summary$Median)
median(summary$Max)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment