diff --git a/charts/agimus/Chart.yaml b/charts/agimus/Chart.yaml index d2de6fc3..dede1067 100644 --- a/charts/agimus/Chart.yaml +++ b/charts/agimus/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: agimus description: A helm chart for a discord bot that also runs a mysql db type: application -version: v1.27.5 -appVersion: v1.27.5 +version: v1.27.6 +appVersion: v1.27.6 diff --git a/cogs/randomep.py b/cogs/randomep.py index 5d79af42..92bbe96b 100644 --- a/cogs/randomep.py +++ b/cogs/randomep.py @@ -1,7 +1,8 @@ from common import * from utils.show_utils import get_show_embed -all_shows = ["tos", "tas", "tng", "ds9", "voy", "enterprise", "lowerdecks", "disco", "picard", "friends", "firefly", "simpsons", "sunny"] +all_shows = ["tos", "tas", "tng", "ds9", "voy", "enterprise", "lowerdecks", "disco", "picard", "prodigy", "snw", + "friends", "firefly", "simpsons", "sunny"] # Util def generate_random_ep_embed(shows): diff --git a/configuration.json b/configuration.json index aff8f195..d0aa75a6 100755 --- a/configuration.json +++ b/configuration.json @@ -468,6 +468,8 @@ "lowerdecks", "disco", "picard", + "prodigy", + "snw", "tas", "sunny" ], @@ -612,6 +614,14 @@ "name": "Star Trek: Picard", "value": "picard" }, + { + "name": "Star Trek: Prodigy", + "value": "prodigy" + }, + { + "name": "Star Trek: Strange New Worlds", + "value": "snw" + }, { "name": "Star Trek: Lower Decks", "value": "lowerdecks" @@ -663,6 +673,8 @@ "lowerdecks", "disco", "picard", + "prodigy", + "snw", "nontrek", "friends", "firefly", diff --git a/data/episodes/disco.json b/data/episodes/disco.json index ca1af5c7..ad4aad76 100755 --- a/data/episodes/disco.json +++ b/data/episodes/disco.json @@ -1228,8 +1228,16 @@ "description": "After months spent reconnecting the Federation with distant worlds, Captain Michael Burnham and the crew of the U.S.S. Discovery are sent to assist a damaged space station \u2013 a seemingly routine mission that reveals the existence of a terrifying new threat.", "episode": "01", "imdb": "tt13345554", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "Kobayashi_Maru_(episode)", + "podcasts": [ + { + "airdate": "2021.11.23", + "episode": "You\u2019d Die to Get Killed Off of a Show Like This", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-143-youd-die-to-get-killed-off-of-a-show-like-this-discovery-s4e1-prodigy-s1e5/", + "order": 143, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/6RsRTvxI2Sv6mNmBOOLuEmiAEcy.jpg", @@ -1261,8 +1269,16 @@ "description": "Saru returns to help the U.S.S. Discovery uncover the mystery of an unusually destructive new force. As Burnham leads the crew, she must also find a way to help Book cope with an unimaginable loss.", "episode": "02", "imdb": "tt14074220", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "Anomaly_(DIS)_(episode)", + "podcasts": [ + { + "airdate": "2021.11.30", + "episode": "Trauma Currency Exchange", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-144-trauma-currency-exchange-discovery-s4e2/", + "order": 144, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/3FZ6ZAKxQaVS84uymVdYzwOGUOa.jpg", @@ -1287,8 +1303,16 @@ "description": "Burnham and Tilly hunt the killer of a Starfleet officer as Stamets and the science team race against the clock to prevent the anomaly from killing anyone else.", "episode": "03", "imdb": "tt14074222", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "Choose_to_Live_(episode)", + "podcasts": [ + { + "airdate": "2021.12.07", + "episode": "Nerd Top Gun", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-145-nerd-top-gun-discovery-s4e3/", + "order": 145, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/8tx3avvVJHrXFDIeCafbXn0H2gB.jpg", @@ -1306,8 +1330,16 @@ "description": "Tilly and Adira lead a team of Starfleet Academy cadets on a training mission that takes a dangerous turn. Meanwhile, Burnham is pulled into tense negotiations on Ni\u2019Var.", "episode": "04", "imdb": "tt14074224", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "All_Is_Possible_(episode)", + "podcasts": [ + { + "airdate": "2021.12.14", + "episode": "No One Needs to Make a Dead Person Proud", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-146-no-one-needs-to-make-a-dead-person-proud-discovery-s4e4/", + "order": 146, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/ahkPNBqicfkfvhhAaopPSl6NrPI.jpg", @@ -1324,8 +1356,16 @@ "description": "Burnham and Book race to evacuate a group of stranded colonists in the anomaly\u2019s path as one of the Federation\u2019s brightest scientists comes aboard the U.S.S. Discovery to do high-stakes research with Saru and Stamets.", "episode": "05", "imdb": "tt14074226", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "The_Examples_(episode)", + "podcasts": [ + { + "airdate": "2021.12.21", + "episode": "Star Trethics", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-147-star-trethics-discovery-s4e5/", + "order": 147, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/b6x4x2z2XflPcmh3iRGr37CdsxS.jpg" @@ -1338,8 +1378,16 @@ "description": "Seeking answers, the U.S.S. Discovery ventures into a subspace rift created by the Dark Matter Anomaly. Meanwhile, Book faces a strange visitor from his past.", "episode": "06", "imdb": "tt14066802", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "Stormy_Weather_(episode)", + "podcasts": [ + { + "airdate": "2021.12.28", + "episode": "Zora Could Be Toobining", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-148-zora-could-be-toobining-discovery-s4e6/", + "order": 148, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/vOaVmVveQjU5EbSHlNFIr3HxsVQ.jpg", @@ -1357,8 +1405,16 @@ "description": "Tensions rise as representatives from across the galaxy gather to confront the threat of the Dark Matter Anomaly. Zora's new sentience raises difficult questions.", "episode": "07", "imdb": "tt14145492", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "...But_to_Connect_(episode)", + "podcasts": [ + { + "airdate": "2022.01.04", + "episode": "Lad Mag Dad Mad", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-149-lad-mag-dad-mad-discovery-s4e7/", + "order": 149, + "title": "Greatest Trek" + } + ], "season": "04", "stills": [ "https://image.tmdb.org/t/p/original/n7Yc5nn00Fo0dJ8d9uD2v6lIhfh.jpg", @@ -1369,15 +1425,159 @@ }, { "airdate": "2022.02.10", - "description": "", + "description": "Following a hunch, Captain Burnham tracks Book to an old haunt from their courier days and gets drawn into a high-stakes competition for a powerful weapon.", "episode": "08", "imdb": "tt15170308", - "memoryalpha": "", - "podcasts": [], + "memoryalpha": "All_In_(episode)", + "podcasts": [ + { + "airdate": "2022.02.15", + "episode": "Chekhov\u2019s Boxing Ring", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-155-chekhovs-boxing-ring-discovery-s4e8/", + "order": 155, + "title": "Greatest Trek" + } + ], "season": "04", - "stills": [], - "title": "Episode 8", + "stills": [ + "https://image.tmdb.org/t/p/original/bsXxuEJnwrycdWnFIhlQ2KoGslt.jpg", + "https://image.tmdb.org/t/p/original/9IkL6q4773p1iD7lOjHsSc3Q8aA.jpg" + ], + "title": "All In", "tvdb": 3396838 + }, + { + "airdate": "2022.02.17", + "title": "Rubicon", + "description": "Captain Burnham and the U.S.S. Discovery race to stop Book and Ruon Tarka from launching a rogue plan that could inadvertently endanger the galaxy.", + "season": "04", + "episode": "09", + "podcasts": [ + { + "airdate": "2022.02.22", + "episode": "Ganglia Stuff", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-156-ganglia-stuff-discovery-s4e9/", + "order": 156, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Rubicon_(episode)", + "tvdb": 3497476, + "imdb": "tt15170312", + "stills": [ + "https://image.tmdb.org/t/p/original/p1qtFPO84IQsyHgtZtp2vv492Gi.jpg", + "https://image.tmdb.org/t/p/original/3ix1vQrsFbwWenxvktUtIJFmEYL.jpg", + "https://image.tmdb.org/t/p/original/lJCYv71U33mQvaZw9D9Xb9jNURW.jpg", + "https://image.tmdb.org/t/p/original/pqRzpx68W5tFhUcx5CB2FULdTd0.jpg" + ] + }, + { + "airdate": "2022.02.24", + "title": "The Galactic Barrier", + "description": "Captain Burnham and her crew must go where few have gone before: beyond the Galactic Barrier. Meanwhile, Book learns the truth of what drives Ruon Tarka.", + "season": "04", + "episode": "10", + "podcasts": [ + { + "airdate": "2022.03.01", + "episode": "Roly Towel Reveal Party", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-157-roly-towel-reveal-party-discovery-s4e10/", + "order": 157, + "title": "Greatest Trek" + } + ], + "memoryalpha": "The_Galactic_Barrier_(episode)", + "tvdb": 3497477, + "imdb": "tt15170316", + "stills": [ + "https://image.tmdb.org/t/p/original/r5OYdsKMaLH0p4Z1te1bKD5VXGK.jpg", + "https://image.tmdb.org/t/p/original/j97zPGEcaQ311Czuo7VLuNdFJyv.jpg", + "https://image.tmdb.org/t/p/original/mk2INqEWla8q6UFU7EhicRDbQyE.jpg", + "https://image.tmdb.org/t/p/original/ifNUPNLBPMtqdzvitn4a8hDbwkx.jpg", + "https://image.tmdb.org/t/p/original/m24tZzRfU0Q0idFX0skA3FQP4cI.jpg", + "https://image.tmdb.org/t/p/original/5HV8dz6nXOUlE0jAqRAwCF4TwKn.jpg", + "https://image.tmdb.org/t/p/original/rJekID0ehTQxMKnbZoRqjPpEwsB.jpg" + ] + }, + { + "airdate": "2022.03.03", + "title": "Rosetta", + "description": "While Captain Burnham leads an away mission to a planet that was once home to the aliens responsible for the DMA, Book and Tarka secretly infiltrate the U.S.S. Discovery.", + "season": "04", + "episode": "11", + "podcasts": [ + { + "airdate": "2022.03.08", + "episode": "Rails of Fear Blow", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-159-rails-of-fear-blow-discovery-s4e11/", + "order": 159, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Rosetta_(episode)", + "tvdb": 3525030, + "imdb": "tt15170318", + "stills": [ + "https://image.tmdb.org/t/p/original/AlDYsOnyCCSZRtqrP6oCZgateW5.jpg", + "https://image.tmdb.org/t/p/original/ddDcYqlAUSnktd3PpymBx3sQWXC.jpg" + ] + }, + { + "airdate": "2022.03.10", + "title": "Species Ten-C", + "description": "As the DMA approaches Earth and Ni\u2019Var, Captain Burnham and the crew of the U.S.S. Discovery attempt to make First Contact with the powerful species responsible before it\u2019s too late.", + "season": "04", + "episode": "12", + "podcasts": [ + { + "airdate": "2022.03.15", + "episode": "A Boronite Bouquet", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-161-a-boronite-bouquet-discovery-s4e12/", + "order": 161, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Species_Ten-C_(episode)", + "tvdb": 3578600, + "imdb": "tt18298648", + "stills": [ + "https://image.tmdb.org/t/p/original/fTaX2TfdeGFe7K7TRJDdtDUZTQR.jpg", + "https://image.tmdb.org/t/p/original/cKR3pMwKtYqpmenieezTBkL1wkZ.jpg", + "https://image.tmdb.org/t/p/original/7HRUewSggoe9bYcuF3DbrrkUdsz.jpg", + "https://image.tmdb.org/t/p/original/tqE49dNbpYxppu7GsQZLaaKUFqV.jpg", + "https://image.tmdb.org/t/p/original/vtPVQEBju2JeiCXbPMPeYRVe5lE.jpg", + "https://image.tmdb.org/t/p/original/sgz8GjvAMTiJUca7WOO8tEVsCLR.jpg", + "https://image.tmdb.org/t/p/original/gUYn10Ic0bp8Kk9uVwiFif1DKfc.jpg", + "https://image.tmdb.org/t/p/original/iNWYr7Nig6GUagrPwhcAoGHvQnP.jpg", + "https://image.tmdb.org/t/p/original/k85RYZfW8Yq78535FBU15t49QJb.jpg", + "https://image.tmdb.org/t/p/original/4TVXcvD0n9g4lFEv0CpQcAbYQUk.jpg", + "https://image.tmdb.org/t/p/original/tvkrez7QoPyjfxNz3KEYmJYVMem.jpg" + ] + }, + { + "airdate": "2022.03.17", + "title": "Coming Home", + "description": "The DMA approaches Earth and Ni\u2019Var. With evacuations underway, Burnham and the team aboard the U.S.S. Discovery must find a way to communicate and connect with a species far different from their own before time runs out.", + "season": "04", + "episode": "13", + "podcasts": [ + { + "airdate": "2022.03.22", + "episode": "Quad Boxing the Apology", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-163-quad-boxing-the-apology-discovery-s4e13/", + "order": 163, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Coming_Home_(episode)", + "tvdb": 3587355, + "imdb": "tt18298656", + "stills": [ + "https://image.tmdb.org/t/p/original/8aqDSsMHFPReRhzwTcFmXBGQ2A2.jpg", + "https://image.tmdb.org/t/p/original/nSF9MWpZJRnkfiIGwgAs8bEMdI2.jpg", + "https://image.tmdb.org/t/p/original/yv0AMWeOHLTxs6IeMTASwyKAfsR.jpg", + "https://image.tmdb.org/t/p/original/3cMHywoSsd7FZl70Df6frBDfy1D.jpg" + ] } ], "imdb": "", diff --git a/data/episodes/prodigy.json b/data/episodes/prodigy.json new file mode 100644 index 00000000..48bbe40b --- /dev/null +++ b/data/episodes/prodigy.json @@ -0,0 +1,435 @@ +{ + "animated": true, + "episodes": [ + { + "airdate": "2021.10.28", + "title": "Lost & Found (1) / Lost & Found (2)", + "description": "A group of lawless teens, exiled on a mining colony outside Federation space, discover a derelict Starfleet ship. Dal must gather an unlikely crew for their newfound ship if they are going to escape Tars Lamora, but the Diviner and his daughter Gwyn have other plans.", + "season": "01", + "episode": "01", + "podcasts": [ + { + "airdate": "2021.11.02", + "episode": "Dump Truck Murph", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-140-dump-truck-murph-prodigy-s1e1/", + "order": 140, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Lost_and_Found_(episode)", + "tvdb": 2362968, + "imdb": "", + "stills": [ + "https://image.tmdb.org/t/p/original/sPerp6iLSRcnQuor5yD8yX5lGb7.jpg", + "https://image.tmdb.org/t/p/original/ekClTM6JIpj0ETegAwAcXfpUxGy.jpg" + ] + }, + { + "airdate": "2021.11.04", + "title": "Starstruck", + "description": "Even with the guidance of their hologram advisor Janeway, the crew of The Protostar is tested when their ship is on a dangerous cosmic collision course.", + "season": "01", + "episode": "03", + "podcasts": [], + "memoryalpha": "Starstruck_(episode)", + "tvdb": 3310786, + "imdb": "tt14419876", + "stills": [ + "https://image.tmdb.org/t/p/original/fFXHDfPTmewmiZ1TySjsWPpFhfe.jpg", + "https://image.tmdb.org/t/p/original/q50ZI7jD8seR57xwn0xhwucKykI.jpg", + "https://image.tmdb.org/t/p/original/uoREIYQRa0tqcWoIhTynylZC2sc.jpg", + "https://image.tmdb.org/t/p/original/blttdkWf39NufbZt6ZgYI67XgZG.jpg" + ] + }, + { + "airdate": "2021.11.11", + "title": "Dreamcatcher", + "description": "The crew has their first away mission on an undiscovered planet that manifests their deepest desires, only to realize the planet has desires of its own.", + "season": "01", + "episode": "04", + "podcasts": [], + "memoryalpha": "Dream_Catcher_(episode)", + "tvdb": 3321670, + "imdb": "tt14419878", + "stills": [ + "https://image.tmdb.org/t/p/original/roUX9J5clQVDbGrwxAgJ2NYIvCD.jpg", + "https://image.tmdb.org/t/p/original/xqWl4H5wFIwefEjCyiHPQyTmA5z.jpg", + "https://image.tmdb.org/t/p/original/uLpHvMADTWSDAlYW13hhR1vissh.jpg", + "https://image.tmdb.org/t/p/original/bp3k4x9BeEyVRxOsDYwc6MZOpFw.jpg" + ] + }, + { + "airdate": "2021.11.18", + "title": "Terror Firma", + "description": "Marooned on a deadly planet, the crew must work together with their captive Gwyn to stay alive\u2026except the planet isn\u2019t the only thing in pursuit.", + "season": "01", + "episode": "05", + "podcasts": [ + { + "airdate": "2021.11.23", + "episode": "You\u2019d Die to Get Killed Off of a Show Like This", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-143-youd-die-to-get-killed-off-of-a-show-like-this-discovery-s4e1-prodigy-s1e5/", + "order": 143, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Terror_Firma_(episode)", + "tvdb": 3340504, + "imdb": "tt14419882", + "stills": [ + "https://image.tmdb.org/t/p/original/3vDBrcGxkWSVsj0lEh2MubkCcr6.jpg", + "https://image.tmdb.org/t/p/original/auI53rzeW600n6Or9b9dhCWubbr.jpg", + "https://image.tmdb.org/t/p/original/sSVuZH8DWAOAlsHQO3QnUfTDs9I.jpg" + ] + }, + { + "airdate": "2022.01.06", + "title": "Kobayashi", + "description": "As Gwyn struggles to find her role aboard the U.S.S. Protostar, Dal tests his leadership skills in the newly discovered holodeck.", + "season": "01", + "episode": "06", + "podcasts": [ + { + "airdate": "2022.01.11", + "episode": "We\u2019ve Been Building to a Fart Joke This Entire Time", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-150-weve-been-building-to-a-fart-joke-this-entire-time-prodigy-s1e6/", + "order": 150, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Kobayashi_(episode)", + "tvdb": 3340508, + "imdb": "tt14419886", + "stills": [ + "https://image.tmdb.org/t/p/original/d2WwE49tqybtUY0fsJ6g0VuUP3e.jpg", + "https://image.tmdb.org/t/p/original/UoiXnRhlq8CknEtvjen8A32ax4.jpg" + ] + }, + { + "airdate": "2022.01.13", + "title": "First Con-tact", + "description": "When a mentor from Dal\u2019s past persuades him to use their Federation cover for personal gain, they quickly discover Starfleet has protocols for a reason.", + "season": "01", + "episode": "07", + "podcasts": [ + { + "airdate": "2022.01.18", + "episode": "Comparably Fucked-Up Childhoods", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-151-comparably-fucked-up-childhoods-prodigy-s1e7/", + "order": 151, + "title": "Greatest Trek" + } + ], + "memoryalpha": "First_Con-tact_(episode)", + "tvdb": 3435925, + "imdb": "tt14419888", + "stills": [ + "https://image.tmdb.org/t/p/original/MOLS2qdbRtw0TkcWk4FbJJs21n.jpg", + "https://image.tmdb.org/t/p/original/imIcJFMoTgJe0LUjUBQqQUxb1DI.jpg", + "https://image.tmdb.org/t/p/original/miu3jGmlTwRYzDdqXn0D7RgNYng.jpg" + ] + }, + { + "airdate": "2022.01.20", + "title": "Time Amok", + "description": "When the U.S.S. Protostar is fractured in time by an anomaly, Hologram Janeway must synchronize the disjointed crew and save their ship before it destructs.", + "season": "01", + "episode": "08", + "podcasts": [ + { + "airdate": "2022.01.25", + "episode": "Dachshund the Robot", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-152-dachshund-the-robot-prodigy-s1e8/", + "order": 152, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Time_Amok_(episode)", + "tvdb": 3448051, + "imdb": "tt14419890", + "stills": [ + "https://image.tmdb.org/t/p/original/lv4GR9JZtiH8XeepDdRAWxO2ozr.jpg", + "https://image.tmdb.org/t/p/original/x7YGUyZlA7uvoko89Y6LzMnINCt.jpg" + ] + }, + { + "airdate": "2022.01.27", + "title": "A Moral Star (1)", + "description": "The crew forgo their dreams of Starfleet to return to Tars Lamora in a no-win scenario.", + "season": "01", + "episode": "09", + "podcasts": [ + { + "airdate": "2022.02.01", + "episode": "Quid Pro Subscribe", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-153-quid-pro-subscribe-prodigy-s1e9/", + "order": 153, + "title": "Greatest Trek" + } + ], + "memoryalpha": "A_Moral_Star,_Part_1_(episode)", + "tvdb": 3448052, + "imdb": "tt14419894", + "stills": [ + "https://image.tmdb.org/t/p/original/dwjJalsYHokjSurYRsLTlRPd1BC.jpg", + "https://image.tmdb.org/t/p/original/q0dUnxVxUVWki3pkUSDB6t1L2E0.jpg" + ] + }, + { + "airdate": "2022.02.03", + "title": "A Moral Star (2)", + "description": "When the plan goes awry, the crew must improvise. Meanwhile, Gwyn discovers a dark truth that will forever jeopardize their quest toward salvation.", + "season": "01", + "episode": "10", + "podcasts": [ + { + "airdate": "2022.02.08", + "episode": "Ketracel Grape", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-154-ketracel-grape-prodigy-s1e10/", + "order": 154, + "title": "Greatest Trek" + } + ], + "memoryalpha": "A_Moral_Star,_Part_2_(episode)", + "tvdb": 3448053, + "imdb": "tt15906704", + "stills": [ + "https://image.tmdb.org/t/p/original/vyxhxX8FEiwPI8judxd9pig8dwj.jpg", + "https://image.tmdb.org/t/p/original/w6dRNWp7blSNxy5ZHIzPFA2edZh.jpg" + ] + }, + { + "airdate": "2022.10.27", + "title": "Asylum", + "description": "At the edge of Federation space, the crew applies for asylum at a comm relay outpost, only for their starship to reveal its shocking true purpose.", + "season": "01", + "episode": "11", + "podcasts": [ + { + "airdate": "2022.11.01", + "episode": "Murph in the Mug, Broken by a Hug", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-196-murph-in-the-mug-broken-by-a-hug-prodigy-s1e11/", + "order": 196, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Asylum_(episode)", + "tvdb": 3982183, + "imdb": "tt17080342", + "stills": [ + "https://image.tmdb.org/t/p/original/fmDg2fviQoRC6g2jEm1pjDmZFVe.jpg", + "https://image.tmdb.org/t/p/original/smw35oXsO7O7QcbxkSiWOYuoImL.jpg" + ] + }, + { + "airdate": "2022.11.03", + "title": "Let Sleeping Borg Lie", + "description": "When the crew encounters a dormant Borg Cube, Zero risks everything to save their ship.", + "season": "01", + "episode": "12", + "podcasts": [ + { + "airdate": "2022.11.08", + "episode": "Backwards Family Circus Slug", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-197-backwards-family-circus-slug-prodigy-s1e12/", + "order": 197, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Let_Sleeping_Borg_Lie_(episode)", + "tvdb": 3983092, + "imdb": "tt17080350", + "stills": [ + "https://image.tmdb.org/t/p/original/zhy7LzHRMts3w8hufQ73mvTZD3Z.jpg", + "https://image.tmdb.org/t/p/original/cBobaCdU73v15RK75rAsu5otxFA.jpg" + ] + }, + { + "airdate": "2022.11.10", + "title": "All the World's a Stage", + "description": "The crew answers a distress call to find a colony trapped in Starfleet's past.", + "season": "01", + "episode": "13", + "podcasts": [ + { + "airdate": "2022.11.15", + "episode": "Rushmore Family Players", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-198-rushmore-family-players-prodigy-s1e13/", + "order": 198, + "title": "Greatest Trek" + } + ], + "memoryalpha": "All_the_World's_a_Stage_(episode)", + "tvdb": 3983093, + "imdb": "tt17080362", + "stills": [ + "https://image.tmdb.org/t/p/original/qHngIISihWFyeUvfdRRI6tvYksH.jpg" + ] + }, + { + "airdate": "2022.11.17", + "title": "Crossroads", + "description": "When the crew attempts to secure transport to the Federation, they unwittingly cross paths with the Vice Admiral who is hunting them.", + "season": "01", + "episode": "14", + "podcasts": [ + { + "airdate": "2022.11.22", + "episode": "Putting the Parlay To Bed", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-199-putting-the-parlay-to-bed-prodigy-s1e14/", + "order": 199, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Crossroads_(episode)", + "tvdb": 3983094, + "imdb": "tt17080364", + "stills": [ + "https://image.tmdb.org/t/p/original/vy1cCzPWfqLyTArTd8Oc7ep30HA.jpg", + "https://image.tmdb.org/t/p/original/wDz5l4I9l2VBxTsPK4aIA7ZwVWh.jpg" + ] + }, + { + "airdate": "2022.11.24", + "title": "Masquerade", + "description": "Trapped in the Neutral Zone, the crew encounters a rogue geneticist who sheds light on Dal\u2019s past.", + "season": "01", + "episode": "15", + "podcasts": [ + { + "airdate": "2022.11.29", + "episode": "Edward Phaserhands", + "link": "https://maximumfun.org/episodes/greatest-trek/ep200-edward-phaserhands-prodigy-s1e15/", + "order": 200, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Masquerade_(episode)", + "tvdb": 3983095, + "imdb": "tt17080370", + "stills": [ + "https://image.tmdb.org/t/p/original/8nNUqKfp5BA2ZDvXcQkArBLjZhJ.jpg", + "https://image.tmdb.org/t/p/original/zvWkQkxcQZUA5AmEzuziTKGDKmE.jpg" + ] + }, + { + "airdate": "2022.12.01", + "title": "Preludes", + "description": "A Starfleet Admiral digs into the past of the Protostar crew. Meanwhile, the Diviner recalls his life's mission.", + "season": "01", + "episode": "16", + "podcasts": [ + { + "airdate": "2022.12.06", + "episode": "Star Trek: Slickback", + "link": "https://maximumfun.org/episodes/greatest-trek/ep201-star-trek-slickback-prodigy-s1e16/", + "order": 201, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Preludes_(episode)", + "tvdb": 3983096, + "imdb": "tt17080382", + "stills": [ + "https://image.tmdb.org/t/p/original/vMEsP63MgTV9KOkFiZNCO4oE5KD.jpg", + "https://image.tmdb.org/t/p/original/D9PxgRcpTri171vF2eDmS82Mtw.jpg" + ] + }, + { + "airdate": "2022.12.08", + "title": "Ghost in the Machine", + "description": "When the crew gets trapped in the holodeck by a mysterious malfunction, they aren't sure what's programmed or what's real.", + "season": "01", + "episode": "17", + "podcasts": [ + { + "airdate": "2022.12.13", + "episode": "Captain Table Ring", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-202-captain-table-ring-prodigy-s1e17/", + "order": 202, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Ghost_in_the_Machine_(episode)", + "tvdb": 3983097, + "imdb": "tt17080386", + "stills": [ + "https://image.tmdb.org/t/p/original/wDyRKxpk7oKbhv3PikbTpQFTDcu.jpg", + "https://image.tmdb.org/t/p/original/ps240oKwHVSoXeyG44oygjK14ut.jpg" + ] + }, + { + "airdate": "2022.12.15", + "title": "Mindwalk", + "description": "Desperate to warn Starfleet of their dilemma, a daring experiment goes awry as Dal inadvertently swaps minds with a Starfleet Vice Admiral.", + "season": "01", + "episode": "18", + "podcasts": [ + { + "airdate": "2022.12.20", + "episode": "Ragnar\u00f6k Hard", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-203-ragnarok-hard-prodigy-s1e18/", + "order": 203, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Mindwalk_(episode)", + "tvdb": 3983098, + "imdb": "tt17080392", + "stills": [ + "https://image.tmdb.org/t/p/original/5ymyryUQ7pMC82BtupqFzyWXoVg.jpg", + "https://image.tmdb.org/t/p/original/swds0qrVtoz62DYwTdFLPWVkMey.jpg" + ] + }, + { + "airdate": "2022.12.22", + "title": "Supernova (1)", + "description": "Surrounded by the Federation armada, the crew attempts to stop their ship from destroying all of Starfleet.", + "season": "01", + "episode": "19", + "podcasts": [ + { + "airdate": "2022.12.27", + "episode": "Murf Likes Murder", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-204-murf-likes-murder-prodigy-s1e19/", + "order": 204, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Supernova,_Part_1_(episode)", + "tvdb": 3983099, + "imdb": "tt17080400", + "stills": [ + "https://image.tmdb.org/t/p/original/8UeiPpOmdUMOaDJhKo39F0IcuHj.jpg", + "https://image.tmdb.org/t/p/original/iVVksBc3T37G4XmiUXwBR46EJZD.jpg" + ] + }, + { + "airdate": "2022.12.29", + "title": "Supernova (2)", + "description": "As the Federation hangs in the balance, the crew must make the ultimate sacrifice to save Starfleet's future.", + "season": "01", + "episode": "20", + "podcasts": [ + { + "airdate": "2023.01.03", + "episode": "First Contact Foreplay", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-205-first-contact-foreplay-prodigy-s1e20/", + "order": 205, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Supernova,_Part_2_(episode)", + "tvdb": 3983100, + "imdb": "tt17080404", + "stills": [ + "https://image.tmdb.org/t/p/original/8aMbQgu8tFF68TVzLkF4PLKnLou.jpg", + "https://image.tmdb.org/t/p/original/bojwBa5YxOO5g846AeayEUJCVOC.jpg" + ] + } + ], + "imdb": "", + "title": "Star Trek: Prodigy", + "trek": true, + "tvdb": 106393 +} \ No newline at end of file diff --git a/data/episodes/snw.json b/data/episodes/snw.json new file mode 100644 index 00000000..c23183e3 --- /dev/null +++ b/data/episodes/snw.json @@ -0,0 +1,832 @@ +{ + "animated": false, + "episodes": [ + { + "airdate": "2022.05.05", + "title": "Strange New Worlds", + "description": "When one of Pike\u2019s officers goes missing while on a secret mission for Starfleet, Pike has to come out of self-imposed exile. He must navigate how to rescue his officer, while struggling with what to do with the vision of the future he\u2019s been given.", + "season": "01", + "episode": "01", + "podcasts": [ + { + "airdate": "2022.05.06", + "episode": "Hair Technologies", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-170-hair-technologies-snw-s1e1/", + "order": 170, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Strange_New_Worlds_(episode)", + "tvdb": 3455959, + "imdb": "tt12330364", + "stills": [ + "https://image.tmdb.org/t/p/original/iU2g0Ms11BZKX6i1KxHJUfnmCXf.jpg", + "https://image.tmdb.org/t/p/original/bjUqtYZG4rzkhec0j0OKRYEAg4w.jpg", + "https://image.tmdb.org/t/p/original/66nSdgL2WIfs0T3efAv6i7j3biy.jpg", + "https://image.tmdb.org/t/p/original/pi2OwtWcOsepsfFeooKHb7f12OS.jpg", + "https://image.tmdb.org/t/p/original/chWq8FmXekN9L4YGk8n69Y0qIVc.jpg", + "https://image.tmdb.org/t/p/original/l3PTUIIz83ADTk4vYTSQwmNGpi2.jpg", + "https://image.tmdb.org/t/p/original/nKiVv8Ql3lf643Bp8OnM9ChSYw1.jpg", + "https://image.tmdb.org/t/p/original/4KjVfh2IV5VN7ovFNuGQTrFyYLW.jpg", + "https://image.tmdb.org/t/p/original/ajMt3twhrt3tdG3angzU7Uc5Hlg.jpg", + "https://image.tmdb.org/t/p/original/l7Vg8LWwEfB22qgcnnM4n4I3045.jpg", + "https://image.tmdb.org/t/p/original/vHwlLWTTneOCZmZrkJq3woTow27.jpg", + "https://image.tmdb.org/t/p/original/12ApTJa3EgZ9YJ87t7451t4ab5j.jpg", + "https://image.tmdb.org/t/p/original/jNTLU7AJ9YcwCtqkuETA4gXvrsR.jpg", + "https://image.tmdb.org/t/p/original/sFWGvy09Fr9e33mA0kReXCJnVRC.jpg", + "https://image.tmdb.org/t/p/original/qjlFXeEu9ij0brPN2O3UbYKncCW.jpg", + "https://image.tmdb.org/t/p/original/ehufFrHjfe6hjYtFcuqx3I0GZTG.jpg", + "https://image.tmdb.org/t/p/original/oD2SNt8jo4zgNkWObkcHNlkLKb1.jpg", + "https://image.tmdb.org/t/p/original/k9PDlN20GYh32CIMBtnwYr5LIZ6.jpg", + "https://image.tmdb.org/t/p/original/tr8iO2XDJSrs1YQVYQDcZcD0c1s.jpg" + ] + }, + { + "airdate": "2022.05.12", + "title": "Children of the Comet", + "description": "While on a survey mission, the U.S.S. Enterprise discovers a comet is going to strike an inhabited planet. They try to re-route the comet, only to find that an ancient alien relic buried on the comet\u2019s icy surface is somehow stopping them. As the away team try to unlock the relic\u2019s secrets, Pike and Number One deal with a group of zealots who want to prevent the U.S.S. Enterprise from interfering.", + "season": "01", + "episode": "02", + "podcasts": [ + { + "airdate": "2022.05.17", + "episode": "Burnt-End Body Shots", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-172-burnt-end-body-shots-snw-s1e2/", + "order": 172, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Children_of_the_Comet_(episode)", + "tvdb": 3643454, + "imdb": "tt14426230", + "stills": [ + "https://image.tmdb.org/t/p/original/HIVV4a2UE6CRlWIYGWl6zpN5TJ.jpg", + "https://image.tmdb.org/t/p/original/9wcun8shPZldUosYdEKRajYiks6.jpg", + "https://image.tmdb.org/t/p/original/joLqhjfCiokM3pD4JWDCGtSE2UM.jpg", + "https://image.tmdb.org/t/p/original/2uMjXRxnlge1aY4T3OZvU6BK1NO.jpg", + "https://image.tmdb.org/t/p/original/laSLxGDrt2f60LBO1zprFheq4lA.jpg", + "https://image.tmdb.org/t/p/original/nFHFUN8oHQjoQ6lQWL7T2FQpHSm.jpg", + "https://image.tmdb.org/t/p/original/1ZHde299Et1MykKetXKU1x4nuBX.jpg", + "https://image.tmdb.org/t/p/original/9zaXlHOTQwrcmHD46gYXK2y9dwC.jpg", + "https://image.tmdb.org/t/p/original/nCeTam9vm3eAMvod4m4BREz3tej.jpg", + "https://image.tmdb.org/t/p/original/mg0qS8WJ0Nl9jMSVFcxBBiDyFKw.jpg", + "https://image.tmdb.org/t/p/original/pUkeeGrWEabErttePyWsscDcQ61.jpg" + ] + }, + { + "airdate": "2022.05.19", + "title": "Ghosts of Illyria", + "description": "The U.S.S. Enterprise encounters a contagion that ravages the ship. One by one, the entire crew is incapacitated except for Number One, Una Chin-Riley, who must now confront a secret she\u2019s been hiding as she races to find a cure.", + "season": "01", + "episode": "03", + "podcasts": [ + { + "airdate": "2022.05.24", + "episode": "Sunburnt Light Junkies", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-173-sunburnt-light-junkies-snw-s1e3/", + "order": 173, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Ghosts_of_Illyria_(episode)", + "tvdb": 3643486, + "imdb": "tt14426234", + "stills": [ + "https://image.tmdb.org/t/p/original/cuBwdj9rc1EhqGHSC13rqx8R4c3.jpg", + "https://image.tmdb.org/t/p/original/fwTOIGaCrvErhqZxDNKRGNdtnGd.jpg", + "https://image.tmdb.org/t/p/original/ljrG5LqSCbFKECoY3JW2oR8vzmU.jpg", + "https://image.tmdb.org/t/p/original/wSAaJ6iBhKlfPOoEYKsgrZltVN8.jpg", + "https://image.tmdb.org/t/p/original/veIt4XQfGm7DVc0KwT27LU9L9OH.jpg", + "https://image.tmdb.org/t/p/original/rBX7g38M4F4OYtgq1azikgsysiR.jpg", + "https://image.tmdb.org/t/p/original/ypVizUNZYJMA4bXcv6DMT4zVgNt.jpg", + "https://image.tmdb.org/t/p/original/9GA3A9MRcQWwJMtyBgrdYPMM4GM.jpg", + "https://image.tmdb.org/t/p/original/n3XshAoUz1RzcXiXih8YEkEdelc.jpg", + "https://image.tmdb.org/t/p/original/eT1YSmT8qz5wPMllFq8ZSYhJync.jpg", + "https://image.tmdb.org/t/p/original/iLMIB2pBbZgfuMWKXm9LLRxQyQE.jpg", + "https://image.tmdb.org/t/p/original/9PkZtTFRU0dhWv05ZFiE9Hi1hRO.jpg", + "https://image.tmdb.org/t/p/original/pRjcVIOJ9NQ22dgqeKoiiwwCUKU.jpg", + "https://image.tmdb.org/t/p/original/dHSvOTYTF4c3FmnxK3ULNQKCbpT.jpg", + "https://image.tmdb.org/t/p/original/4VZKHK96Km3Dn6DdiDHf4V35Wh3.jpg", + "https://image.tmdb.org/t/p/original/w19b93F3rVovUSfcqWiP97cjIda.jpg", + "https://image.tmdb.org/t/p/original/nTQcWIBxWulwrbt8wynMLSeRVnz.jpg", + "https://image.tmdb.org/t/p/original/8bgU8VZjmoCK1rNouDvRcUwiDi1.jpg" + ] + }, + { + "airdate": "2022.05.26", + "title": "Memento Mori", + "description": "While on a routine supply mission to a colony planet, the U.S.S. Enterprise comes under an attack from an unknown malevolent force. Pike brings all his heart and experience to bear in facing the crisis, but the security officer warns him that the enemy cannot be dealt with by conventional Starfleet means.", + "season": "01", + "episode": "04", + "podcasts": [ + { + "airdate": "2022.05.31", + "episode": "La\u2019an, a Plan, a Remodulated Phaser, Panama", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-174-laan-a-plan-a-remodulated-phaser-panama-snw-s1e4/", + "order": 174, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Memento_Mori_(episode)", + "tvdb": 3673834, + "imdb": "tt14426238", + "stills": [ + "https://image.tmdb.org/t/p/original/sftGGlFVFXMDdwUPbtQcDUguLfK.jpg", + "https://image.tmdb.org/t/p/original/mQGJK4sxx3hUzYz46m94u10Jsy9.jpg", + "https://image.tmdb.org/t/p/original/bPDnuvROazAlAHoE0Q04wWHyk9u.jpg", + "https://image.tmdb.org/t/p/original/ir8pzXXnmMjIsrMS5DZ9nzPbHXS.jpg", + "https://image.tmdb.org/t/p/original/2GfnwGjYSUi2Bv9SYz7wgbpylws.jpg", + "https://image.tmdb.org/t/p/original/eSUNLD6v1UjTB64EkiyIeNaJyxj.jpg", + "https://image.tmdb.org/t/p/original/biQjqhp4JW1IBFNcd3P0DTolbRI.jpg", + "https://image.tmdb.org/t/p/original/r7xCdsahH4rTL0oL9jm1FT4pjdo.jpg", + "https://image.tmdb.org/t/p/original/gKnmhG8jDbqFEfY4oPQQu57yso.jpg", + "https://image.tmdb.org/t/p/original/dePa3AayDrsqcpRXdDfoL6Yb1gD.jpg", + "https://image.tmdb.org/t/p/original/9wOWfAeSt2KEvy0827LVsgyy80D.jpg", + "https://image.tmdb.org/t/p/original/y9OGUFFnw3psC0OaZnZQ7TLPkQL.jpg", + "https://image.tmdb.org/t/p/original/8CdYW9zwbNPBLtGEf2YihaDZBAU.jpg", + "https://image.tmdb.org/t/p/original/pFBgSKaWyX6yhVQSgIHgZYGa7Yp.jpg", + "https://image.tmdb.org/t/p/original/hIIiNhSjRh06h0Nie8mToolXnWB.jpg", + "https://image.tmdb.org/t/p/original/dla7BzuUx5Y4kNbM6ZBs1iX0Yyt.jpg", + "https://image.tmdb.org/t/p/original/qUhw6NH3TY7hGWfeDqM47NjTJiH.jpg", + "https://image.tmdb.org/t/p/original/oWmptZ1MoMU8kAQNKubwFyuRo5z.jpg", + "https://image.tmdb.org/t/p/original/XJnxucPFholISeXzAlYEdhc6T9.jpg", + "https://image.tmdb.org/t/p/original/fP2HHEQ5XYyo2rS5Im0BKeqYrSZ.jpg" + ] + }, + { + "airdate": "2022.06.02", + "title": "Spock Amok", + "description": "It\u2019s a comedy of manners when Spock has a personal visit in the middle of Spock and Captain Pike\u2019s crucial negotiations with an unusual alien species.", + "season": "01", + "episode": "05", + "podcasts": [ + { + "airdate": "2022.06.07", + "episode": "Take Your Partner\u2019s Katra to Work Day", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-175-take-your-partners-katra-to-work-day-snw-s1e5/", + "order": 175, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Spock_Amok_(episode)", + "tvdb": 3673835, + "imdb": "tt14426240", + "stills": [ + "https://image.tmdb.org/t/p/original/imnMP7fetdx9QAc2yTBZxhNQsPX.jpg", + "https://image.tmdb.org/t/p/original/coWkPr1gwU1JVPD2cyyXEopp6tr.jpg", + "https://image.tmdb.org/t/p/original/ksoqoSOuxYqQizurEnlvJdDXyu2.jpg", + "https://image.tmdb.org/t/p/original/iAP5xSbOmQcAucsI9jZMH0f0sRt.jpg", + "https://image.tmdb.org/t/p/original/glA2l7JgkPHEAlRSfSWGPD4jD30.jpg", + "https://image.tmdb.org/t/p/original/mMFht6SLJ8qoaKgChEJhFnp0Uxf.jpg", + "https://image.tmdb.org/t/p/original/kb2jnzHSXtWcnGCBlAvwSnHYTC1.jpg", + "https://image.tmdb.org/t/p/original/nDND6GxeMZVMvMui1DFdZRxYlC.jpg", + "https://image.tmdb.org/t/p/original/mZjuotRbf0444ipFQwvrp6eHBQs.jpg", + "https://image.tmdb.org/t/p/original/pTYWL14wgNKkIx8qnpNEG8ZgZxC.jpg", + "https://image.tmdb.org/t/p/original/2lV0CgIULQ3I1ysoBuYbNweSaGQ.jpg", + "https://image.tmdb.org/t/p/original/l4n5F42Uw9BzL8i5pEKChGKOZGI.jpg", + "https://image.tmdb.org/t/p/original/vxUkzu07LBlp89lgL9bmQ2AmrZ1.jpg", + "https://image.tmdb.org/t/p/original/w4Q4QtOTtIRLzn6aaHtWVu1d2F8.jpg", + "https://image.tmdb.org/t/p/original/lTdMXqCUEs3IZCaDDYZ3rbORpi9.jpg", + "https://image.tmdb.org/t/p/original/kRetxnUgyrmgh1p2J98CzOsD4Ls.jpg", + "https://image.tmdb.org/t/p/original/chpjHEyxbDVGtRkJWWbfdCkP41z.jpg", + "https://image.tmdb.org/t/p/original/hjDTEvemz9r75lfFH4wJmKPe4FT.jpg", + "https://image.tmdb.org/t/p/original/pUzGG3pd6vjTb3vXTbiKFRGh91l.jpg", + "https://image.tmdb.org/t/p/original/1RRvlrgDd6NdsPqw65VjYrn9fFA.jpg", + "https://image.tmdb.org/t/p/original/neDOM00qxQ38KfzLGFQ1r087kyD.jpg", + "https://image.tmdb.org/t/p/original/ancGmWsW8FPwdO00wwvMkcAleSJ.jpg" + ] + }, + { + "airdate": "2022.06.09", + "title": "Lift Us Where Suffering Cannot Reach", + "description": "A threat to an idyllic planet reunites Captain Pike with the lost love of his life. To protect her and a scientific holy child from a conspiracy, Pike offers his help and is forced to face unresolved feelings of his past.", + "season": "01", + "episode": "06", + "podcasts": [ + { + "airdate": "2022.06.14", + "episode": "Nostalgically Smitten", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-176-nostalgically-smitten-snw-s1e6/", + "order": 176, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Lift_Us_Where_Suffering_Cannot_Reach_(episode)", + "tvdb": 3759363, + "imdb": "tt14426244", + "stills": [ + "https://image.tmdb.org/t/p/original/tQjLSGjSmutnJH8PifNUbTC3ySz.jpg", + "https://image.tmdb.org/t/p/original/lWfHmU1sT5hiJNQoDDABPiLLXMt.jpg", + "https://image.tmdb.org/t/p/original/lUCF8nMZo4OfJdoI6TVss2ZYVvg.jpg", + "https://image.tmdb.org/t/p/original/3MtaQm92zFCl4USkKsIulZ4vH2e.jpg", + "https://image.tmdb.org/t/p/original/jKP6JpdcoVXhZkgW92aJgcF8Pj8.jpg", + "https://image.tmdb.org/t/p/original/wN4hvRSzhCczXfcKMwmP69N2pEV.jpg", + "https://image.tmdb.org/t/p/original/fCjDSJqgXnqafSEsWjZk42Vyr05.jpg", + "https://image.tmdb.org/t/p/original/86gQGDA6Crdf5TuGD5OIilJFzFQ.jpg", + "https://image.tmdb.org/t/p/original/2TNdp40cXfWGXo57JURCyY3ssph.jpg", + "https://image.tmdb.org/t/p/original/aSoAQ3oo1uYmloQeF7tXxLhKDTS.jpg", + "https://image.tmdb.org/t/p/original/7hyVIxXmRq0YIo9C2i3pwKu2XYI.jpg", + "https://image.tmdb.org/t/p/original/xWYOWf1YvoZHsGABP8BQbrxvDgy.jpg", + "https://image.tmdb.org/t/p/original/x5uOK5BwQFrTIKAl5VkmgUZTssx.jpg", + "https://image.tmdb.org/t/p/original/mTf26PuMq7sLV9feyBKnQ3liWG2.jpg", + "https://image.tmdb.org/t/p/original/qXPUEvKjMYbbu3GGnXkYQG3vuK1.jpg", + "https://image.tmdb.org/t/p/original/gAIsiBHllcPYnqxvH0ECXDVHxd3.jpg", + "https://image.tmdb.org/t/p/original/cEBNp9vtJ43Bwm5Pl4DJdmHwXyS.jpg", + "https://image.tmdb.org/t/p/original/bohkpXavuH91qKyV7Osqodo73kt.jpg", + "https://image.tmdb.org/t/p/original/f57f60phSrLDLQVNH84k8GhS3hD.jpg", + "https://image.tmdb.org/t/p/original/ipc3gTkvdnLCy4NIPKW91kXHcHU.jpg", + "https://image.tmdb.org/t/p/original/9TrgI3j1OL1NEfvmBPkQtUfVYMF.jpg", + "https://image.tmdb.org/t/p/original/p7tdWrd6BrzpSpTLLyjRU1UWnS6.jpg", + "https://image.tmdb.org/t/p/original/1NRrgg8UckgqdfqU1QCNxzl3E1S.jpg", + "https://image.tmdb.org/t/p/original/awBM5DLQJFCqtTklmXlZ8SzDHPq.jpg", + "https://image.tmdb.org/t/p/original/vEY1CifP57WC4VUVKE1SLtMqq64.jpg", + "https://image.tmdb.org/t/p/original/4g5nrLFzJwl3afIawkpjiUHvKHD.jpg", + "https://image.tmdb.org/t/p/original/2qALKt4yJy58xLy0oFsKQApIOm0.jpg" + ] + }, + { + "airdate": "2022.06.16", + "title": "The Serene Squall", + "description": "While on a dangerous humanitarian mission, the crew of the U.S.S. Enterprise stumbles into a harrowing game of leverage with the quadrant\u2019s deadliest space pirate.", + "season": "01", + "episode": "07", + "podcasts": [ + { + "airdate": "2022.06.21", + "episode": "Cyber Pirate", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-177-cyber-pirate-snw-s1e7/", + "order": 177, + "title": "Greatest Trek" + } + ], + "memoryalpha": "The_Serene_Squall_(episode)", + "tvdb": 3775037, + "imdb": "tt14426852", + "stills": [ + "https://image.tmdb.org/t/p/original/momEFknzpISRl6pBr3nuT7MAEy.jpg", + "https://image.tmdb.org/t/p/original/mMekLIQxcnaUYZOXid5XtPUIoEg.jpg", + "https://image.tmdb.org/t/p/original/vhojQbrZmwVdPDtXSEpfiCet8aG.jpg", + "https://image.tmdb.org/t/p/original/oWrckulAsdXdKwf3mcUQ83KdC8b.jpg", + "https://image.tmdb.org/t/p/original/AjXxhSdd2bcjuRCs3yyy8b5ZMV1.jpg", + "https://image.tmdb.org/t/p/original/rIlzxVcrC0msmExlTomgnPXV6I6.jpg", + "https://image.tmdb.org/t/p/original/bzaOosPFtmpLVNKHjc6eCKeYa26.jpg", + "https://image.tmdb.org/t/p/original/pZGx9EfQzv1nsROuv1AgdEqLPbA.jpg", + "https://image.tmdb.org/t/p/original/qsWHo6fyjhHfDUDqglajgJKHxWd.jpg", + "https://image.tmdb.org/t/p/original/zsNItFwFZIDCFIWSavn2RLBhzte.jpg", + "https://image.tmdb.org/t/p/original/u3DCpv9ofsI0JlH3iCzOfpIEoB7.jpg", + "https://image.tmdb.org/t/p/original/b9CQ2GiqMsRA6cbJSLoySZBVl3M.jpg", + "https://image.tmdb.org/t/p/original/4DNuTZTPaGWvnF25vmI1skwqHG1.jpg", + "https://image.tmdb.org/t/p/original/vzzYt22TwIKIMkFHfhlAzM9cwgk.jpg", + "https://image.tmdb.org/t/p/original/pQHCpwHTDttFMJ6OVU6mlLIGWUi.jpg", + "https://image.tmdb.org/t/p/original/5CkSFaTzcdgu4b6QRrY7DtDp70I.jpg", + "https://image.tmdb.org/t/p/original/vZPKUoAJA1XIUGjJ3sVcxHhR7rd.jpg", + "https://image.tmdb.org/t/p/original/lDiSWxQKU8As3HOvTtkVK0Dh6Y2.jpg", + "https://image.tmdb.org/t/p/original/dmD4tYd7OlpHKnVjKVQjAmaeMZd.jpg", + "https://image.tmdb.org/t/p/original/zrHMZWwWArKZy4AEaIks5td0XFt.jpg", + "https://image.tmdb.org/t/p/original/2mHIQB2tqGYzWKwDF4T92DQSINS.jpg", + "https://image.tmdb.org/t/p/original/3vL4lIF2A36ZuWBWjTEbVcYpy6v.jpg", + "https://image.tmdb.org/t/p/original/wQIw2y8TYLW1zCBfun5mwRqAWTD.jpg" + ] + }, + { + "airdate": "2022.06.23", + "title": "The Elysian Kingdom", + "description": "The U.S.S. Enterprise becomes stuck in a nebula that is home to an alien consciousness that traps the crew in a fairy tale.", + "season": "01", + "episode": "08", + "podcasts": [ + { + "airdate": "2022.06.28", + "episode": "Sex Ed with the Cloud", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-178-sex-ed-with-the-cloud-snw-s1e8/", + "order": 178, + "title": "Greatest Trek" + } + ], + "memoryalpha": "The_Elysian_Kingdom_(episode)", + "tvdb": 3775041, + "imdb": "tt14426856", + "stills": [ + "https://image.tmdb.org/t/p/original/uVFtQkSMwjuGoWf4Luu1q4fxS8o.jpg", + "https://image.tmdb.org/t/p/original/jYB2wf0RNvN57IcBWxCFINt4DIL.jpg", + "https://image.tmdb.org/t/p/original/duER0YQPqR8R4cbkNJGRixjEEy5.jpg", + "https://image.tmdb.org/t/p/original/lVZKewNt4jowk18QM9IfWCoYfeD.jpg", + "https://image.tmdb.org/t/p/original/7PXXV3FZ1KLzVYPKttztaoyAQye.jpg", + "https://image.tmdb.org/t/p/original/yvPPV480SvLEz3EiHFinBC8QP2f.jpg", + "https://image.tmdb.org/t/p/original/nbd7hBSXsPuY9yUelers5RN9Bgg.jpg", + "https://image.tmdb.org/t/p/original/2ZZnPbF8gzIw4KgzApjk2bAdbz7.jpg", + "https://image.tmdb.org/t/p/original/zQZAi9ETtMmuCZyXwvgNmG8W8Gi.jpg", + "https://image.tmdb.org/t/p/original/lKJYkS9emv1HsnKFncm0u0lIdaH.jpg", + "https://image.tmdb.org/t/p/original/kXaTdxxHY3ltuTTMXjidUF7xLRS.jpg", + "https://image.tmdb.org/t/p/original/sSlfzdcqpauyR0gAioQun7133F7.jpg", + "https://image.tmdb.org/t/p/original/vGlxzvGaiq5bTrJWahAcwN2IErz.jpg", + "https://image.tmdb.org/t/p/original/bhNQUbpC0LpWL7KoNDtt9ikD0ur.jpg", + "https://image.tmdb.org/t/p/original/vob3VqhD3uG94RsdQGKOvFV13ae.jpg", + "https://image.tmdb.org/t/p/original/5Ajw1TTi8rMj3HKGZrP2YUafdYz.jpg", + "https://image.tmdb.org/t/p/original/mI6HowVnjG6H3WKgZ2FWM9cwLIS.jpg", + "https://image.tmdb.org/t/p/original/wdxOYaby2Fxbpv2aGbj9uvxFXB4.jpg", + "https://image.tmdb.org/t/p/original/unJsTycaxtj1QC1zdihoZJ32Ikn.jpg", + "https://image.tmdb.org/t/p/original/yCns6cDTihrB5Adas8618cfXAZl.jpg", + "https://image.tmdb.org/t/p/original/w3B85dD2bPjEgx0pnwmsIkVXHCa.jpg", + "https://image.tmdb.org/t/p/original/bhVf6Ef42zZz005yiO2WNLgcmyw.jpg", + "https://image.tmdb.org/t/p/original/jIfxONppY1Qrlxcv0dsDgtAIL3H.jpg", + "https://image.tmdb.org/t/p/original/k9P92GRF06fROS1DIMa5xNPIqD2.jpg", + "https://image.tmdb.org/t/p/original/qkJkS4CMQmNKkv9rQ28vqnU8WRH.jpg", + "https://image.tmdb.org/t/p/original/m62iKr3q5BuQgwb4XkdAxzhRnCh.jpg", + "https://image.tmdb.org/t/p/original/7vw5TybNdk42muUmLmoqGlRWjLq.jpg", + "https://image.tmdb.org/t/p/original/tREGyFh3lBavwCsdihmTSFYktOK.jpg", + "https://image.tmdb.org/t/p/original/tCj2qOUHKzmwUzkZTIeCRqWNBuX.jpg", + "https://image.tmdb.org/t/p/original/l7hkZSyqkEa0d93iQn1A9B0T1K6.jpg", + "https://image.tmdb.org/t/p/original/3cIemYQHzs0Vunq1b1hqgxPSI9s.jpg", + "https://image.tmdb.org/t/p/original/5csY8U03AA3NY1vO8EsjceuK9ER.jpg", + "https://image.tmdb.org/t/p/original/bEys6rF0S76qWm4IELspxqR1GDC.jpg", + "https://image.tmdb.org/t/p/original/x8OYgBcwXRDu1oOI8LUa9mbVGOS.jpg", + "https://image.tmdb.org/t/p/original/z9gQ9KpkEEuOZDNtSaVmdLu1dX0.jpg" + ] + }, + { + "airdate": "2022.06.30", + "title": "All Those Who Wander", + "description": "The U.S.S. Enterprise crew comes face-to-face with their demons \u2013 and scary monsters too \u2013 when their landing party is stranded on a barren planet with a ravenous enemy.", + "season": "01", + "episode": "09", + "podcasts": [ + { + "airdate": "2022.07.05", + "episode": "Top Gorns", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-179-top-gorns-snw-s1e9/", + "order": 179, + "title": "Greatest Trek" + } + ], + "memoryalpha": "All_Those_Who_Wander_(episode)", + "tvdb": 3775042, + "imdb": "tt14426858", + "stills": [ + "https://image.tmdb.org/t/p/original/bioXJiaO7yeMvjwNkczv2rv8SH1.jpg", + "https://image.tmdb.org/t/p/original/wDaZ4PaAR15rAPjuNqIUdSrNEcb.jpg", + "https://image.tmdb.org/t/p/original/baWKXHOjqFIWmQqF44xg4H9XpNM.jpg", + "https://image.tmdb.org/t/p/original/nqvyeP8J7wKdel1xtPstvQ92rb5.jpg", + "https://image.tmdb.org/t/p/original/mYso3xRNXdWRhHi2fk0tvDllI8S.jpg", + "https://image.tmdb.org/t/p/original/qTPyjJNuD37Jaao0qvNifQSWcxx.jpg", + "https://image.tmdb.org/t/p/original/xishUfrAYRWMOUBGZWTMIz3LPUy.jpg", + "https://image.tmdb.org/t/p/original/dLmgjVCUhtXbtz8UROldHgpaiX0.jpg", + "https://image.tmdb.org/t/p/original/f4xFrRgXbjhMm0ZplJnML3nJTdV.jpg", + "https://image.tmdb.org/t/p/original/ub6FTJl4ledgqfWQqn8BKw8W31z.jpg", + "https://image.tmdb.org/t/p/original/qXpxhz0DcU9SqjWJ6ahxTRES5ko.jpg", + "https://image.tmdb.org/t/p/original/tSnPQbmMle2SHIl8rfKK7MMX17V.jpg", + "https://image.tmdb.org/t/p/original/137DHzQ1R9JQggYB2c4tK2NlVlM.jpg", + "https://image.tmdb.org/t/p/original/yzc9ANKYp6AqcsN24iVytk7j5Fd.jpg", + "https://image.tmdb.org/t/p/original/c4Im2i8SVXwt8uBsmWl3JnbrJgh.jpg", + "https://image.tmdb.org/t/p/original/3C483zrPtK8Jpjgo3TQRcuDe2ki.jpg", + "https://image.tmdb.org/t/p/original/aKHOa5zhxN15ADvn9lgXbkKYexe.jpg", + "https://image.tmdb.org/t/p/original/gtvQ56KTV1Sq35PO5825cqahTeA.jpg", + "https://image.tmdb.org/t/p/original/WnNJrPcooSeeaqbkTQbtC9vuUd.jpg", + "https://image.tmdb.org/t/p/original/iYXyRf3wpTEWJrLiwqq0VvZpWap.jpg", + "https://image.tmdb.org/t/p/original/AbKdmMIjEkWpTpPigowj606toUh.jpg", + "https://image.tmdb.org/t/p/original/s5XHumWoHEkihSPnEIKSZLm2Eq6.jpg", + "https://image.tmdb.org/t/p/original/zzhHhSrUZRmK9T98XioteNtBL1g.jpg", + "https://image.tmdb.org/t/p/original/ymlU2OHLHY40zvt2TyJWVu02357.jpg", + "https://image.tmdb.org/t/p/original/6fHaSMfsXDMuAjr3UqLkUPL40MQ.jpg", + "https://image.tmdb.org/t/p/original/ijk1dwMUEpYVybFKimh9qp2pJFF.jpg", + "https://image.tmdb.org/t/p/original/At9Vy3ERJXRhKg37xMtfXudmYyS.jpg", + "https://image.tmdb.org/t/p/original/szhNQ7GHBMwr945QSYxP03haSwo.jpg", + "https://image.tmdb.org/t/p/original/uvwFLYx38H2YGy84u26lyqw1RYv.jpg", + "https://image.tmdb.org/t/p/original/hIXaS09CnCiWubTexsEGzAIk72M.jpg", + "https://image.tmdb.org/t/p/original/jFfYMKHIkgru7ehcOwZE6hMgBTL.jpg", + "https://image.tmdb.org/t/p/original/dDeMXhM2aTwMqPlWLWfCR3lRg6G.jpg", + "https://image.tmdb.org/t/p/original/8nK5X6HXoRdN4al9LKfcLJf5wXV.jpg", + "https://image.tmdb.org/t/p/original/1y67Q7KsB6JdwDTYtMueS9WNcXl.jpg", + "https://image.tmdb.org/t/p/original/8BTVEpl4vN0GcLGyskYDpEAFd2y.jpg", + "https://image.tmdb.org/t/p/original/mA9aa81J9obbnb5hr4BM8fQApGS.jpg", + "https://image.tmdb.org/t/p/original/yDSYc4oeEV4JbhGE7heiIKEyA9b.jpg", + "https://image.tmdb.org/t/p/original/bBaXNln3twHhSEECABCpdN1l2ZI.jpg", + "https://image.tmdb.org/t/p/original/8ZSwwGu6oVVq4Dc1ZlTXaAtV5E2.jpg", + "https://image.tmdb.org/t/p/original/pwHWuTgpFqhCkJbR8IyD2ZWDu3w.jpg", + "https://image.tmdb.org/t/p/original/3gfsDtRMKaU0CP13V8k1YeAwjma.jpg", + "https://image.tmdb.org/t/p/original/ovpq0oPmMTeQaqs9eOoPVSIrA4Y.jpg" + ] + }, + { + "airdate": "2022.07.07", + "title": "A Quality of Mercy", + "description": "Just as Captain Pike thinks he's figured out how to escape his fate, he's visited by his future self, who shows him the consequences of his actions.", + "season": "01", + "episode": "10", + "podcasts": [ + { + "airdate": "2022.07.12", + "episode": "Osso Buco, Et Cetera", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-180-osso-buco-et-cetera-snw-s1e10/", + "order": 180, + "title": "Greatest Trek" + } + ], + "memoryalpha": "A_Quality_of_Mercy_(episode)", + "tvdb": 3775043, + "imdb": "tt14426860", + "stills": [ + "https://image.tmdb.org/t/p/original/dInKNSozbQFAa1i3Xxd1NcorPLc.jpg", + "https://image.tmdb.org/t/p/original/bgUEP4B2oRey4brszOK4glFFORl.jpg", + "https://image.tmdb.org/t/p/original/laFUzJPQVkIgJODMTSbPtSp8yNM.jpg", + "https://image.tmdb.org/t/p/original/b9G7m9cfnzjtrBxVx9DMHWfGdZV.jpg", + "https://image.tmdb.org/t/p/original/nWsChrdYR44uM5zRFdg5wp1HjW3.jpg", + "https://image.tmdb.org/t/p/original/qcZDQp2MRCF6HTvCdhOIm5ssap2.jpg", + "https://image.tmdb.org/t/p/original/vqJHpgwWRIwfvidX3QdlvAmwVbF.jpg", + "https://image.tmdb.org/t/p/original/v1kEbIlgq8AB5Y61P4ZmsyEHEP7.jpg", + "https://image.tmdb.org/t/p/original/pnmvPMjenAeoyTm8TkK4jWqAuh6.jpg", + "https://image.tmdb.org/t/p/original/tkXnUBdn9pDESFV2d0JhhHA8UE2.jpg", + "https://image.tmdb.org/t/p/original/xfJBQzk5r8dh6ovLpw1erIhnp1i.jpg", + "https://image.tmdb.org/t/p/original/1EqFtqAUVKLPEfPkCcWGwrAjy1H.jpg", + "https://image.tmdb.org/t/p/original/A62f62YjD1l9myoBGW4HGXNTuPl.jpg", + "https://image.tmdb.org/t/p/original/6lGmSZ3zRF5FvLHSasOoRwgsvCa.jpg", + "https://image.tmdb.org/t/p/original/u4ku33PlwS8XRWLr1bt1wlUIsxf.jpg", + "https://image.tmdb.org/t/p/original/st53pS4dYsloRAOVcfb9C0dG9nj.jpg", + "https://image.tmdb.org/t/p/original/ibJyiPlm8lqfC9ZmKKXIKENL9Q2.jpg", + "https://image.tmdb.org/t/p/original/4E52wfqQmXSuhUAptPGrNnIZKbi.jpg", + "https://image.tmdb.org/t/p/original/2LwA6f4UrDCXd8fuIbg1tesL1sp.jpg", + "https://image.tmdb.org/t/p/original/S63ZlFPI0lzeYGvh2S0g3jgswL.jpg", + "https://image.tmdb.org/t/p/original/vu4a8sZY6TPlVQhcTT6DQs36Imo.jpg", + "https://image.tmdb.org/t/p/original/omBzRNWDBCXcE4ss6pkqQG4p3GF.jpg" + ] + }, + { + "airdate": "2023.06.15", + "title": "The Broken Circle", + "description": "A distress call from Lt. Noonien-Singh compels Spock to disobey orders and take the U.S.S. Enterprise and its crew into disputed space, risking renewed hostilities with the Klingons in a bid to aid their shipmate.", + "season": "02", + "episode": "01", + "podcasts": [ + { + "airdate": "2023.06.16", + "episode": "Stairway to Sha Ka Ree", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-226-stairway-to-sha-ka-ree-snw-s2e1/", + "order": 226, + "title": "Greatest Trek" + } + ], + "memoryalpha": "The_Broken_Circle_(episode)", + "tvdb": 4224492, + "imdb": "tt17079894", + "stills": [ + "https://image.tmdb.org/t/p/original/zOKZl3C5tDFu4ji1QqWI4qxC7sF.jpg", + "https://image.tmdb.org/t/p/original/pF5GEUQxEPbel99d4OhEI4YiR2V.jpg", + "https://image.tmdb.org/t/p/original/laHGPCjO9wJx52pIPvqMBt2Is9g.jpg", + "https://image.tmdb.org/t/p/original/2iQ25WHNeI4pRX68JlSbP1RU8YD.jpg", + "https://image.tmdb.org/t/p/original/kgBogRCN76EgQSVN6ur1xnlZaoR.jpg", + "https://image.tmdb.org/t/p/original/dHLLhMP9g0LVAOfTXRgoAPS0e1O.jpg", + "https://image.tmdb.org/t/p/original/wE9haDVE7uVGo0BliiJqFIbBLS3.jpg", + "https://image.tmdb.org/t/p/original/1k1a8b3NFnt1QiXZiOAumPtfeE2.jpg", + "https://image.tmdb.org/t/p/original/uihK371hpeVRjbNj94GzwoXnXos.jpg", + "https://image.tmdb.org/t/p/original/bSpzGArq3krwQ765K09W0ihjvS8.jpg", + "https://image.tmdb.org/t/p/original/lzfcmSZ9N4owcPBEfY51wwxEHdv.jpg", + "https://image.tmdb.org/t/p/original/vzs5BXPlDHHRiwdTo3S9ZsvyZs2.jpg", + "https://image.tmdb.org/t/p/original/aSGE52a1uVuaxu1SZql6WTd8Waw.jpg", + "https://image.tmdb.org/t/p/original/oqKgizoY10zF0mvkuFn2M0V8nKk.jpg", + "https://image.tmdb.org/t/p/original/3siAM0sJiV2I6h4x2XHyNaryNOB.jpg", + "https://image.tmdb.org/t/p/original/ypJsmr9qByEbrInSHNjZkXOyDYF.jpg", + "https://image.tmdb.org/t/p/original/pJZ9fXfr6joGD3nmuytYcDB6t3X.jpg", + "https://image.tmdb.org/t/p/original/t01rOhSRLr95uFtMpQsvNjiiv47.jpg", + "https://image.tmdb.org/t/p/original/cMgCOVyVxxQj49gIfCobKPrqKpi.jpg" + ] + }, + { + "airdate": "2023.06.22", + "title": "Ad Astra per Aspera", + "description": "Commander Una faces court-martial along with possible imprisonment and dishonorable dismissal from Starfleet, and her defense is in the hands of a lawyer who\u2019s also a childhood friend with whom she had a terrible falling out.", + "season": "02", + "episode": "02", + "podcasts": [ + { + "airdate": "2023.06.23", + "episode": "Justice Dimple", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-227-justice-dimple-snw-s2e2/", + "order": 227, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Ad_Astra_per_Aspera_(episode)", + "tvdb": 4224493, + "imdb": "tt18971274", + "stills": [ + "https://image.tmdb.org/t/p/original/xmDChudvEB7eq7DlKlljjrqUiFg.jpg", + "https://image.tmdb.org/t/p/original/fteZIJpZh00dLeljolLHqwG2ipy.jpg", + "https://image.tmdb.org/t/p/original/pEqTkHqHkHwfylWQaNeWMPGe3na.jpg", + "https://image.tmdb.org/t/p/original/w2uIPrXhDPyInjIPXmV4RLfVZ6I.jpg", + "https://image.tmdb.org/t/p/original/nl32UFFkFTCP5Fi5ZLITOvDbQ0P.jpg", + "https://image.tmdb.org/t/p/original/aHNwAW4t32njMjBdZnMruMzNJt2.jpg", + "https://image.tmdb.org/t/p/original/1GfBXkZ3Qe4obYR1Lrs5vuOAgwf.jpg", + "https://image.tmdb.org/t/p/original/nSrcdpmWnFMyeg2LfaCIklFGwt3.jpg", + "https://image.tmdb.org/t/p/original/4vP1raateuQe7oQap2HzgdNMHhU.jpg", + "https://image.tmdb.org/t/p/original/tR1ZHhlQEPLvWBYtc5z79jxfrws.jpg", + "https://image.tmdb.org/t/p/original/5nbz6GGR6esXhFlXUjewbvj6yFM.jpg", + "https://image.tmdb.org/t/p/original/xGWvJvP6wLlXQD8ZjOoGZfGEmUw.jpg", + "https://image.tmdb.org/t/p/original/e4p8aQfm2U6Fi4paLcJDyo4RGpb.jpg", + "https://image.tmdb.org/t/p/original/c8veHnNExS3qht86VeZ9fTNnQFx.jpg", + "https://image.tmdb.org/t/p/original/AiKrEpITrRbdwLBS8YebTft5RU0.jpg", + "https://image.tmdb.org/t/p/original/kpQZ2Wm4Zlw3arrWhbH9m1SX5R7.jpg", + "https://image.tmdb.org/t/p/original/ff2Zh5WzqwoJIhwhIEh2hTiILTJ.jpg", + "https://image.tmdb.org/t/p/original/1s8XqqmFszSi4wz28U7545ewDiw.jpg", + "https://image.tmdb.org/t/p/original/tqJxuMpXbUrgo6DWIcz8sw5iQcv.jpg", + "https://image.tmdb.org/t/p/original/rNbDInfIaKVjD3C7WH5fveB1pK8.jpg", + "https://image.tmdb.org/t/p/original/cMR0gUmsr7h0tGBg48X91kI2aKN.jpg", + "https://image.tmdb.org/t/p/original/gHpnrDWjdHtvsJb4DfzbWxjNAhH.jpg", + "https://image.tmdb.org/t/p/original/mKlGfCOk7Yz2DIErHMdyGz7niH4.jpg", + "https://image.tmdb.org/t/p/original/qArG3XDSlKr6HZzQR5KR6lO29hE.jpg" + ] + }, + { + "airdate": "2023.06.29", + "title": "Tomorrow and Tomorrow and Tomorrow", + "description": "La'an travels back in time to twenty-first-century Earth to prevent an attack which will alter humanity\u2019s future history\u2014and bring her face to face with her own contentious legacy.", + "season": "02", + "episode": "03", + "podcasts": [ + { + "airdate": "2023.06.30", + "episode": "Side Kirk", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-228-side-kirk-snw-s2e3/", + "order": 228, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Tomorrow_and_Tomorrow_and_Tomorrow_(episode)", + "tvdb": 4224494, + "imdb": "tt18969462", + "stills": [ + "https://image.tmdb.org/t/p/original/f4FRVjwKKwM37g55Y32ule1wvIh.jpg", + "https://image.tmdb.org/t/p/original/ciTQOXuovlgY1G7W6IkaSFub4oS.jpg", + "https://image.tmdb.org/t/p/original/21NFw9zjGt9NzQDXFhiHxSUo537.jpg", + "https://image.tmdb.org/t/p/original/sguw4n60vmJFC0yqplXtu85GZ6k.jpg", + "https://image.tmdb.org/t/p/original/9DSGp1iCFgwKR8zXYwvnsSvzG13.jpg", + "https://image.tmdb.org/t/p/original/AmG86eq7BhhWaySBn7HCsyayazV.jpg", + "https://image.tmdb.org/t/p/original/1h3alIIbTG1wqSVA1D4KrTzUxfP.jpg", + "https://image.tmdb.org/t/p/original/cFJDmpkIWQJAeYn3sGITbsWSxlv.jpg", + "https://image.tmdb.org/t/p/original/mpHV1KVP4XB9YAsWFWqK0fRyKhb.jpg", + "https://image.tmdb.org/t/p/original/pmsFoSRQwonFX9XnG5jIfDFpbke.jpg", + "https://image.tmdb.org/t/p/original/ukLke4sF2hmCP0cfqsCJfwEDeRA.jpg", + "https://image.tmdb.org/t/p/original/AmuSAcmpHWBu5ph1dfCIdv3TdYa.jpg", + "https://image.tmdb.org/t/p/original/rLJcxIZSUmgOqDcVEq6iWu55SRM.jpg", + "https://image.tmdb.org/t/p/original/1e83rvsV8TmMwqVh9XNHxpEaiTC.jpg" + ] + }, + { + "airdate": "2023.07.06", + "title": "Among the Lotus Eaters", + "description": "Returning to a planet that dredges up tragic memories, Captain Pike and his landing party find themselves forgetting everything, including their own identities as he confronts a ghost from his past.", + "season": "02", + "episode": "04", + "podcasts": [ + { + "airdate": "2023.07.07", + "episode": "Nobody Goes to the Castle for Free", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-229-nobody-goes-to-the-castle-for-free-snw-s2e4/", + "order": 229, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Among_the_Lotus_Eaters_(episode)", + "tvdb": 4224495, + "imdb": "tt22805714", + "stills": [ + "https://image.tmdb.org/t/p/original/jJi2VGuS0tyXKtuqgCjsNIOztUY.jpg", + "https://image.tmdb.org/t/p/original/u7FlCBuLPtcFSYiAiULq7OW7eTh.jpg", + "https://image.tmdb.org/t/p/original/sEqMpLNJbCP6Rr8X2eTxl0Jsq1w.jpg", + "https://image.tmdb.org/t/p/original/alb6lNdYx1Otpc5ePsSr2QkB7aG.jpg", + "https://image.tmdb.org/t/p/original/sqVywPrePDiWEP023TM1LUVTDID.jpg", + "https://image.tmdb.org/t/p/original/lWC0IecBER35shQEKQpt31skkgw.jpg", + "https://image.tmdb.org/t/p/original/2GfJPJnDYweLEHIjDHWJw2d8lN6.jpg", + "https://image.tmdb.org/t/p/original/xr4gCELpiNryDp7TkJmdox6QUGo.jpg" + ] + }, + { + "airdate": "2023.07.13", + "title": "Charades", + "description": "A shuttle accident leads to Spock's Vulcan DNA being removed by aliens, making him fully human and completely unprepared to face T'Pring's family during an important ceremonial dinner.", + "season": "02", + "episode": "05", + "podcasts": [ + { + "airdate": "2023.07.14", + "episode": "Space-Time Hall Pass", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-230-space-time-hall-pass-snw-s2e5/", + "order": 230, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Charades_(episode)", + "tvdb": 4224496, + "imdb": "tt22805720", + "stills": [ + "https://image.tmdb.org/t/p/original/An9V1HboTzyLOCzEBygUHZiEmRG.jpg", + "https://image.tmdb.org/t/p/original/oZFP98MzGIbAnisaNtmuMzkqk7A.jpg", + "https://image.tmdb.org/t/p/original/oX448GIjqn45QQzA5u6owerfjyM.jpg", + "https://image.tmdb.org/t/p/original/epj3AGjYIvkpC3DYunSHOGlxqjt.jpg", + "https://image.tmdb.org/t/p/original/6MPMD2bobdyKH0sgeglPxgOg6j6.jpg", + "https://image.tmdb.org/t/p/original/4fx9dypTjzhWY3ddmZCBmCpVgWg.jpg", + "https://image.tmdb.org/t/p/original/yymTe0zrZitw48QRH4SKaE7q0Mq.jpg", + "https://image.tmdb.org/t/p/original/fdP3fjd6KdbMui29OOm1FVrKfDp.jpg", + "https://image.tmdb.org/t/p/original/40MyoqOjNi7CotfC21xctl6EkGE.jpg", + "https://image.tmdb.org/t/p/original/rhsX6XkvpgWeKBYj8yB4CwSrDY4.jpg" + ] + }, + { + "airdate": "2023.07.20", + "title": "Lost In Translation", + "description": "Uhura seems to be the only one who can hear a strange sound. When the noise triggers terrifying hallucinations, she enlists an unlikely assistant to help her track down the source.", + "season": "02", + "episode": "06", + "podcasts": [ + { + "airdate": "2023.07.21", + "episode": "Noteworthy Knuck", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-231-noteworthy-knuck-snw-s2e6/", + "order": 231, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Lost_in_Translation_(episode)", + "tvdb": 4224497, + "imdb": "tt22805736", + "stills": [ + "https://image.tmdb.org/t/p/original/wvAbW0YLMeOHjUIdd7N8euPBc4f.jpg", + "https://image.tmdb.org/t/p/original/aqRVXuSXzG7A7VQuad1rc1Anvqf.jpg", + "https://image.tmdb.org/t/p/original/qCKAs7SaQmW6xcTZfIb8L3yyEwy.jpg", + "https://image.tmdb.org/t/p/original/sY0tT2ObTl0sYSVlXD9rBVvOx45.jpg", + "https://image.tmdb.org/t/p/original/48Y9lAOZzKXTNcb3ZmGA2N6jKVZ.jpg", + "https://image.tmdb.org/t/p/original/A2Dq5lYEHJS4azQlfUhwFICnAUj.jpg", + "https://image.tmdb.org/t/p/original/cVGnTlkckI7Z7UPWRvMsOPkT6KX.jpg", + "https://image.tmdb.org/t/p/original/2KL97QTvkmVlczi0TPrTS81rYSp.jpg", + "https://image.tmdb.org/t/p/original/kBLJHGbP74ZZ8wFl8NGmCgUpBWr.jpg" + ] + }, + { + "airdate": "2023.07.22", + "title": "Those Old Scientists", + "description": "An accident while investigating a time portal sends Ensign Brad Boimler through time from the twenty-fourth century, and Captain Pike and his crew must get him back where he belongs before he can somehow alter the timeline.", + "season": "02", + "episode": "07", + "podcasts": [ + { + "airdate": "2023.07.25", + "episode": "Science and Cigarettes", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-232-science-and-cigarettes-snw-s2e7/", + "order": 232, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Those_Old_Scientists_(episode)", + "tvdb": 4224498, + "imdb": "tt22805748", + "stills": [ + "https://image.tmdb.org/t/p/original/cUXmAvXYhi7zBIzoFgIzbxmf6QI.jpg", + "https://image.tmdb.org/t/p/original/bcjcDCpLh9UPtE9FwyqORS7ErsM.jpg", + "https://image.tmdb.org/t/p/original/f4tMhOHn3dqi8gxx6DBx11JEGRg.jpg", + "https://image.tmdb.org/t/p/original/rPH3gu85mDHrNmyb4otwuilYvzv.jpg", + "https://image.tmdb.org/t/p/original/1lAnqJILxNNK2AG1eqei23LiA4A.jpg", + "https://image.tmdb.org/t/p/original/5qj2Je1Q1Cp3nbABMf36yAFeepQ.jpg", + "https://image.tmdb.org/t/p/original/9i5V2080KsIajlPRu0gQvdQKkj2.jpg", + "https://image.tmdb.org/t/p/original/dDFMZ9AFbj1KjmsgY1FoFRDaXLF.jpg", + "https://image.tmdb.org/t/p/original/bbnI8T1UewLmLblCIgv5blXoroM.jpg", + "https://image.tmdb.org/t/p/original/6DwABxZ3TSgmJ5axgdnJ1Dv6yJl.jpg", + "https://image.tmdb.org/t/p/original/z7o2wze8VYdOLKw5EeP8dzXr3yH.jpg", + "https://image.tmdb.org/t/p/original/xe3K3YpPbeA3njQtiNSy1IMk1ia.jpg", + "https://image.tmdb.org/t/p/original/mY3DBGa6iGRBfOkyph0HOmOfxWg.jpg", + "https://image.tmdb.org/t/p/original/1gmK5tyft0nobKGd9DHmefppYAG.jpg", + "https://image.tmdb.org/t/p/original/kQBnKy70lr7vgph8xX29xt1zhYX.jpg", + "https://image.tmdb.org/t/p/original/ryKKHLTSW8xwoSAvrNueOh7cdA7.jpg", + "https://image.tmdb.org/t/p/original/o6zio3xIkKe4WJDc45jL1CG7XAL.jpg", + "https://image.tmdb.org/t/p/original/hIXwsqL7GdXUISkM21ISxjL88eN.jpg", + "https://image.tmdb.org/t/p/original/y6y3Na8j7fsC4ndcXgmLs75uoTP.jpg", + "https://image.tmdb.org/t/p/original/cd9VNZqhvow9iNKHQa7gjhNQ6KD.jpg", + "https://image.tmdb.org/t/p/original/jEVEbulQT7m8bAb99EtsJiaymhn.jpg", + "https://image.tmdb.org/t/p/original/bmW6XhdY8ZMPEZUjlT8STvm3QxJ.jpg", + "https://image.tmdb.org/t/p/original/6toCq0SZ1kTYWGwY4Pe8ITygS00.jpg", + "https://image.tmdb.org/t/p/original/29Y0jvok687Sq32bcWo9C5FDkRR.jpg", + "https://image.tmdb.org/t/p/original/ilMcMXRHAZwg2ID1iOc0Qeb7B8A.jpg", + "https://image.tmdb.org/t/p/original/3UYN2L3hNy5wy6rs3dXHnMuYVlg.jpg", + "https://image.tmdb.org/t/p/original/k6iJxkIj3xT2agsVV0xgkivLRXr.jpg", + "https://image.tmdb.org/t/p/original/9HNgVMLsfNLLFSMN1AosxVaKq4l.jpg", + "https://image.tmdb.org/t/p/original/rmcX1sAliZifIQ3jP0NwflZAFGW.jpg" + ] + }, + { + "airdate": "2023.07.27", + "title": "Under the Cloak of War", + "description": "Captain Pike and his crew welcome a Klingon defector aboard the U.S.S. Enterprise, but his presence triggers the revelation of some shocking secrets.", + "season": "02", + "episode": "08", + "podcasts": [ + { + "airdate": "2023.07.28", + "episode": "Canonical Commuter Mug", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-233-canonical-commuter-mug-snw-s2e8/", + "order": 233, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Under_the_Cloak_of_War_(episode)", + "tvdb": 4224499, + "imdb": "tt22805752", + "stills": [ + "https://image.tmdb.org/t/p/original/6UHcQZJjC5StPGkzq6sZAsBLGqx.jpg", + "https://image.tmdb.org/t/p/original/dD0EHbUPMWCiG917XttoC7vvN5F.jpg", + "https://image.tmdb.org/t/p/original/935F4WjcXRHqrjBG6hm3EaOEipE.jpg", + "https://image.tmdb.org/t/p/original/tuhzse0eW9y7BnDhtYRJBjhxIR5.jpg", + "https://image.tmdb.org/t/p/original/4Isoj6SUqoF0MK24Zc8HQ5F2vuB.jpg", + "https://image.tmdb.org/t/p/original/64Q9ilcyd38HSpzMbSfANNhT5gl.jpg", + "https://image.tmdb.org/t/p/original/1zd0Llr1058lZhEzhDGpCoCmpWX.jpg", + "https://image.tmdb.org/t/p/original/5xDBgZAI9d4nstW5on6e9IFyaDs.jpg", + "https://image.tmdb.org/t/p/original/bz9HxkwWtzFiI1bTdzDEMzTFfs5.jpg", + "https://image.tmdb.org/t/p/original/hngOHsz9WmXQWz9G6J1mlSoZrUv.jpg" + ] + }, + { + "airdate": "2023.08.03", + "title": "Subspace Rhapsody", + "description": "An accident with an experimental quantum probability field causes everyone on the U.S.S. Enterprise to break uncontrollably into song, but the real danger is that the field is expanding and beginning to impact other ships\u2014allies and enemies alike.", + "season": "02", + "episode": "09", + "podcasts": [ + { + "airdate": "2023.08.04", + "episode": "B\u0153uf Denouement", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-234-boeuf-denouement-snw-s2e9/", + "order": 234, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Subspace_Rhapsody_(episode)", + "tvdb": 4224500, + "imdb": "tt22805762", + "stills": [ + "https://image.tmdb.org/t/p/original/a7Cu3KpMBkCh8Tgxgja87WgFE6u.jpg", + "https://image.tmdb.org/t/p/original/silXyPIJc5DeTLDEAdgfhHAjAOS.jpg", + "https://image.tmdb.org/t/p/original/ruI9FpC0TVSZgn8Tx44PT3rfZ9k.jpg", + "https://image.tmdb.org/t/p/original/dDHNzb1vC7guQUmTkqotXJzOERE.jpg", + "https://image.tmdb.org/t/p/original/m3j5KM4aqGRIniGVvIEpvkp4tRW.jpg", + "https://image.tmdb.org/t/p/original/m1pQsKf0JRxS3hu42opArqONneH.jpg", + "https://image.tmdb.org/t/p/original/jD7FNahP0NBZAkd5VoZaFN771PB.jpg", + "https://image.tmdb.org/t/p/original/rCxzQpIfgdgccK6SXERNVF6JFnn.jpg", + "https://image.tmdb.org/t/p/original/9cFzw7yxLHVpoNsQ3Gu6phJtE7o.jpg", + "https://image.tmdb.org/t/p/original/sgm5VLNuvP57JzlUrbZQmvPb835.jpg", + "https://image.tmdb.org/t/p/original/8klNGW88Wz6IRDhiXDR3iSTyaD9.jpg", + "https://image.tmdb.org/t/p/original/krxqj1LQazsQA0jK9LH9GmBQCXx.jpg", + "https://image.tmdb.org/t/p/original/gJlFmfmmCj8fodJJcoFTOTyUUQY.jpg", + "https://image.tmdb.org/t/p/original/rLpzvwiSfTnlNlv3klBp5FAkna8.jpg", + "https://image.tmdb.org/t/p/original/iWPiPsTNzxp1tQcRhCJdVVN8ldA.jpg", + "https://image.tmdb.org/t/p/original/yvd74nmxh0XxXfPpbrm1Z0NxNay.jpg", + "https://image.tmdb.org/t/p/original/oREgD9C6jgpd7SNDc0nMRF0LQpW.jpg", + "https://image.tmdb.org/t/p/original/mKY2s91XR1iiLjSvxZdWHM370QT.jpg", + "https://image.tmdb.org/t/p/original/85w5b4KCjFbjOz0kj3w69MvQOqC.jpg", + "https://image.tmdb.org/t/p/original/pvTQs3UymmKS2hPAWE6ZThxwICP.jpg", + "https://image.tmdb.org/t/p/original/cspSXt3EMEInWKTH4SUVImIhtlI.jpg" + ] + }, + { + "airdate": "2023.08.10", + "title": "Hegemony", + "description": "When the U.S.S. Enterprise investigates an attack on a colony at the edge of Federation space, Captain Pike and his crew face the return of a formidable enemy.", + "season": "02", + "episode": "10", + "podcasts": [ + { + "airdate": "2023.08.11", + "episode": "Practical Butts", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-235-practical-butts-snw-s2e10/", + "order": 235, + "title": "Greatest Trek" + } + ], + "memoryalpha": "Hegemony_(episode)", + "tvdb": 4224501, + "imdb": "tt22805766", + "stills": [ + "https://image.tmdb.org/t/p/original/rwqAAZjadCcmzfpLFvScBmzl274.jpg", + "https://image.tmdb.org/t/p/original/6saul9xiyswO5gSx1MvLqmluO5D.jpg", + "https://image.tmdb.org/t/p/original/hsu83r1vqamvJJqO0dAthSJnpfB.jpg", + "https://image.tmdb.org/t/p/original/w4IzVVoFhu8nnyY3ei4iUsB3t0x.jpg", + "https://image.tmdb.org/t/p/original/rR9AFu9aTzdGWHntwaoeVFmwVtU.jpg", + "https://image.tmdb.org/t/p/original/5MANXLSz3TO2KsX4qaNM4f15IEQ.jpg", + "https://image.tmdb.org/t/p/original/s2l73Vg8f2wvI0H2FoM0MWjYDZC.jpg", + "https://image.tmdb.org/t/p/original/e0HUDy4N8uuKJoAv20YHipw8L4O.jpg", + "https://image.tmdb.org/t/p/original/pWj7wtQPO4kZuSA4rRO4UcZKQPG.jpg", + "https://image.tmdb.org/t/p/original/12TbUyUDhLzL7pNu6GqCLnWpxGL.jpg", + "https://image.tmdb.org/t/p/original/2e7LxFoTfTTQerdXNdGUjlJTv8v.jpg", + "https://image.tmdb.org/t/p/original/moORoRKnVtapR8VxYNGtWrKyoiP.jpg", + "https://image.tmdb.org/t/p/original/w9qSsWDX1eI7ylgEsaO5QfcM55.jpg", + "https://image.tmdb.org/t/p/original/mqNQMXojIxC5C0hpi0hr89DWj9d.jpg", + "https://image.tmdb.org/t/p/original/7RIH06WJb6uV3MFz1MKD4qRyO2b.jpg", + "https://image.tmdb.org/t/p/original/qpGkPo0dSM8e5pNmweNpLePJW4J.jpg", + "https://image.tmdb.org/t/p/original/crcb4QO7hN0abMPQ07K4COhxeUf.jpg", + "https://image.tmdb.org/t/p/original/9FT0mDdIP3eu5iWBt5vVkuOSZOa.jpg", + "https://image.tmdb.org/t/p/original/nmbvtkI4q8net0SuqwKc8OcaWXI.jpg", + "https://image.tmdb.org/t/p/original/eUHS9yT385XHZqwWbPjJzbnAqec.jpg" + ] + } + ], + "imdb": "", + "title": "Star Trek: Strange New Worlds", + "trek": true, + "tvdb": 103516 +} \ No newline at end of file diff --git a/data/episodes/tos.json b/data/episodes/tos.json index f69e1928..abf61b05 100755 --- a/data/episodes/tos.json +++ b/data/episodes/tos.json @@ -488,7 +488,15 @@ "episode": "04", "imdb": "tt0708438", "memoryalpha": "", - "podcasts": [], + "podcasts": [ + { + "title": "Greatest Trek", + "order": 184, + "airdate": "2022.08.09", + "episode": "Erect Arm Status (TOS S2E4)", + "link": "https://maximumfun.org/episodes/greatest-trek/ep-184-erect-arm-status-tos-s2e4/" + } + ], "season": "02", "stills": [ "https://image.tmdb.org/t/p/original/tTNlen4ziVgO8LteaxCzYdc7ejv.jpg", diff --git a/data/info.json b/data/info.json index 50271214..bf5e7df1 100755 --- a/data/info.json +++ b/data/info.json @@ -41,6 +41,18 @@ "trek": true, "source": "./data/episodes/picard.json" }, + "prodigy": { + "name": "Star Trek: Prodigy", + "enabled": true, + "trek": true, + "source": "./data/episodes/prodigy.json" + }, + "snw": { + "name": "Star Trek: Strange New Worlds", + "enabled": true, + "trek": true, + "source": "./data/episodes/snw.json" + }, "simpsons": { "name": "The Simpsons", "enabled": true, @@ -75,6 +87,6 @@ "name": "Star Trek: Voyager", "enabled": true, "trek": true, - "source": "./data/episodes/voyager.json" + "source": "./data/episodes/voy.json" } } \ No newline at end of file diff --git a/utils/generate_episode_json.py b/utils/generate_episode_json.py deleted file mode 100755 index cc9feadc..00000000 --- a/utils/generate_episode_json.py +++ /dev/null @@ -1,308 +0,0 @@ -import asyncio -import getopt -import json -import os -import pprint -import re -import sys -from datetime import timedelta - -import feedparser -import tmdbsimple as tmdb -from dateutil import parser -from dotenv import load_dotenv -from googleapiclient.discovery import build -from ratelimit import limits, sleep_and_retry - -load_dotenv() - -GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY') -GOOGLE_CX = os.getenv('GOOGLE_CX') -tmdb.API_KEY = os.getenv('TMDB_KEY') -TMDB_IMG_PATH = "https://image.tmdb.org/t/p/original" - -shows = { - "tng": { - "tvdb":655, - "title": "Star Trek: The Next Generation", - "trek": True, - "animated": False, - "imdb": "tt0092455" - }, - "ds9": { - "tvdb":580, - "title": "Star Trek: Deep Space Nine", - "trek": True, - "animated": False, - "imdb": "" - }, - "voy": { - "tvdb":1855, - "title": "Star Trek: Voyager", - "trek": True, - "animated": False, - "imdb": "", - "episodes": [], - } -} - -# To Do: The Greatest Discovery -# TGD Podcast feed: https://feeds.simplecast.com/d1rbEtgZ -# This uses a different naming convention for episodes, so we need to filter -# , -# "enterprise": { -# "tvdb":314, -# "title": "Star Trek: Enterprise", -# "trek": True, -# "animated": False, -# "imdb": "" -# }, -# "tos": { -# "tvdb":253, -# "title": "Star Trek: The Original Series", -# "trek": True, -# "animated": False, -# "imdb": "" -# }, -# "lowerdecks": { -# "tvdb":85948, -# "title": "Star Trek: Lower Decks", -# "trek": True, -# "animated": True, -# "imdb": "" -# }, -# "disco": { -# "tvdb":67198, -# "title": "Star Trek: Discovery", -# "trek": True, -# "animated": False, -# "imdb": "" -# }, -# "picard": { -# "tvdb":85949, -# "title": "Star Trek: Picard", -# "trek": True, -# "animated": False, -# "imdb": "" -# }, -# "tas": { -# "tvdb":1992, -# "title": "Star Trek: The Animated Series", -# "trek": True, -# "animated": True, -# "imdb": "" -# } - -tgg_rss_url = "https://feeds.simplecast.com/_mp2DeJd" -feed = feedparser.parse(tgg_rss_url) - -def gather_filtered_rss_entries(series_prefix, tseason, tepisode): - # pprint.pprint(f"series_prefix: {series_prefix} S{tseason}E{tepisode}") - filtered_entries = [] - for entry in feed['entries']: - entry_title = entry['title'] - regex_result = re.search('(.+) \((\w+)\sS(\d+)E(\d+)\)', entry_title, re.IGNORECASE) - if not regex_result: - continue - series_tag = regex_result.group(2).upper() - # hackerman - if series_tag == "VOYAGER": - series_tag = "VOY" - this_season = regex_result.group(3) - this_episode = regex_result.group(4) - if series_tag != series_prefix: - continue - # pprint.pprint(f"Series Tag: {series_tag} S{this_season}E{this_episode} : S{tseason}E{tepisode}") - if int(tseason) == int(this_season) and int(tepisode) == int(this_episode): - # print("Entry Title: " + entry_title) - filtered_entries.append(entry) - else: - continue - - filtered_entries.reverse() - # pprint.pprint(filtered_entries) - return filtered_entries[0] - - - -def generate_index(recordset): - indecies = {} - tep = 0 - for episode in recordset["episodes"]: - tkey = "s" + episode["season"] + "e" + episode["episode"] - indecies[tkey] = tep - tep += 1 - return indecies - - - -def generate_recordset(series_prefix, recordset): - keymap = generate_index(recordset) - # recordset = {} - episodes = [] - track_episode = 0 - track_season = 0 - track = 0 - max = 10000 - failed = 0 - moveon = 0 - tgg = {} - for track_season in range(1,100): - for track_episode in range(1,100): - failed = 0 - if moveon > 1: - break - this_episode = {} - tseason = str(track_season).zfill(2) - tepisode = str(track_episode).zfill(2) - tgg_key = f"s{tseason}e{tepisode}" - print(f"{tgg_key} ----------------------------------------") - if tgg_key in keymap.keys(): - print("Metadata already saved for: " + tgg_key) - # pprint.pprint(recordset["episodes"][keymap[tgg_key]]) - this_episode = recordset["episodes"][keymap[tgg_key]] - moveon = 0 - else: - print(f"Metadata not found {tgg_key} - Attempting to gather...") - tmdb_episode = tmdb.TV_Episodes(shows[series_prefix.lower()]["tvdb"],track_season,track_episode) - this_episode["airdate"] = "" - this_episode["description"] = "" - this_episode["memoryalpha"] = "" - this_episode["podcasts"] = [] - try: - episode_details = tmdb_episode.info() - # pprint.pprint(f"key: {tgg_key}") - pprint.pprint(f'Title[{episode_details["id"]}][s{tseason}e{tepisode}]: {episode_details["name"]}') - pprint.pprint(f">>> Info: {episode_details}") - this_episode["airdate"] = episode_details["air_date"].replace("-", ".") - this_episode["description"] = episode_details["overview"] - this_episode["title"] = episode_details["name"] - this_episode["tvdb"] = episode_details["id"] - this_episode["season"] = tseason - this_episode["episode"] = tepisode - episode_external_ids = tmdb_episode.external_ids() - this_episode["imdb"]=episode_external_ids["imdb_id"] - if len(episode_external_ids) > 0: - moveon = 0 - episode_stills = tmdb_episode.images() - tstills = [] - for s in episode_stills["stills"]: - tstills.append(TMDB_IMG_PATH + s["file_path"]) - this_episode["stills"] = tstills - - except: - failed = failed + 1 - pprint.pprint(f"This episode does not exist[{failed}][{moveon}]: s{tseason}e{tepisode}") - if failed > 0: - moveon = moveon + 1 - break - - - if "memoryalpha" not in this_episode.keys() or this_episode["memoryalpha"] == "": - print("Checking MemoryAlpha information...") - # Get Episode Title from Memory Alpha Google Search based on the SXXEXX Key - memory_alpha_search = google_search(f"Memory Alpha {series_prefix.upper()} {tgg_key}") - memory_alpha_title = memory_alpha_search['pagemap']['metatags'][0]['og:title'] - episode_title = memory_alpha_title.replace(" ", "_") - pprint.pprint(f"Episode title: {episode_title}") - this_episode["memoryalpha"] = episode_title - - try: - entry = gather_filtered_rss_entries(series_prefix, track_season, track_episode) - except: - # failed = failed + 1 - pprint.pprint(f"This podcast episode does not exist[{failed}][{moveon}]: s{track_season}e{track_episode}") - if this_episode: - episodes.append(this_episode) - continue - entry_title = entry['title'] - pprint.pprint(f"Pod title: {entry_title}") - regex_result = re.search('(.+) \((\w+)\sS(\d+)E(\d+)\)', entry_title, re.IGNORECASE) - pod_title = regex_result.group(1) - # series_tag = regex_result.group(2) - # season_number = regex_result.group(3).rjust(2, '0') - # episode_number = regex_result.group(4).rjust(2, '0') - - if "podcasts" not in this_episode.keys() or len(this_episode["podcasts"]) == 0: - print("Checking MaximumFun information...") - # Get MaxFun link from Google Search on Pod Title - search_string = f"site:maximumfun.org: The Greatest Generation {pod_title} -filetype:pdf -filetype:xml" - pprint.pprint(f"Searching: {search_string}") - try: - tgg_search = google_search(f"{search_string}") - pprint.pprint(tgg_search) - pod_link = tgg_search['link'] - pod_entry = { - "title": "The Greatest Generation", - "order": int(entry['itunes_episode']), - "airdate": parser.parse(entry['published']).strftime('%Y.%m.%d'), - "episode": pod_title, - "link": pod_link - } - pprint.pprint(pod_entry) - this_episode["podcasts"].append(pod_entry) - except: - pprint.pprint("No results for this query...") - print("This Episode: " + str(this_episode)) - episodes.append(this_episode) - recordset["episodes"] = episodes - return recordset - -# NOTE: seconds here could probably be lowered a bit, but had run into -# Google giving a 429 "Too Many Requests per Minute" error a few times -# prior to adding this -@sleep_and_retry -@limits(calls=1, period=timedelta(seconds=5).total_seconds()) -def google_search(query): - service = build("customsearch", "v1", developerKey=GOOGLE_API_KEY) - res = service.cse().list(q=query, cx=GOOGLE_CX).execute() - # pprint.pprint(res['items'][0]) - return res['items'][0] - - -# Execute -def main(argv): - series_prefix = '' - output_file = '' - try: - opts, args = getopt.getopt(argv,"hp:o:",["series_prefix=","output="]) - except getopt.GetoptError: - print("generate_episode_json.py -p -o ") - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print("generate_episode_json.py -p -o ") - sys.exit() - elif opt in ("-p", "--series_prefix"): - series_prefix = arg - elif opt in ("-o", "--output"): - output_file = arg - - - - try: - f = open(output_file, 'r') - tgg = json.load(f) - f.close() - except BaseException as err: - tgg = shows[series_prefix.lower()] - - # Perform parsing/filtering of RSS entries, Searches to gather Metadata - try: - recordset = generate_recordset(series_prefix, tgg) - except BaseException as err: - print("Error gathering metadata.") - print(err) - sys.exit(2) - - # Write to json file - try: - with open(output_file, "w") as fp: - json.dump(recordset, fp, indent=2) - except BaseException as err: - print(f"Error writing to file: {output_file}") - print(err) - sys.exit(2) - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/utils/generate_show_json.py b/utils/generate_show_json.py new file mode 100644 index 00000000..2da6d79d --- /dev/null +++ b/utils/generate_show_json.py @@ -0,0 +1,401 @@ +""" +Script for creating the .json files for the shows. Since they need to be updated about once a week, you’ll +run this on a pretty regular basis. + +Usage: + generate_show_json.py [] [options] + +Arguments: + One of tos|tas|tng|ds9|voy|enterprise|disco|picard|lowerdecks|prodigy|snw + The name of the file to generate. Default: /data/episodes/.json + +Options: + -h --help Show this message. + + -s --season A comma separated list of seasons to update. Default: All possible seasons. + -e --episode A comma separated list of episodes to update. Used with -s. Default: All possible episodes. + + -p --podcast Update the podcast information. Useful for old shows that have only just been covered. + -d --details Update the episode details from TVDB. You will need to update your .env file and put in + TMDB_KEY. Details on getting one at https://developer.themoviedb.org/docs/getting-started + -m --memory-alpha Update the link to the episode in Memory Alpha. + + If -p, -d, and -m are not specified, then all of them will be updated. + +Examples: + The pod has just covered Spock's Brain, and the episode is already in the file + generate_show_json.py tos -s 3 -e 6 -p + + Season 3 of LDS has finished, and so it’s time to add all of them + generate_show_json.py lowerdecks -s 3 + + The first two episodes of SNW season three dropped in the same week + generate_show_json.py snw -s 3 -e 1,2 +""" +import json +import os.path +import re +from typing import List, Optional + +import docopt + +import feedparser + +# Important config options that will need to be updated as new shows are added +import requests +import tmdbsimple +from dateutil import parser +from dotenv import load_dotenv + +all_shows = { + "tng": { + "tmdb": 655, + "title": "Star Trek: The Next Generation", + "trek": True, + "animated": False, + "pod": "tgg" + }, + "ds9": { + "tmdb": 580, + "title": "Star Trek: Deep Space Nine", + "trek": True, + "animated": False, + "pod": "tgg" + }, + "voy": { + "tmdb": 1855, + "title": "Star Trek: Voyager", + "trek": True, + "animated": False, + "pod": "tgg" + }, + "enterprise": { + "tmdb": 314, + "title": "Star Trek: Enterprise", + "trek": True, + "animated": False, + }, + "tos": { + "tmdb": 253, + "title": "Star Trek: The Original Series", + "trek": True, + "animated": False, + "pod": "tgt" + }, + "lowerdecks": { + "tmdb": 85948, + "title": "Star Trek: Lower Decks", + "trek": True, + "animated": True, + "pod": "tgt", + "pod_name": "Lower Decks" + }, + "disco": { + "tmdb": 67198, + "title": "Star Trek: Discovery", + "trek": True, + "animated": False, + "pod": "tgt", + "pod_name": "Discovery" + }, + "picard": { + "tmdb": 85949, + "title": "Star Trek: Picard", + "trek": True, + "animated": False, + "pod": "tgt" + }, + "tas": { + "tmdb": 1992, + "title": "Star Trek: The Animated Series", + "trek": True, + "animated": True, + "pod": "tgt" + }, + "prodigy": { + "tmdb": 106393, + "title": "Star Trek: Prodigy", + "trek": True, + "animated": True, + "pod": "tgt" + }, + "snw": { + "tmdb": 103516, + "title": "Star Trek: Strange New Worlds", + "trek": True, + "animated": False, + "pod": "tgt" + }, +} + +podcasts = { + 'tgg': { + "name": "The Greatest Generation", + "url": "http://feeds.feedburner.com/TheGreatestGeneration" + }, + 'tgt': { + "name": "Greatest Trek", + "url": "http://feeds.feedburner.com/GreatestDiscovery" + } +} + + +class ShowGenerator: + """ + Class for building a .json file to be used with other commands around the bot. + """ + def __init__(self, show: str, filename: str = None, + seasons: Optional[List[int]] = None, episodes: Optional[List[int]] = None, + update_details=True, update_podcast=True, update_memory_alpha=True): + self.show = show + self.show_settings = all_shows[self.show] + + self.filename = filename or os.path.join(os.path.dirname(__file__), f"../data/episodes/{self.show}.json") + + self.seasons = seasons or range(1, 8) # So far, no show has gone beyond 7 seasons + + self.episodes_to_update = episodes or range(1, 30) # Remember when seasons were 20+ episodes? + + self.run_tmdb = update_details + self.run_pod = update_podcast + self.run_memory_alpha = update_memory_alpha + + if self.run_tmdb: + self.get_tmdb_api() + + self.episode_details = [] + self.episode_map = {} + self.podcast_episodes = {} + self.podcast_name = None + + @staticmethod + def clean_and_validate_args(cli_args: dict) -> Optional[dict]: + """ + Takes the command line arguments from docopt and turns them into a dict that can be used as **kwargs for a new + instance. If there are any errors, print them out and return None + """ + args = { + 'show': cli_args[''], + 'filename': cli_args[''], + } + + valid = True + if cli_args[''] not in all_shows: + print(f"{cli_args['']} is not one of {all_shows.keys()}") + valid = False + + try: + if cli_args['--season']: + args['seasons'] = [int(s) for s in cli_args['--season'].split(',')] + except ValueError: + print(f"-s should be a number or a list of numbers with commas inbetween. Got “{cli_args['--season']}”") + valid = False + + try: + if cli_args['--episode']: + args['episodes'] = [int(s) for s in cli_args['--episode'].split(',')] + except ValueError: + print(f"-e should be a number or a list of numbers with commas inbetween. Got “{cli_args['--episode']}”") + valid = False + + if cli_args['--details'] or cli_args['--podcast'] or cli_args['--memory-alpha']: + args.update({ + 'update_details': cli_args['--details'], + 'update_podcast': cli_args['--podcast'], + 'update_memory_alpha': cli_args['--memory-alpha'] + }) + + if valid: + return args + else: + return None + + def get_tmdb_api(self): + """ + Set the TMDB API key, or disable the function if not available. + """ + load_dotenv() + tmdbsimple.API_KEY = os.getenv('TMDB_KEY') + if not tmdbsimple.API_KEY: + print("You need to setup a TMDB API key at https://www.themoviedb.org/settings/api and put it in your .env " + "file.\nYou will not be able to add new shows or update details about existing ones until you do.") + self.run_tmdb = False + + def run(self): + """ + Actually update the JSON file + """ + self.load_current_file() + if self.run_pod: + self.load_feed() + + for season in self.seasons: + for episode in self.episodes_to_update: + print(f"- Checking for {self.show} S{season:02}E{episode:02}") + + details = self.get_current_details(season, episode) + if self.run_tmdb: + details = self.set_tmdb_details(details, season, episode) + + if not details: + # There are no more episodes in this season + break + + if self.run_memory_alpha: + self.set_memory_alpha(details) + + if self.run_pod: + self.set_podcast(details, season, episode) + + self.save_current_file() + + def load_current_file(self): + """ + Load the current file for the episodes + """ + if not os.path.isfile(self.filename): + return + + with open(self.filename, 'r') as f: + json_data = json.load(f) + print(f"Found existing {self.filename}") + self.episode_details = json_data['episodes'] + for index, details in enumerate(self.episode_details): + self.episode_map[int(details['season']), int(details['episode'])] = index + + def load_feed(self): + """ + Load the feed for the show's podcast, and pull out the pod episodes that match this show. + """ + show_name = self.show_settings.get('pod_name', self.show) + podcast = podcasts[self.show_settings['pod']] + self.podcast_name = podcast['name'] + + feed = feedparser.parse(podcast['url']) + regex = re.compile(fr"{show_name} S(\d+)E(\d+)", re.IGNORECASE) + + for entry in feed['entries']: + regex_match = regex.search(entry['title']) + if not regex_match: + continue + season = int(regex_match[1]) + episode = int(regex_match[2]) + self.podcast_episodes[season, episode] = entry + + def get_current_details(self, season: int, episode: int) -> Optional[dict]: + """ + Load the episode details from the current website. Or none if it doesn't exist (yet) + """ + if (season, episode) in self.episode_map: + return self.episode_details[self.episode_map[season, episode]] + + return None + + def set_tmdb_details(self, details: dict, season: int, episode: int) -> dict: + """ + Load details from TMDB + """ + tmdb_episode = tmdbsimple.TV_Episodes(self.show_settings['tmdb'], season, episode) + try: + tmdb_details = tmdb_episode.info() + except requests.exceptions.HTTPError: + print(f"Unable to find {self.show} S{season:02}E{episode:02} in TMDB") + return details + if not tmdb_details.get('id'): + print(f"Unable to find {self.show} S{season:02}E{episode:02} in TMDB") + return details + + if not details: + details = { + "airdate": None, + "title": None, + "description": None, + "season": f"{season:02}", + "episode": f"{episode:02}", + "podcasts": [], + "memoryalpha": None, + "tvdb": None, + "imdb": None, + "stills": [], + } + self.episode_map[season, episode] = len(self.episode_details) + self.episode_details.append(details) + + details['airdate'] = tmdb_details["air_date"].replace("-", ".") + details['description'] = tmdb_details['overview'] + details['title'] = tmdb_details['name'] + details['tvdb'] = tmdb_details['id'] # It's tMdb, but we're keeping it for consistency + details['imdb'] = tmdb_episode.external_ids().get('imdb_id') + stills = [] + for image in tmdb_episode.images()['stills']: + stills.append(f"https://image.tmdb.org/t/p/original{image['file_path']}") + if stills: + details['stills'] = stills + + print(f"Updated episode “{details['title']}” from TMDB") + return details + + def set_memory_alpha(self, details: dict): + """ + Use the Fandom API to get the title of the episode page. That's also the slug for the page. + """ + req = requests.get("https://memory-alpha.fandom.com/api.php", + params={'action': 'query', 'list': 'search', 'srlimit': '1', 'srprop': '', 'format': 'json', + 'srsearch': f"{self.show[:3]} {details['season'].strip('0')}x{details['episode']} " + f"{details['title']} (episode)"}) + results = json.loads(req.content) + details['memoryalpha'] = results['query']['search'][0]['title'].replace(' ', '_') # there might be more formatting + print(f"Updated Memory Alpha link to {details['memoryalpha']}") + + def set_podcast(self, details, season, episode): + """ + Get the podcast for this episode from the feed. If there are more than one, then they will have to be added + manually + """ + podcast = self.podcast_episodes.get((season, episode)) + if not podcast: + print(f"No podcast for {self.show} S{details['season']}E{details['episode']} yet") + return + + # Search the maxfun website for the link to the episode. For some reason, it's not in the RSS feed + req = requests.get("https://maximumfun.org/search/", params={"_type": "episode", "_term": podcast['title']}) + re_match = re.search(r'a href="(https://maximumfun\.org/episodes/.+/)"', req.content.decode(errors='ignore')) + if re_match: + page_link = re_match[1] + else: + page_link = None + + details['podcasts'] = [ + { + "airdate": parser.parse(podcast['published']).strftime('%Y.%m.%d'), + "episode": re.sub(r' \([^()]+\)$', '', podcast['title']), + "link": page_link, + "order": int(podcast['itunes_episode']), + "title": self.podcast_name, + } + ] + print(f"Updated the podcast to {podcast['title']}") + + def save_current_file(self): + """ + Save the entire file, including all episodes we know about. + """ + recordset = { + "animated": self.show_settings["animated"], + "episodes": self.episode_details, + "imdb": self.show_settings.get("imdb", ""), + "title": self.show_settings["title"], + "trek": self.show_settings['trek'], + "tvdb": self.show_settings.get("tmdb"), + } + print(f"saving file {self.filename}") + with open(self.filename, "w") as fp: + json.dump(recordset, fp, indent=4) + + +if __name__ == '__main__': + args = docopt.docopt(__doc__) + args = ShowGenerator.clean_and_validate_args(args) + if args: + generator = ShowGenerator(**args) + generator.run()