From 78be8a889ed8eb07ebbb29eaad2f0aaf2194098f Mon Sep 17 00:00:00 2001 From: "Glitch (stripe-impossible-duke)" Date: Mon, 12 Oct 2020 11:42:54 +0000 Subject: [PATCH 1/2] Made By Hemant --- .glitch-assets | 7 + 404.html | 11 + CNAME | 1 + README.md | 21 +- episodes.json | 1697 +++++++++++++++++++++++++++++++++++++++ extract-episode-urls.js | 30 + favicon.png | Bin 0 -> 15349 bytes index.html | 77 ++ logotype.png | Bin 0 -> 30380 bytes script.js | 86 ++ style.css | 46 ++ 11 files changed, 1975 insertions(+), 1 deletion(-) create mode 100644 .glitch-assets create mode 100644 404.html create mode 100644 CNAME create mode 100644 episodes.json create mode 100644 extract-episode-urls.js create mode 100644 favicon.png create mode 100644 index.html create mode 100644 logotype.png create mode 100644 script.js create mode 100644 style.css diff --git a/.glitch-assets b/.glitch-assets new file mode 100644 index 0000000..eccbf59 --- /dev/null +++ b/.glitch-assets @@ -0,0 +1,7 @@ +{"name":"drag-in-files.svg","date":"2016-10-22T16:17:49.954Z","url":"https://cdn.hyperdev.com/drag-in-files.svg","type":"image/svg","size":7646,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/drag-in-files.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(102, 153, 205)","uuid":"adSBq97hhhpFNUna"} +{"name":"click-me.svg","date":"2016-10-23T16:17:49.954Z","url":"https://cdn.hyperdev.com/click-me.svg","type":"image/svg","size":7116,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/click-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(243, 185, 186)","uuid":"adSBq97hhhpFNUnb"} +{"name":"paste-me.svg","date":"2016-10-24T16:17:49.954Z","url":"https://cdn.hyperdev.com/paste-me.svg","type":"image/svg","size":7242,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/paste-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(42, 179, 185)","uuid":"adSBq97hhhpFNUnc"} +{"uuid":"adSBq97hhhpFNUna","deleted":true} +{"uuid":"adSBq97hhhpFNUnb","deleted":true} +{"uuid":"adSBq97hhhpFNUnc","deleted":true} +{"name":"favicon.png","date":"2018-04-30T18:43:27.513Z","url":"https://cdn.glitch.com/9fc6105a-f8fb-44e4-ae43-fb7f802d3b2f%2Ffavicon.png","type":"image/png","size":15349,"imageWidth":312,"imageHeight":312,"thumbnail":"https://cdn.glitch.com/9fc6105a-f8fb-44e4-ae43-fb7f802d3b2f%2Ffavicon.png","thumbnailWidth":312,"thumbnailHeight":312,"dominantColor":"rgb(252,252,252)","uuid":"oiV2ZzYRqh73R90P"} diff --git a/404.html b/404.html new file mode 100644 index 0000000..08cd576 --- /dev/null +++ b/404.html @@ -0,0 +1,11 @@ + + + Not found + + +

+ Whoops, there's nothing here! +

+ Go back to the main site. + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..6c2291a --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.arandomone.com \ No newline at end of file diff --git a/README.md b/README.md index 0486acf..983dc44 100644 --- a/README.md +++ b/README.md @@ -1 +1,20 @@ -# aRandomOne \ No newline at end of file +A Random One! +================= + +_A Random One_ is a _Friends_ random episode generator which also includes Netflix links +for easy viewing. It was created to mimic the random order of re-runs on live television. + +Try it out at [aRandomOne.com](https://www.aRandomOne.com). + + +Sources +------- +- Episode descriptions are from http://www.friends-tv.org/epshort.html. +- Netflix episode URLs can be obtained/updated using the `extract-episode-urls.js` snippet +in Google Chrome. + +### To-do +- [ ] Flatten JSON file (include season in episode object) +- [x] ~Finish adding remaining seasons to JSON~ +- [ ] Add episode descriptions to JSON +- [ ] Apple TV app? diff --git a/episodes.json b/episodes.json new file mode 100644 index 0000000..fb8e182 --- /dev/null +++ b/episodes.json @@ -0,0 +1,1697 @@ +[ + { + "season": 1, + "episodes": [ + { + "episode": 1, + "title": "The One Where Monica Gets a Roommate (Pilot)", + "urls": { + "netflix": "/watch/70273997" + } + }, + { + "episode": 2, + "title": "The One with the Sonogram at the End", + "urls": { + "netflix": "/watch/70273998" + } + }, + { + "episode": 3, + "title": "The One with the Thumb", + "urls": { + "netflix": "/watch/70273999" + } + }, + { + "episode": 4, + "title": "The One with George Stephanopoulos", + "urls": { + "netflix": "/watch/70274000" + } + }, + { + "episode": 5, + "title": "The One with the East German Laundry Detergent", + "urls": { + "netflix": "/watch/70274001" + } + }, + { + "episode": 6, + "title": "The One with the Butt", + "urls": { + "netflix": "/watch/70274002" + } + }, + { + "episode": 7, + "title": "The One with the Blackout", + "urls": { + "netflix": "/watch/70274003" + } + }, + { + "episode": 8, + "title": "The One Where Nana Dies Twice", + "urls": { + "netflix": "/watch/70274004" + } + }, + { + "episode": 9, + "title": "The One Where Underdog Gets Away", + "urls": { + "netflix": "/watch/70274005" + } + }, + { + "episode": 10, + "title": "The One with the Monkey", + "urls": { + "netflix": "/watch/70274006" + } + }, + { + "episode": 11, + "title": "The One with Mrs. Bing", + "urls": { + "netflix": "/watch/70274007" + } + }, + { + "episode": 12, + "title": "The One with the Dozen Lasagnas", + "urls": { + "netflix": "/watch/70274008" + } + }, + { + "episode": 13, + "title": "The One with the Boobies", + "urls": { + "netflix": "/watch/70274009" + } + }, + { + "episode": 14, + "title": "The One with the Candy Hearts", + "urls": { + "netflix": "/watch/70274010" + } + }, + { + "episode": 15, + "title": "The One with the Stoned Guy", + "urls": { + "netflix": "/watch/70274011" + } + }, + { + "episode": 16, + "title": "The One with the Two Parts: Part 1", + "urls": { + "netflix": "/watch/70274012" + } + }, + { + "episode": 17, + "title": "The One with the Two Parts: Part 2", + "urls": { + "netflix": "/watch/70274013" + } + }, + { + "episode": 18, + "title": "The One with All the Poker", + "urls": { + "netflix": "/watch/70274014" + } + }, + { + "episode": 19, + "title": "The One Where the Monkey Gets Away", + "urls": { + "netflix": "/watch/70274015" + } + }, + { + "episode": 20, + "title": "The One with the Evil Orthodontist", + "urls": { + "netflix": "/watch/70274016" + } + }, + { + "episode": 21, + "title": "The One with the Fake Monica", + "urls": { + "netflix": "/watch/70274017" + } + }, + { + "episode": 22, + "title": "The One with the Ick Factor", + "urls": { + "netflix": "/watch/70274018" + } + }, + { + "episode": 23, + "title": "The One with the Birth", + "urls": { + "netflix": "/watch/70274019" + } + }, + { + "episode": 24, + "title": "The One Where Rachel Finds Out", + "urls": { + "netflix": "/watch/70274020" + } + } + ] + }, + { + "season": 2, + "episodes": [ + { + "episode": 1, + "title": "The One with Ross's New Girlfriend", + "urls": { + "netflix": "/watch/70274021" + } + }, + { + "episode": 2, + "title": "The One with the Breast Milk", + "urls": { + "netflix": "/watch/70274022" + } + }, + { + "episode": 3, + "title": "The One Where Heckles Dies", + "urls": { + "netflix": "/watch/70274023" + } + }, + { + "episode": 4, + "title": "The One with Phoebe's Husband", + "urls": { + "netflix": "/watch/70274024" + } + }, + { + "episode": 5, + "title": "The One with Five Steaks and an Eggplant", + "urls": { + "netflix": "/watch/70274025" + } + }, + { + "episode": 6, + "title": "The One with the Baby on the Bus", + "urls": { + "netflix": "/watch/70274026" + } + }, + { + "episode": 7, + "title": "The One Where Ross Finds Out", + "urls": { + "netflix": "/watch/70274027" + } + }, + { + "episode": 8, + "title": "The One with the List", + "urls": { + "netflix": "/watch/70274028" + } + }, + { + "episode": 9, + "title": "The One with Phoebe's Dad", + "urls": { + "netflix": "/watch/70274029" + } + }, + { + "episode": 10, + "title": "The One with Russ", + "urls": { + "netflix": "/watch/70274030" + } + }, + { + "episode": 11, + "title": "The One with the Lesbian Wedding", + "urls": { + "netflix": "/watch/70274031" + } + }, + { + "episode": 12, + "title": "The One After the Super Bowl: Part 1", + "urls": { + "netflix": "/watch/70274032" + } + }, + { + "episode": 13, + "title": "The One After the Super Bowl: Part 2", + "urls": { + "netflix": "/watch/70274033" + } + }, + { + "episode": 14, + "title": "The One with the Prom Video", + "urls": { + "netflix": "/watch/70274034" + } + }, + { + "episode": 15, + "title": "The One Where Ross and Rachel...You Know", + "urls": { + "netflix": "/watch/70274035" + } + }, + { + "episode": 16, + "title": "The One Where Joey Moves Out", + "urls": { + "netflix": "/watch/70274036" + } + }, + { + "episode": 17, + "title": "The One Where Eddie Moves In", + "urls": { + "netflix": "/watch/70274037" + } + }, + { + "episode": 18, + "title": "The One Where Dr. Ramoray Dies", + "urls": { + "netflix": "/watch/70274038" + } + }, + { + "episode": 19, + "title": "The One Where Eddie Won't Go", + "urls": { + "netflix": "/watch/70274039" + } + }, + { + "episode": 20, + "title": "The One Where Old Yeller Dies", + "urls": { + "netflix": "/watch/70274040" + } + }, + { + "episode": 21, + "title": "The One with the Bullies", + "urls": { + "netflix": "/watch/70274041" + } + }, + { + "episode": 22, + "title": "The One with the Two Parties", + "urls": { + "netflix": "/watch/70274042" + } + }, + { + "episode": 23, + "title": "The One with the Chicken Pox", + "urls": { + "netflix": "/watch/70274043" + } + }, + { + "episode": 24, + "title": "The One with Barry and Mindy's Wedding", + "urls": { + "netflix": "/watch/70274044" + } + } + ] + }, + { + "season": 3, + "episodes": [ + { + "episode": 1, + "title": "The One with the Princess Leia Fantasy", + "urls": { + "netflix": "/watch/70274045" + } + }, + { + "episode": 2, + "title": "The One Where No One's Ready", + "urls": { + "netflix": "/watch/70274046" + } + }, + { + "episode": 3, + "title": "The One with the Jam", + "urls": { + "netflix": "/watch/70274047" + } + }, + { + "episode": 4, + "title": "The One with the Metaphorical Tunnel", + "urls": { + "netflix": "/watch/70274048" + } + }, + { + "episode": 5, + "title": "The One with Frank Jr", + "urls": { + "netflix": "/watch/70274049" + } + }, + { + "episode": 6, + "title": "The One with the Flashback", + "urls": { + "netflix": "/watch/70274050" + } + }, + { + "episode": 7, + "title": "The One with the Race Car Bed", + "urls": { + "netflix": "/watch/70274051" + } + }, + { + "episode": 8, + "title": "The One with the Giant Poking Device", + "urls": { + "netflix": "/watch/70274052" + } + }, + { + "episode": 9, + "title": "The One with the Football", + "urls": { + "netflix": "/watch/70274053" + } + }, + { + "episode": 10, + "title": "The One Where Rachel Quits", + "urls": { + "netflix": "/watch/70274054" + } + }, + { + "episode": 11, + "title": "The One Where Chandler Can't Remember Which Sister", + "urls": { + "netflix": "/watch/70274055" + } + }, + { + "episode": 12, + "title": "The One with All the Jealousy", + "urls": { + "netflix": "/watch/70274056" + } + }, + { + "episode": 13, + "title": "The One Where Monica & Richard Are Just Friends", + "urls": { + "netflix": "/watch/70274057" + } + }, + { + "episode": 14, + "title": "The One with Phoebe's Ex-Partner", + "urls": { + "netflix": "/watch/70274058" + } + }, + { + "episode": 15, + "title": "The One Where Ross & Rachel Take a Break", + "urls": { + "netflix": "/watch/70274059" + } + }, + { + "episode": 16, + "title": "The One The Morning After", + "urls": { + "netflix": "/watch/70274060" + } + }, + { + "episode": 17, + "title": "The One Without the Ski Trip", + "urls": { + "netflix": "/watch/70274061" + } + }, + { + "episode": 18, + "title": "The One with the Hypnosis Tape", + "urls": { + "netflix": "/watch/70274062" + } + }, + { + "episode": 19, + "title": "The One with the Tiny T-Shirt", + "urls": { + "netflix": "/watch/70274063" + } + }, + { + "episode": 20, + "title": "The One with the Dollhouse", + "urls": { + "netflix": "/watch/70274064" + } + }, + { + "episode": 21, + "title": "The One with a Chick. And a Duck", + "urls": { + "netflix": "/watch/70274065" + } + }, + { + "episode": 22, + "title": "The One with the Screamer", + "urls": { + "netflix": "/watch/70274066" + } + }, + { + "episode": 23, + "title": "The One with Ross's Thing", + "urls": { + "netflix": "/watch/70274067" + } + }, + { + "episode": 24, + "title": "The One with the Ultimate Fighting Champion", + "urls": { + "netflix": "/watch/70274068" + } + }, + { + "episode": 25, + "title": "The One at the Beach", + "urls": { + "netflix": "/watch/70274069" + } + } + ] + }, + { + "season": 4, + "episodes": [ + { + "episode": 1, + "title": "The One with the Jellyfish", + "urls": { + "netflix": "/watch/70274070" + } + }, + { + "episode": 2, + "title": "The One with the Cat", + "urls": { + "netflix": "/watch/70274071" + } + }, + { + "episode": 3, + "title": "The One with the 'Cuffs", + "urls": { + "netflix": "/watch/70274072" + } + }, + { + "episode": 4, + "title": "The One with the Ballroom Dancing", + "urls": { + "netflix": "/watch/70274073" + } + }, + { + "episode": 5, + "title": "The One with Joey's New Girlfriend", + "urls": { + "netflix": "/watch/70274074" + } + }, + { + "episode": 6, + "title": "The One with the Dirty Girl", + "urls": { + "netflix": "/watch/70274075" + } + }, + { + "episode": 7, + "title": "The One Where Chandler Crosses the Line", + "urls": { + "netflix": "/watch/70274076" + } + }, + { + "episode": 8, + "title": "The One with Chandler in a Box", + "urls": { + "netflix": "/watch/70274077" + } + }, + { + "episode": 9, + "title": "The One Where They're Going to Party", + "urls": { + "netflix": "/watch/70274078" + } + }, + { + "episode": 10, + "title": "The One with the Girl from Poughkeepsie", + "urls": { + "netflix": "/watch/70274079" + } + }, + { + "episode": 11, + "title": "The One with Phoebe's Uterus", + "urls": { + "netflix": "/watch/70274080" + } + }, + { + "episode": 12, + "title": "The One with the Embryos", + "urls": { + "netflix": "/watch/70274081" + } + }, + { + "episode": 13, + "title": "The One with Rachel's Crush", + "urls": { + "netflix": "/watch/70274082" + } + }, + { + "episode": 14, + "title": "The One with Joey's Dirty Day", + "urls": { + "netflix": "/watch/70274083" + } + }, + { + "episode": 15, + "title": "The One with All the Rugby", + "urls": { + "netflix": "/watch/70274084" + } + }, + { + "episode": 16, + "title": "The One with the Fake Party", + "urls": { + "netflix": "/watch/70274085" + } + }, + { + "episode": 17, + "title": "The One with the Free Porn", + "urls": { + "netflix": "/watch/70274086" + } + }, + { + "episode": 18, + "title": "The One with Rachel's New Dress", + "urls": { + "netflix": "/watch/70274087" + } + }, + { + "episode": 19, + "title": "The One with All the Haste", + "urls": { + "netflix": "/watch/70274088" + } + }, + { + "episode": 20, + "title": "The One with the Wedding Dresses", + "urls": { + "netflix": "/watch/70274089" + } + }, + { + "episode": 21, + "title": "The One with the Invitation", + "urls": { + "netflix": "/watch/70274090" + } + }, + { + "episode": 22, + "title": "The One with the Worst Best Man Ever", + "urls": { + "netflix": "/watch/70274091" + } + }, + { + "episode": 23, + "title": "The One with Ross's Wedding: Part 1", + "urls": { + "netflix": "/watch/70274092" + } + }, + { + "episode": 24, + "title": "The One with Ross's Wedding: Part 2", + "urls": { + "netflix": "/watch/70274093" + } + } + ] + }, + { + "season": 5, + "episodes": [ + { + "episode": 1, + "title": "The One After Ross Says Rachel", + "urls": { + "netflix": "/watch/70274094" + } + }, + { + "episode": 2, + "title": "The One with All the Kissing", + "urls": { + "netflix": "/watch/70274095" + } + }, + { + "episode": 3, + "title": "The One Hundredth", + "urls": { + "netflix": "/watch/70274096" + } + }, + { + "episode": 4, + "title": "The One Where Phoebe Hates PBS", + "urls": { + "netflix": "/watch/70274097" + } + }, + { + "episode": 5, + "title": "The One with the Kips", + "urls": { + "netflix": "/watch/70274098" + } + }, + { + "episode": 6, + "title": "The One with the Yeti", + "urls": { + "netflix": "/watch/70274099" + } + }, + { + "episode": 7, + "title": "The One Where Ross Moves In", + "urls": { + "netflix": "/watch/70274100" + } + }, + { + "episode": 8, + "title": "The One with All the Thanksgivings", + "urls": { + "netflix": "/watch/70274101" + } + }, + { + "episode": 9, + "title": "The One with Ross's Sandwich", + "urls": { + "netflix": "/watch/70274102" + } + }, + { + "episode": 10, + "title": "The One with the Inappropriate Sister", + "urls": { + "netflix": "/watch/70274103" + } + }, + { + "episode": 11, + "title": "The One with All the Resolutions", + "urls": { + "netflix": "/watch/70274104" + } + }, + { + "episode": 12, + "title": "The One with Chandler's Work Laugh", + "urls": { + "netflix": "/watch/70274105" + } + }, + { + "episode": 13, + "title": "The One with Joey's Bag", + "urls": { + "netflix": "/watch/70274106" + } + }, + { + "episode": 14, + "title": "The One Where Everybody Finds Out", + "urls": { + "netflix": "/watch/70274107" + } + }, + { + "episode": 15, + "title": "The One with the Girl Who Hits Joey", + "urls": { + "netflix": "/watch/70274108" + } + }, + { + "episode": 16, + "title": "The One with the Cop", + "urls": { + "netflix": "/watch/70274109" + } + }, + { + "episode": 17, + "title": "The One with Rachel's Inadvertent Kiss", + "urls": { + "netflix": "/watch/70274110" + } + }, + { + "episode": 18, + "title": "The One Where Rachel Smokes", + "urls": { + "netflix": "/watch/70274111" + } + }, + { + "episode": 19, + "title": "The One Where Ross Can't Flirt", + "urls": { + "netflix": "/watch/70274112" + } + }, + { + "episode": 20, + "title": "The One with the Ride-Along", + "urls": { + "netflix": "/watch/70274113" + } + }, + { + "episode": 21, + "title": "The One with the Ball", + "urls": { + "netflix": "/watch/70274114" + } + }, + { + "episode": 22, + "title": "The One with Joey's Big Break", + "urls": { + "netflix": "/watch/70274115" + } + }, + { + "episode": 23, + "title": "The One in Vegas: Part 1", + "urls": { + "netflix": "/watch/70274116" + } + }, + { + "episode": 24, + "title": "The One in Vegas: Part 2", + "urls": { + "netflix": "/watch/70274117" + } + } + ] + }, + { + "season": 6, + "episodes": [ + { + "episode": 1, + "title": "The One After Vegas", + "urls": { + "netflix": "/watch/70274118" + } + }, + { + "episode": 2, + "title": "The One Where Ross Hugs Rachel", + "urls": { + "netflix": "/watch/70274119" + } + }, + { + "episode": 3, + "title": "The One with Ross's Denial", + "urls": { + "netflix": "/watch/70274120" + } + }, + { + "episode": 4, + "title": "The One Where Joey Loses His Insurance", + "urls": { + "netflix": "/watch/70274121" + } + }, + { + "episode": 5, + "title": "The One with Joey's Porsche", + "urls": { + "netflix": "/watch/70274122" + } + }, + { + "episode": 6, + "title": "The One on the Last Night", + "urls": { + "netflix": "/watch/70274123" + } + }, + { + "episode": 7, + "title": "The One Where Phoebe Runs", + "urls": { + "netflix": "/watch/70274124" + } + }, + { + "episode": 8, + "title": "The One with Ross's Teeth", + "urls": { + "netflix": "/watch/70274125" + } + }, + { + "episode": 9, + "title": "The One Where Ross Got High", + "urls": { + "netflix": "/watch/70274126" + } + }, + { + "episode": 10, + "title": "The One with the Routine", + "urls": { + "netflix": "/watch/70274127" + } + }, + { + "episode": 11, + "title": "The One with the Apothecary Table", + "urls": { + "netflix": "/watch/70274128" + } + }, + { + "episode": 12, + "title": "The One with the Joke", + "urls": { + "netflix": "/watch/70274129" + } + }, + { + "episode": 13, + "title": "The One with Rachel's Sister", + "urls": { + "netflix": "/watch/70274130" + } + }, + { + "episode": 14, + "title": "The One Where Chandler Can't Cry", + "urls": { + "netflix": "/watch/70274131" + } + }, + { + "episode": 15, + "title": "The One That Could Have Been: Part 1", + "urls": { + "netflix": "/watch/70274132" + } + }, + { + "episode": 16, + "title": "The One That Could Have Been: Part 2", + "urls": { + "netflix": "/watch/70274133" + } + }, + { + "episode": 17, + "title": "The One with Unagi", + "urls": { + "netflix": "/watch/70274134" + } + }, + { + "episode": 18, + "title": "The One Where Ross Dates a Student", + "urls": { + "netflix": "/watch/70274135" + } + }, + { + "episode": 19, + "title": "The One with Joey's Fridge", + "urls": { + "netflix": "/watch/70274136" + } + }, + { + "episode": 20, + "title": "The One with Mac and C.H.E.E.S.E", + "urls": { + "netflix": "/watch/70274137" + } + }, + { + "episode": 21, + "title": "The One Where Ross Meets Elizabeth's Dad", + "urls": { + "netflix": "/watch/70274138" + } + }, + { + "episode": 22, + "title": "The One Where Paul's the Man", + "urls": { + "netflix": "/watch/70274139" + } + }, + { + "episode": 23, + "title": "The One with the Ring", + "urls": { + "netflix": "/watch/70274140" + } + }, + { + "episode": 24, + "title": "The One with the Proposal: Part 1", + "urls": { + "netflix": "/watch/70274141" + } + }, + { + "episode": 25, + "title": "The One with the Proposal: Part 2", + "urls": { + "netflix": "/watch/70274142" + } + } + ] + }, + { + "season": 7, + "episodes": [ + { + "episode": 1, + "title": "The One with Monica's Thunder", + "urls": { + "netflix": "/watch/70274143" + } + }, + { + "episode": 2, + "title": "The One with Rachel's Book", + "urls": { + "netflix": "/watch/70274144" + } + }, + { + "episode": 3, + "title": "The One with Phoebe's Cookies", + "urls": { + "netflix": "/watch/70274145" + } + }, + { + "episode": 4, + "title": "The One with Rachel's Assistant", + "urls": { + "netflix": "/watch/70274146" + } + }, + { + "episode": 5, + "title": "The One with the Engagement Picture", + "urls": { + "netflix": "/watch/70274147" + } + }, + { + "episode": 6, + "title": "The One with the Nap Partners", + "urls": { + "netflix": "/watch/70274148" + } + }, + { + "episode": 7, + "title": "The One with Ross' Library Book", + "urls": { + "netflix": "/watch/70274149" + } + }, + { + "episode": 8, + "title": "The One Where Chandler Doesn't Like Dogs", + "urls": { + "netflix": "/watch/70274150" + } + }, + { + "episode": 9, + "title": "The One with All the Candy", + "urls": { + "netflix": "/watch/70274151" + } + }, + { + "episode": 10, + "title": "The One with the Holiday Armadillo", + "urls": { + "netflix": "/watch/70274152" + } + }, + { + "episode": 11, + "title": "The One with All the Cheesecakes", + "urls": { + "netflix": "/watch/70274153" + } + }, + { + "episode": 12, + "title": "The One Where They're Up All Night", + "urls": { + "netflix": "/watch/70274154" + } + }, + { + "episode": 13, + "title": "The One Where Rosita Dies", + "urls": { + "netflix": "/watch/70274155" + } + }, + { + "episode": 14, + "title": "The One Where They All Turn Thirty", + "urls": { + "netflix": "/watch/70274156" + } + }, + { + "episode": 15, + "title": "The One with Joey's New Brain", + "urls": { + "netflix": "/watch/70274157" + } + }, + { + "episode": 16, + "title": "The One with the Truth About London", + "urls": { + "netflix": "/watch/70274158" + } + }, + { + "episode": 17, + "title": "The One with the Cheap Wedding Dress", + "urls": { + "netflix": "/watch/70274159" + } + }, + { + "episode": 18, + "title": "The One with Joey's Award", + "urls": { + "netflix": "/watch/70274160" + } + }, + { + "episode": 19, + "title": "The One with Ross and Monica's Cousin", + "urls": { + "netflix": "/watch/70274161" + } + }, + { + "episode": 20, + "title": "The One with Rachel's Big Kiss", + "urls": { + "netflix": "/watch/70274162" + } + }, + { + "episode": 21, + "title": "The One with the Vows", + "urls": { + "netflix": "/watch/70274163" + } + }, + { + "episode": 22, + "title": "The One with Chandler's Dad", + "urls": { + "netflix": "/watch/70274164" + } + }, + { + "episode": 23, + "title": "The One with Chandler and Monica's Wedding: Part 1", + "urls": { + "netflix": "/watch/70274165" + } + }, + { + "episode": 24, + "title": "The One with Chandler and Monica's Wedding: Part 2", + "urls": { + "netflix": "/watch/70274166" + } + } + ] + }, + { + "season": 8, + "episodes": [ + { + "episode": 1, + "title": "The One After I Do", + "urls": { + "netflix": "/watch/70274167" + } + }, + { + "episode": 2, + "title": "The One with the Red Sweater", + "urls": { + "netflix": "/watch/70274168" + } + }, + { + "episode": 3, + "title": "The One Where Rachel Tells ...", + "urls": { + "netflix": "/watch/70274169" + } + }, + { + "episode": 4, + "title": "The One with the Videotape", + "urls": { + "netflix": "/watch/70274170" + } + }, + { + "episode": 5, + "title": "The One with Rachel's Date", + "urls": { + "netflix": "/watch/70274171" + } + }, + { + "episode": 6, + "title": "The One with the Halloween Party", + "urls": { + "netflix": "/watch/70274172" + } + }, + { + "episode": 7, + "title": "The One with the Stain", + "urls": { + "netflix": "/watch/70274173" + } + }, + { + "episode": 8, + "title": "The One with the Stripper", + "urls": { + "netflix": "/watch/70274174" + } + }, + { + "episode": 9, + "title": "The One with the Rumor", + "urls": { + "netflix": "/watch/70274175" + } + }, + { + "episode": 10, + "title": "The One with Monica's Boots", + "urls": { + "netflix": "/watch/70274176" + } + }, + { + "episode": 11, + "title": "The One with the Creepy Holiday Card", + "urls": { + "netflix": "/watch/70274177" + } + }, + { + "episode": 12, + "title": "The One Where Joey Dates Rachel", + "urls": { + "netflix": "/watch/70274178" + } + }, + { + "episode": 13, + "title": "The One Where Chandler Takes a Bath", + "urls": { + "netflix": "/watch/70274179" + } + }, + { + "episode": 14, + "title": "The One with the Secret Closet", + "urls": { + "netflix": "/watch/70274180" + } + }, + { + "episode": 15, + "title": "The One with the Birthing Video", + "urls": { + "netflix": "/watch/70274181" + } + }, + { + "episode": 16, + "title": "The One Where Joey Tells Rachel", + "urls": { + "netflix": "/watch/70274182" + } + }, + { + "episode": 17, + "title": "The One with the Tea Leaves", + "urls": { + "netflix": "/watch/70274183" + } + }, + { + "episode": 18, + "title": "The One in Massapequa", + "urls": { + "netflix": "/watch/70274184" + } + }, + { + "episode": 19, + "title": "The One with Joey's Interview", + "urls": { + "netflix": "/watch/70274185" + } + }, + { + "episode": 20, + "title": "The One with the Baby Shower", + "urls": { + "netflix": "/watch/70274186" + } + }, + { + "episode": 21, + "title": "The One with the Cooking Class", + "urls": { + "netflix": "/watch/70274187" + } + }, + { + "episode": 22, + "title": "The One Where Rachel Is Late", + "urls": { + "netflix": "/watch/70274188" + } + }, + { + "episode": 23, + "title": "The One Where Rachel Has a Baby: Part 1", + "urls": { + "netflix": "/watch/70274189" + } + }, + { + "episode": 24, + "title": "The One Where Rachel Has a Baby: Part 2", + "urls": { + "netflix": "/watch/70274190" + } + } + ] + }, + { + "season": 9, + "episodes": [ + { + "episode": 1, + "title": "The One Where No One Proposes", + "urls": { + "netflix": "/watch/70274191" + } + }, + { + "episode": 2, + "title": "The One Where Emma Cries", + "urls": { + "netflix": "/watch/70274192" + } + }, + { + "episode": 3, + "title": "The One with the Pediatrician", + "urls": { + "netflix": "/watch/70274193" + } + }, + { + "episode": 4, + "title": "The One with the Sharks", + "urls": { + "netflix": "/watch/70274194" + } + }, + { + "episode": 5, + "title": "The One with Phoebe's Birthday Dinner", + "urls": { + "netflix": "/watch/70274195" + } + }, + { + "episode": 6, + "title": "The One with the Male Nanny", + "urls": { + "netflix": "/watch/70274196" + } + }, + { + "episode": 7, + "title": "The One with Ross' Inappropriate Song", + "urls": { + "netflix": "/watch/70274197" + } + }, + { + "episode": 8, + "title": "The One with Rachel's Other Sister", + "urls": { + "netflix": "/watch/70274198" + } + }, + { + "episode": 9, + "title": "The One with Rachel's Phone Number", + "urls": { + "netflix": "/watch/70274199" + } + }, + { + "episode": 10, + "title": "The One with Christmas in Tulsa", + "urls": { + "netflix": "/watch/70274200" + } + }, + { + "episode": 11, + "title": "The One Where Rachel Goes Back to Work", + "urls": { + "netflix": "/watch/70274201" + } + }, + { + "episode": 12, + "title": "The One with Phoebe's Rats", + "urls": { + "netflix": "/watch/70274202" + } + }, + { + "episode": 13, + "title": "The One Where Monica Sings", + "urls": { + "netflix": "/watch/70274203" + } + }, + { + "episode": 14, + "title": "The One with the Blind Dates", + "urls": { + "netflix": "/watch/70274204" + } + }, + { + "episode": 15, + "title": "The One with the Mugging", + "urls": { + "netflix": "/watch/70274205" + } + }, + { + "episode": 16, + "title": "The One with the Boob Job", + "urls": { + "netflix": "/watch/70274206" + } + }, + { + "episode": 17, + "title": "The One with the Memorial Service", + "urls": { + "netflix": "/watch/70274207" + } + }, + { + "episode": 18, + "title": "The One with the Lottery", + "urls": { + "netflix": "/watch/70274208" + } + }, + { + "episode": 19, + "title": "The One with Rachel's Dream", + "urls": { + "netflix": "/watch/70274209" + } + }, + { + "episode": 20, + "title": "The One with the Soap Opera Party", + "urls": { + "netflix": "/watch/70274210" + } + }, + { + "episode": 21, + "title": "The One with the Fertility Test", + "urls": { + "netflix": "/watch/70274211" + } + }, + { + "episode": 22, + "title": "The One with the Donor", + "urls": { + "netflix": "/watch/70274212" + } + }, + { + "episode": 23, + "title": "The One in Barbados: Part 1", + "urls": { + "netflix": "/watch/70274213" + } + }, + { + "episode": 24, + "title": "The One in Barbados: Part 2", + "urls": { + "netflix": "/watch/70274214" + } + } + ] + }, + { + "season": 10, + "episodes": [ + { + "episode": 1, + "title": "The One After Joey and Rachel Kiss", + "urls": { + "netflix": "/watch/70274215" + } + }, + { + "episode": 2, + "title": "The One Where Ross Is Fine", + "urls": { + "netflix": "/watch/70274216" + } + }, + { + "episode": 3, + "title": "The One with Ross's Tan", + "urls": { + "netflix": "/watch/70274217" + } + }, + { + "episode": 4, + "title": "The One with the Cake", + "urls": { + "netflix": "/watch/70274218" + } + }, + { + "episode": 5, + "title": "The One Where Rachel's Sister Babysits", + "urls": { + "netflix": "/watch/70274219" + } + }, + { + "episode": 6, + "title": "The One with Ross's Grant", + "urls": { + "netflix": "/watch/70274220" + } + }, + { + "episode": 7, + "title": "The One with The Home Study", + "urls": { + "netflix": "/watch/70274221" + } + }, + { + "episode": 8, + "title": "The One with the Late Thanksgiving", + "urls": { + "netflix": "/watch/70274222" + } + }, + { + "episode": 9, + "title": "The One with the Birth Mother", + "urls": { + "netflix": "/watch/70274223" + } + }, + { + "episode": 10, + "title": "The One Where Chandler Gets Caught", + "urls": { + "netflix": "/watch/70274224" + } + }, + { + "episode": 11, + "title": "The One Where the Stripper Cries", + "urls": { + "netflix": "/watch/70274225" + } + }, + { + "episode": 12, + "title": "The One with Phoebe's Wedding", + "urls": { + "netflix": "/watch/70274226" + } + }, + { + "episode": 13, + "title": "The One Where Joey Speaks French", + "urls": { + "netflix": "/watch/70274227" + } + }, + { + "episode": 14, + "title": "The One with Princess Consuela", + "urls": { + "netflix": "/watch/70274228" + } + }, + { + "episode": 15, + "title": "The One Where Estelle Dies", + "urls": { + "netflix": "/watch/70274229" + } + }, + { + "episode": 16, + "title": "The One with Rachel's Going Away Party", + "urls": { + "netflix": "/watch/70274230" + } + }, + { + "episode": 17, + "title": "The Last One: Part 1 & Part 2", + "urls": { + "netflix": "/watch/70274231" + } + } + ] + } +] diff --git a/extract-episode-urls.js b/extract-episode-urls.js new file mode 100644 index 0000000..1f61ac4 --- /dev/null +++ b/extract-episode-urls.js @@ -0,0 +1,30 @@ +/** + * A quick chrome snippet to extract video ID's from an episode list on Netflix's website. + * Use the jquerify bookmarklet before running this script: https://mreidsma.github.io/bookmarklets/jquerify.html + * Execute on a page like https://www.netflix.com/title/70153404 + * You'll need to scroll through the episodes to ensure all are captured (it usually takes two runs.) + * + * @author Cory Evan Wright + */ +// $('.episodeWrapper div[data-ui-tracking-context]').each(function(i,el) { x.push($(el).data('uiTrackingContext')); }); + +var season = { // Using var instead of let so chrome doesn't balk when re-running the script + season: parseInt($('a.sub-menu-link').text().match(/\d+/)[0]), + episodes: [] +}; + +$('.episodeWrapper div.episodeLockup').each(function(i, el) { + const $episode = $(el), + episode = { + episode: parseInt($episode.find('.episodeNumber').text()), + title: $episode.find('div.episodeTitle p').text(), + urls: { + netflix: $episode.find('a').attr('href').split('?')[0] + } + }; + + season.episodes.push(episode); +}); + +copy(JSON.stringify(season, true, 4)); +console.info('JSON copied to clipboard! Total: %s episodes.', season.episodes.length); \ No newline at end of file diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5cadfa1b6f0c2cfe5bb135c14b575a1fbf8397 GIT binary patch literal 15349 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..da68be5 --- /dev/null +++ b/index.html @@ -0,0 +1,77 @@ + + + + + + + + + A Random One! + + + + + + + + + + + + + + + + + + + + + +
+

Cooking the trifle…

+ + + +

+ A Random One is a random Friends episode generator which also includes Netflix links for easy viewing. + Cutting the cord is lovely, but there's something special about the randomness of re-runs. + A Random One is here to bring that back. +

+ + + +
+ + + diff --git a/logotype.png b/logotype.png new file mode 100644 index 0000000000000000000000000000000000000000..2aaa629e2ceeef7275f5681ae31ccf87eeaa769e GIT binary patch literal 30380 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 CmM5|R literal 0 HcmV?d00001 diff --git a/script.js b/script.js new file mode 100644 index 0000000..68c5452 --- /dev/null +++ b/script.js @@ -0,0 +1,86 @@ +window.episodes = []; + +var headings = [ + "Remember this one?", + "Oh, this one is great!", + "I love this one!" +]; + +var getEpisodes = function() { + $.getJSON('/episodes.json', function(episodes) { + console.info('Episodes loaded!', episodes); + window.episodes = episodes; + }) + .done(function() { + init(); + }) + .fail(function() { + $('.card').replaceWith(''); + }); +}; + +var randomItem = function(array) { + return array[Math.floor(Math.random() * array.length)]; +}; + +var getRandomEpisode = function() { + var season = randomItem(window.episodes), + episode = randomItem(season.episodes); + + // add logic to make sure the first episode in 2-part episodes always comes first? + + console.log('random episode: ', season.season, episode); + + // Update the URLs + $('.card a') + .attr('href', 'https://www.netflix.com' + episode.urls.netflix) + .eq(0).text('S' + season.season + ' E' + episode.episode + ' - ' + episode.title); + + // Update the header + $('h1').text(randomItem(headings)); + + // Update the elements for data tracking + $('a, button', '.card').data({ + episode: episode.episode + ' - ' + episode.title, + season: season.season + }); + + // TODO: Add episode descriptions to JSON and load them into card +}; + +// event tracking +var trackCardClick = function($target) { + var action = $target.data('gaAction'); + var label = $target.data('episode'); + var value = $target.data('season'); + var event = { + eventCategory: 'Card Click', + eventAction: action, // button or link action + eventLabel: label, // episode number and name + eventValue: value // season + }; + + window.ga('send', 'event', event); +}; + +// I don't love this name. What's better, or is there a better way to do this altogether? +var init = function() { + getRandomEpisode(); + + // Show the card if hidden + $('.card.hidden').removeClass('hidden'); + + // Bind UI handlers + $('a, button', '.card').on('click', function() { + trackCardClick($(this)); + }); + + $('.card button').on('click', function() { + getRandomEpisode(); + }); +}; + +// All set, let's go! +$(function() { + getEpisodes(); +}); \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..c8dbc7f --- /dev/null +++ b/style.css @@ -0,0 +1,46 @@ +body { + margin: 1em; + font-family: 'Open Sans', helvetica, sans-serif; +} + +body h1 { + color: #58bad4; + font-size: 3em; + font-family: 'Henny Penny', cursive; + filter: drop-shadow(-1px 1px 0px #000); +} + +h3, h3 a { + color: #000; + font-size: 1.3em; + font-weight: normal; + font-family: 'Covered By Your Grace', cursive; +} + +.container { + max-width: 1000px; + margin: 0 auto; +} + +.container > footer { + color: #CCC; + font-size: .8em; + margin-top: 4em; + padding-top: .8em; + text-align: center; + border-top: 1px solid #CCC; +} + +.container > footer a { + color: #AAA; +} + +@media(min-width: 501px) { + .container > footer a:first-child { + text-align: left; + } + + .container > footer a:last-child { + text-align: right; + } +} From 5e7e5413f8f4ad16e0b34213507fa5d9346876ab Mon Sep 17 00:00:00 2001 From: Hemant Date: Mon, 12 Oct 2020 17:14:56 +0530 Subject: [PATCH 2/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 983dc44..2c655e2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A Random One! _A Random One_ is a _Friends_ random episode generator which also includes Netflix links for easy viewing. It was created to mimic the random order of re-runs on live television. -Try it out at [aRandomOne.com](https://www.aRandomOne.com). +Try it out at [Live App Website](https://stripe-impossible-duke.glitch.me/). Sources