From adfb606087e6ccdd94a014dfc9679a9c6706468e Mon Sep 17 00:00:00 2001 From: alistairjcbrown <635903+alistairjcbrown@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:29:16 +0000 Subject: [PATCH] Update title normalization test --- common/is-sport-showing.js | 1 + common/known-removable-phrases.js | 15 + common/normalize-title.js | 14 +- ...dize-prefixing-for-theatre-performances.js | 15 +- common/tests/test-titles.json | 1012 ++++++++++++++++- sources/thecliq.app-/find-events.js | 5 + 6 files changed, 1056 insertions(+), 6 deletions(-) diff --git a/common/is-sport-showing.js b/common/is-sport-showing.js index 7fb8b77b..42ae0a21 100644 --- a/common/is-sport-showing.js +++ b/common/is-sport-showing.js @@ -19,6 +19,7 @@ const sportShowings = [ /EUROPA LEAGUE QUALIFIER/i, /EUROPA LEAGUE FINAL/i, /Enterprise National League/i, + /Fifa World Cup/i, /FIFA Club World/i, /FIFA CWC/i, /NON-LEAGUE FINALS?/i, diff --git a/common/known-removable-phrases.js b/common/known-removable-phrases.js index 7807d234..01831835 100644 --- a/common/known-removable-phrases.js +++ b/common/known-removable-phrases.js @@ -41,6 +41,7 @@ const knownRemovablePhrases = [ "UK Charity Screening", "London Gala Screening", "Feature Screening", + "Repeat Screening", "***LONDON***", "***VHS***", "*ADVANCE*", @@ -308,6 +309,7 @@ const knownRemovablePhrases = [ "with Tim Robey", "with TOMISIN ADEPEJU", "with tommy wiseau live on stage", + "with Rebelle Voices", "with Sammy Baloji", "with Selina Robertson & Isabel Moir", "with Special Guest Sviatoslav Vakarchuk", @@ -330,6 +332,9 @@ const knownRemovablePhrases = [ "with Morgan M. Page", "with Ronan Bennett", "with score by Joe Harvey-Whyte", + "WITH HORRORITUAL!", + "with Free Chai & Samosas!", + "with Odorama!", "w/ Reece Shearsmith intro", "w/ Ben Wheatley Q&A", "w/ Peter Strickland Q&A", @@ -512,8 +517,10 @@ const knownRemovablePhrases = [ "by Rebecca Salvadori", "by Louisa May Alcott", "by Paromita Vohra", + "by Renátó Olasz", "by Fassbinder", "by Joe Harvey-Whyte", + "C.O.F.F.I.N '", "COLD ISLANDERS:", "Cold War Visions:", "Mamoru Hosoda's", @@ -546,6 +553,7 @@ const knownRemovablePhrases = [ "CELLULOID JAM!", "CinemaLive:", "CINESOCIAL:", + "CINEMA MENTIRÉ:", "Cinema Film Screening Konrad Wolf Film Series:", "Cinema Film Screening Konrad Wolf:", "Cinema Film Screening & Talk:", @@ -564,6 +572,7 @@ const knownRemovablePhrases = [ "Clermont-Ferrand:", "Closing Ceremony: “Shaw Festival – London 2026”", "Create 2026:", + "Copy of Copy of ", "Copy of ", "CIFF2025:", "CYFF:", @@ -659,6 +668,7 @@ const knownRemovablePhrases = [ "Senior Community Cinema x The Old Ways:", "Senior Community Cinema:", "Sneak Peek & Intro", + "Sneak Peek 2.0:", "The Old Ways:", "SCS: The Old Ways", "FILM CLUB FRIDAYS:", @@ -750,6 +760,7 @@ const knownRemovablePhrases = [ "The Woman Behind Visconti's Masterpiece", "Cinebug turns 1:", "Hussein Kamal's", + "Ido Fluk:", "IFF:", "IFF 2024:", "IFF 2025:", @@ -986,6 +997,7 @@ const knownRemovablePhrases = [ ": Staff Picks!", "Stephanie Rothman:", "Movie Subtitled", + "Movie Bottomless Brunch Party", "Subtitled screen ", "SUBTITLED ", "SUBTITLED:", @@ -1076,6 +1088,7 @@ const knownRemovablePhrases = [ ", a queer romance", "Documentary Screenings", "Documentary Screening", + "Documentary Premiere", "1994 version", "3rd annual screening", "4th annual screening", @@ -1167,7 +1180,9 @@ const knownRemovablePhrases = [ "Short Film Screenings", "Short Film Screening", "Bloomsday Film Screening", + ": London film screening", "Film Screening", + "Film premiere and", "Film Premiere:", "Fundraising Screening", "Fundraiser Q&A:", diff --git a/common/normalize-title.js b/common/normalize-title.js index ad5ee79f..fcce77a4 100644 --- a/common/normalize-title.js +++ b/common/normalize-title.js @@ -497,7 +497,10 @@ function normalizeTitle(title, options) { [/(classic )?secret scre(e|a)(n|m)ing( \d+)?/i, "mystery movie"], [/secret (classic )?bollywood cinema/i, "mystery movie"], [/scre(e|a)(n|m) unseen/i, "mystery movie"], - [/(Orange Box )?Secret Film Screenings?/i, "mystery movie"], + [ + /(Orange Box )?Secret Film Screenings?(: Summer Series)?/i, + "mystery movie", + ], [/^.* \+ mystery movie/i, "mystery movie"], ["vhs film", "movie"], [/The Bill Reunion \d+/i, "The Bill Reunion"], @@ -728,11 +731,19 @@ function normalizeTitle(title, options) { ["A Night of Latin Jazz - ", "A Night of Latin Jazz: "], ["Classic Night - ", "Classic Night: "], ["Weird Wednesday - ", "Weird Wednesday: "], + ["Bar Trash: 4TH BIRTHDAY - ", "Bar Trash: 4TH BIRTHDAY: "], + ["Elon Musk Unveiled -", "Elon Musk Unveiled: "], + ["Goethe-Kino - ", "Goethe-Kino: "], ["The Life + Legacy", "The Life and Legacy"], [" - Oggi", ": Oggi"], [" x metropolis", " metropolis"], ["Nick Drake: A Skin Too Few", "A Skin Too Few: The Days of Nick Drake"], ["(Screening) / ", "(Screening) & "], + [ + "BEYOND ILLUSION - MAGIC DOCUMENTARY", + "Beyond Illusion: The Making of a Magician - ", + ], + [/The Band - The Show/i, "The Band The Show"], // Variant families collapsed from known-removable-phrases.js // Each pattern covers multiple near-identical string entries that shared a common structure [/dog[- ]?friendly(?:\s+screening)?[:\s]*/i, ""], @@ -987,6 +998,7 @@ function normalizeTitle(title, options) { .replace(/^the (?=\S+\s+(?![[(]))/i, "") .replace(/([a-z])-([a-z])/gi, "$1$2") .replace(/\s+q&a$/i, "") + .replace("?s", "s") .replace(/\s3d$/i, "") .replace(/[+?]$/, "") .replace(/\(\d{4}-[^)]+\)$/, "") // Remove any date range suffixes diff --git a/common/standardize-prefixing-for-theatre-performances.js b/common/standardize-prefixing-for-theatre-performances.js index 0625c049..67306e46 100644 --- a/common/standardize-prefixing-for-theatre-performances.js +++ b/common/standardize-prefixing-for-theatre-performances.js @@ -74,8 +74,11 @@ function standardizePrefixingForMetropolitanOperaPerformances(title, options) { title = title.replace(/\s+&\s+/, " and ").replace(/\s+-\s+/, ": "); // Update if "met opera" is a suffix - if (title.toLowerCase().includes(": met opera ")) { - title = `The Metropolitan Opera: ${title.replace(/: Met Opera /i, " ")}`; + if ( + title.toLowerCase().includes(": met opera ") || + title.toLowerCase().includes(": the met opera ") + ) { + title = `The Metropolitan Opera: ${title.replace(/: (The )?Met Opera /i, " ")}`; } let updatedPrefixTitle = metOperaPrefixes.reduce( @@ -144,6 +147,8 @@ const rboPrefixes = [ /Royal Opera House[:|\s]/i, /^The Royal Ballet[:|\s]/i, /^The Royal Opera[:|\s]/i, + /: The Royal Ballet[:|\s]/i, + /: The Royal Opera[:|\s]/i, /RB&O Live:/i, /RB&O:/i, /Live From Royal Ballet/i, @@ -152,6 +157,7 @@ const rboPrefixes = [ function standardizePrefixingForRoyalBalletOperaPerformances(title) { title = title .replace(/Captured Live /i, "") + .replace(/-\s?Live\s?-/i, "-") .replace(/Hoffman(\s|$)/i, "Hoffmann$1") .replace(/\s+&\s+/, " and ") .replace(/\s+-\s+/, ": "); @@ -257,7 +263,8 @@ function standardizePrefixingForTheatrePerformances( lowercaseTitle.includes("the metropolitan opera:")) || (lowercaseTitle.startsWith("rbo ") && lowercaseTitle.includes("the met opera -")) || - lowercaseTitle.includes(" - met opera") + lowercaseTitle.includes(" - met opera") || + lowercaseTitle.includes(" - the met opera") ) { return standardizePrefixingForMetropolitanOperaPerformances(title, options); } @@ -270,7 +277,9 @@ function standardizePrefixingForTheatrePerformances( lowercaseTitle.startsWith("royal opera") || lowercaseTitle.startsWith("royal ballet") || lowercaseTitle.startsWith("the royal opera") || + lowercaseTitle.includes("- the royal opera") || lowercaseTitle.startsWith("the royal ballet") || + lowercaseTitle.includes("- the royal ballet") || lowercaseTitle.startsWith("roh royal opera") || lowercaseTitle.startsWith("roh ") || lowercaseTitle.startsWith("roh: ") || diff --git a/common/tests/test-titles.json b/common/tests/test-titles.json index 22accfc8..e2c392a6 100644 --- a/common/tests/test-titles.json +++ b/common/tests/test-titles.json @@ -69517,7 +69517,7 @@ }, { "input": "BEYOND ILLUSION - MAGIC DOCUMENTARY UK PREMIERE WITH Q AND A", - "output": "beyond illusion" + "output": "beyond illusion the making of a magician" }, { "input": "Daadi Ki Shaadi", @@ -71461,7 +71461,7 @@ }, { "input": "Operation Recomply: Film premiere and panel discussion", - "output": "operation recomply and" + "output": "operation recomply" }, { "input": "Sinners Presented by WABJ", @@ -73106,5 +73106,1013 @@ { "input": "Slowly, slowly, the tongue unrolls: an evening of poetry and sound", "output": "slowly slowly the tongue unrolls an evening of poetry sound" + }, + { + "input": "CARERS & BABIES: MOSS & FREUD", + "output": "moss freud" + }, + { + "input": "KOLN 75", + "output": "koln 75" + }, + { + "input": "LEONORA IN THE MORNING LIGHT", + "output": "leonora in the morning light" + }, + { + "input": "MY MOTHER'S WEDDING", + "output": "my mothers wedding" + }, + { + "input": "My Week with Marilyn", + "output": "my week with marilyn" + }, + { + "input": "PREVIEW SCREENING: 50 YEARS OF PUNK + LIVE Q&A", + "output": "50 years of punk" + }, + { + "input": "SAVAGE HOUSE", + "output": "savage house" + }, + { + "input": "TIME AND WATER", + "output": "time water" + }, + { + "input": "VIRGINIA WOOLF'S NIGHT AND DAY + LIVE Q&A", + "output": "virginia woolfs night day" + }, + { + "input": "All the President's Men (4K Restoration)", + "output": "all the presidents men" + }, + { + "input": "Members' Screening: Tuner", + "output": "tuner" + }, + { + "input": "Parent & Baby Screening: Power Ballad", + "output": "power ballad" + }, + { + "input": "Queer 60s: Chained Girls + Introduction by Selina Robertson", + "output": "chained girls" + }, + { + "input": "Queer 60s: Persona + Introduction", + "output": "persona" + }, + { + "input": "Relaxed Screening: Romería", + "output": "romeria" + }, + { + "input": "BAR TRASH presents HAROLD AND MAUDE (1971) at Beer Merchants Tap", + "output": "harold maude (1971)" + }, + { + "input": "Angel’s Egg", + "output": "angels egg" + }, + { + "input": "25 and Under: An introduction to John Woo", + "output": "an introduction to john woo" + }, + { + "input": "Blue Black Permanent + pre-recorded intro by Beth Johnston, Filmmaker", + "output": "blue black permanent" + }, + { + "input": "Blue Heron + Q&A with director Sophy Romvari", + "output": "blue heron" + }, + { + "input": "European Premiere: Lone Wolves + pre-recorded intro from writer and actor Matt Foss", + "output": "lone wolves" + }, + { + "input": "Let’s Make Love + intro by Anna Smith, broadcaster, film critic and host of Girls on Film", + "output": "lets make love" + }, + { + "input": "Mid90s", + "output": "mid90s" + }, + { + "input": "Niagara + recorded intro by film critic Christina Newland", + "output": "niagara" + }, + { + "input": "Preview: Cactus Pears + Q&A with Rohan Parashuram Kanawade, Neeraj Churi and Kaushik Ray", + "output": "cactus pears" + }, + { + "input": "River of No Return + recorded intro by film critic Christina Newland", + "output": "river of no return" + }, + { + "input": "Rory Peck Awards 2026", + "output": "rory peck awards" + }, + { + "input": "Seniors’ Free Matinee: A Dry White Season + intro by Patrice Robinson, Film Curator", + "output": "a dry white season" + }, + { + "input": "Shorts Programme: It’s Not You, It’s Ableism + Q&A", + "output": "shorts programme its not you its ableism" + }, + { + "input": "Skate Kitchen + intro by season co-curator Siobhan Browne", + "output": "skate kitchen" + }, + { + "input": "The Killer + intro by Vicki Brown, co-founder of the MilkTea collective", + "output": "the killer" + }, + { + "input": "We Crip Film Festival Closing Night: World Premiere: D-Punk + panel discussion", + "output": "dpunk" + }, + { + "input": "We Crip Film Festival Opening Night: Joybubbles + pre-recorded intro from Rachael J. Morrison", + "output": "joybubbles" + }, + { + "input": "East London Liquor Company Blended Whisky Breakdown", + "output": "east london liquor company blended whisky breakdown" + }, + { + "input": "Minions & Monsters", + "output": "minions monsters" + }, + { + "input": "The Metropolitan Opera: Così fan tutte", + "output": "metropolitan opera cosi fan tutte" + }, + { + "input": "The Metropolitan Opera: La Fanciulla Del West", + "output": "metropolitan opera la fanciulla del west" + }, + { + "input": "The Metropolitan Opera: Macbeth", + "output": "metropolitan opera macbeth" + }, + { + "input": "The Metropolitan Opera: Manon", + "output": "metropolitan opera manon" + }, + { + "input": "The Metropolitan Opera: Otello", + "output": "metropolitan opera otello" + }, + { + "input": "The Metropolitan Opera: Parsifal", + "output": "metropolitan opera parsifal" + }, + { + "input": "The Metropolitan Opera: Samson et Dalila", + "output": "metropolitan opera samson et dalila" + }, + { + "input": "The Metropolitan Opera: Silent Night", + "output": "metropolitan opera silent night" + }, + { + "input": "The Royal Ballet: Alice's Adventures In Wonderland", + "output": "royal ballet opera 2025 adventures in wonderland" + }, + { + "input": "The Royal Ballet: Manon", + "output": "royal ballet opera 2025 manon" + }, + { + "input": "The Royal Opera: Carmen", + "output": "royal ballet opera 2025 carmen" + }, + { + "input": "The Royal Opera: Così Fan Tutte", + "output": "royal ballet opera 2025 cosi fan tutte" + }, + { + "input": "The Royal Opera: Götterdämmerung", + "output": "royal ballet opera 2025 gotterdammerung" + }, + { + "input": "Twenty Years of the Met in Cinemas: An Anniversary Celebration", + "output": "twenty years of the met an anniversary celebration" + }, + { + "input": "Audition (1999) on 35mm", + "output": "audition (1999)" + }, + { + "input": "Drive-Away Dolls (2024) – repeat screening", + "output": "driveaway dolls (2024)" + }, + { + "input": "El Topo (1970) on 35mm", + "output": "el topo (1970)" + }, + { + "input": "Festen (1998) on 35mm", + "output": "festen (1998)" + }, + { + "input": "GEMMA & ROBERT ROSS’S COMEDY CARNIVAL IX", + "output": "gemma robert rosss comedy carnival ix" + }, + { + "input": "Goodfellas (1990) on 35mm", + "output": "goodfellas (1990)" + }, + { + "input": "In My Skin (2002) on 35mm", + "output": "in my skin (2002)" + }, + { + "input": "Julien Donkey-Boy (1999) on 35mm", + "output": "julien donkeyboy (1999)" + }, + { + "input": "Law of Desire (1987) on 35mm", + "output": "law of desire (1987)" + }, + { + "input": "Moulin Rouge! (2001) on 35mm", + "output": "moulin rouge (2001)" + }, + { + "input": "Onibaba (1964) on 35mm", + "output": "onibaba (1964)" + }, + { + "input": "Pride (2014)", + "output": "pride (2014)" + }, + { + "input": "The Age of Innocence (1993) on 35mm", + "output": "age of innocence (1993)" + }, + { + "input": "The Good, the Bad and the Ugly (1966) on 35mm", + "output": "good the bad the ugly (1966)" + }, + { + "input": "The Hours (2002) on 35mm", + "output": "the hours (2002)" + }, + { + "input": "Women on the Verge of a Nervous Breakdown (1988) on 35mm", + "output": "women on the verge of a nervous breakdown (1988)" + }, + { + "input": "£2 Family Films : Zog + Zog And The Flying Doctors", + "output": "zog zog the flying doctors" + }, + { + "input": "Boogie Nights (4K Restoration) (1997)", + "output": "boogie nights (1997)" + }, + { + "input": "BTS WORLD TOUR ‘ARIRANG’ LIVE VIEWING IN BUSAN", + "output": "bts world tour arirang" + }, + { + "input": "Mollywood Times (Malayalam)", + "output": "mollywood times" + }, + { + "input": "RBO Cinema Season 2026-27: Così Fan Tutte", + "output": "royal ballet opera 2026 cosi fan tutte" + }, + { + "input": "RBO Cinema Season 2026-27: Götterdämmerung", + "output": "royal ballet opera 2026 gotterdammerung" + }, + { + "input": "RBO Cinema Season 2026-27: La Fanciulla Del West", + "output": "royal ballet opera 2026 la fanciulla del west" + }, + { + "input": "RBO Cinema Season 2026-27: Macbeth", + "output": "royal ballet opera 2026 macbeth" + }, + { + "input": "Thrill Seekers : Armageddon (1998)", + "output": "armageddon (1998)" + }, + { + "input": "Thrill Seekers : Edge Of Tomorrow (2014)", + "output": "edge of tomorrow (2014)" + }, + { + "input": "Thrill Seekers : Interstellar (2014)", + "output": "interstellar (2014)" + }, + { + "input": "Thrill Seekers : The Martian (2015)", + "output": "the martian (2015)" + }, + { + "input": "Bandar (Hindi)", + "output": "bandar" + }, + { + "input": "Hai Jawani Toh Ishq Hona Hai (Hindi)", + "output": "hai jawani toh ishq hona hai" + }, + { + "input": "Manasukkul Oru Mazhaicharal (Tamil)", + "output": "manasukkul oru mazhaicharal" + }, + { + "input": "Parimala and Co (Tamil)", + "output": "parimala co" + }, + { + "input": "Sing Geetham (Telugu)", + "output": "sing geetham" + }, + { + "input": "Rockstar (Bengali)", + "output": "rockstar" + }, + { + "input": "Met Opera 2026-27: Così fan tutte", + "output": "metropolitan opera cosi fan tutte" + }, + { + "input": "Met Opera 2026-27: La Fanciulla del West", + "output": "metropolitan opera la fanciulla del west" + }, + { + "input": "Met Opera 2026-27: Samson et Dalila", + "output": "metropolitan opera samson et dalila" + }, + { + "input": "The Met: An Anniversary Celebration", + "output": "metropolitan opera an anniversary celebration" + }, + { + "input": "Camp Rock Movie Bottomless Brunch Party", + "output": "camp rock" + }, + { + "input": "England vs Croatia", + "output": "england vs croatia" + }, + { + "input": "England vs Ghana", + "output": "england vs ghana" + }, + { + "input": "England vs Panama", + "output": "england vs panama" + }, + { + "input": "Running The Race In The Marketplace: Podcast Launch", + "output": "running the race in the marketplace podcast launch" + }, + { + "input": "DocHouse: Elon Musk Unveiled -The Tesla Experiment", + "output": "elon musk unveiled the tesla experiment" + }, + { + "input": "DocHouse: Italian Doc Season: I Want her Dead", + "output": "i want her dead" + }, + { + "input": "DocHouse: Italian Doc Season: Roberto Rossellini", + "output": "roberto rossellini" + }, + { + "input": "DocHouse: Italian Doc Season: Stories for Sandro", + "output": "stories for sandro" + }, + { + "input": "DocHouse: Out Laws", + "output": "out laws" + }, + { + "input": "Met Opera 2026-27: Manon", + "output": "metropolitan opera manon" + }, + { + "input": "Met Opera 2026-27: Otello", + "output": "metropolitan opera otello" + }, + { + "input": "Met Opera 2026-27: Parsifal", + "output": "metropolitan opera parsifal" + }, + { + "input": "Met Opera 2026-27: Silent Night", + "output": "metropolitan opera silent night" + }, + { + "input": "RBO 2026-27: Alice's Adventures in Wonderland", + "output": "royal ballet opera 2026 adventures in wonderland" + }, + { + "input": "RBO Cinema Season 2026-27: Romeo and Juliet", + "output": "royal ballet opera 2026 romeo juliet" + }, + { + "input": "RBO Cinema Season 2026-27: Tosca", + "output": "royal ballet opera 2026 tosca" + }, + { + "input": "Twenty Years of the Met in Cinemas", + "output": "twenty years of the met" + }, + { + "input": "Fruity Screening", + "output": "fruity" + }, + { + "input": "TRANSMISSIONS x BVTCH BOOTS PRESENT: A Body to Live In", + "output": "a body to live in" + }, + { + "input": "Parent and Baby: Disclosure Day", + "output": "disclosure day" + }, + { + "input": "The Legend of Korra in Concert", + "output": "legend of korra" + }, + { + "input": "Beyond: Finding Emily", + "output": "finding emily" + }, + { + "input": "Beyond: Fairyland", + "output": "fairyland" + }, + { + "input": "Deeper Into Movies Presents: ERUPCJA + Live Q&A with Pete Ohs & Jeremy O. Harris", + "output": "erupcja" + }, + { + "input": "Stand By Me (1986)", + "output": "stand by me (1986)" + }, + { + "input": "S'ABLE Labs Presents: Masters of the Universe screening + Secret Launch", + "output": "masters of the universe" + }, + { + "input": "Screening + Q&A: Blackmail", + "output": "blackmail" + }, + { + "input": "Family Film Club - Every Monday and Tuesday", + "output": "every monday tuesday" + }, + { + "input": "Secret Film Screenings: Summer Series", + "output": "mystery movie" + }, + { + "input": "Bar Trash: 4TH BIRTHDAY - MYSTERY GIMMICK SHOW!!!", + "output": "4th mystery gimmick show" + }, + { + "input": "Bar Trash: DRACULA A.D. 1972 (1972) WITH HORRORITUAL!", + "output": "dracula a d 1972 (1972)" + }, + { + "input": "Bar Trash: MAHAKAAL (1993) with Free Chai & Samosas!", + "output": "mahakaal (1993)" + }, + { + "input": "Bar Trash: POLYESTER (1981) with Odorama!", + "output": "polyester (1981)" + }, + { + "input": "Beyond Kino Presents: Stars of Little Importance by Renátó Olasz", + "output": "stars of little importance" + }, + { + "input": "C.O.F.F.I.N '10,000 Miles From Oslo' Documentary Premiere + Q&A — London", + "output": "10000 miles from oslo" + }, + { + "input": "China Film Festival 2026 - London Screening 6th Jun", + "output": "china film festival 2026" + }, + { + "input": "China Film Festival 2026 - London Screening 7th Jun", + "output": "china film festival 2026" + }, + { + "input": "No Time for Goodbye + Q&A", + "output": "no time for goodbye" + }, + { + "input": "Operation Recomply: London film screening", + "output": "operation recomply" + }, + { + "input": "Film: Goethe-Kino - Ido Fluk: Köln 75", + "output": "koln 75" + }, + { + "input": "SinoUK - Light of China - Hello Chengdu – Cultural Experience", + "output": "light of china" + }, + { + "input": "Pink Narcissus 4k restoration", + "output": "pink narcissus" + }, + { + "input": "Where is the Friend’s House + Shorts", + "output": "where is the friends house" + }, + { + "input": "Film Screening: Three Outlaw Samurai", + "output": "three outlaw samurai" + }, + { + "input": "Everybody to Kenmure Street + workshop", + "output": "everybody to kenmure street" + }, + { + "input": "Hostile + Special Q&A", + "output": "hostile" + }, + { + "input": "Beyond Illusion: The Making of a Magician - Magic performances and Film Premiere with Q&A", + "output": "beyond illusion the making of a magician" + }, + { + "input": "Lucy Lombard - Musical Memories", + "output": "lucy lombard" + }, + { + "input": "Toy Story 5 [2D]", + "output": "toy story 5" + }, + { + "input": "Toy Story 5 [3D]", + "output": "toy story 5" + }, + { + "input": "Vengeance Is Mine - These Women Took Matters Into Their Own Hands - All Day Mystery Movie Marathon", + "output": "vengeance is mine" + }, + { + "input": "Peddi", + "output": "peddi" + }, + { + "input": "Drishyam 3 (Malayalam) - 12A Cut", + "output": "drishyam 3" + }, + { + "input": "Zog & Zog and the Flying Doctors", + "output": "zog zog the flying doctors" + }, + { + "input": "Zog + Zog and the Flying Doctors", + "output": "zog zog the flying doctors" + }, + { + "input": "Boogie Nights (4k Restoration)", + "output": "boogie nights" + }, + { + "input": "Parimala and Co", + "output": "parimala co" + }, + { + "input": "Detective Conan: Fallen Angel of the Highway", + "output": "detective conan fallen angel of the highway" + }, + { + "input": "Loja e fundit - Meet & Greet", + "output": "loja e fundit" + }, + { + "input": "Hai Jawani Toh Ishq Hona Hai", + "output": "hai jawani toh ishq hona hai" + }, + { + "input": "Manasukkul Oru Mazhaicharal", + "output": "manasukkul oru mazhaicharal" + }, + { + "input": "Peddi (Malayalam)", + "output": "peddi" + }, + { + "input": "Kids Club: The Magic Faraway Tree", + "output": "magic faraway tree" + }, + { + "input": "Alice?s Adventures In Wonderland - LIVE - The Royal Ballet 26-27", + "output": "royal ballet opera 2026 alices adventures in wonderland" + }, + { + "input": "Carmen - LIVE- The Royal Opera 26-27", + "output": "royal ballet opera 2026 carmen" + }, + { + "input": "Cosi Fan Tutte - LIVE - The Royal Opera 26-27", + "output": "royal ballet opera 2026 cosi fan tutte" + }, + { + "input": "Gotterdammerung - LIVE - The Royal Opera 26-27", + "output": "royal ballet opera 2026 gotterdammerung" + }, + { + "input": "La Fanciulla Del West - The Met Opera 26-27", + "output": "metropolitan opera la fanciulla del west" + }, + { + "input": "Macbeth - The Met Opera 2026-27", + "output": "metropolitan opera macbeth" + }, + { + "input": "Manon - LIVE - The Royal Ballet 26-27", + "output": "royal ballet opera 2026 manon" + }, + { + "input": "Romeo & Juliet - LIVE - The Royal Ballet 26-27", + "output": "royal ballet opera 2026 romeo juliet" + }, + { + "input": "Swan Lake - LIVE - The Royal Ballet 26-27", + "output": "royal ballet opera 2026 swan lake" + }, + { + "input": "The Nutcracker - LIVE - The Royal Ballet 26-27", + "output": "royal ballet opera 2026 the nutcracker" + }, + { + "input": "Tosca - LIVE - The Royal Opera 26-27", + "output": "royal ballet opera 2026 tosca" + }, + { + "input": "Drawn Alive: Indie Animation, Unite!", + "output": "drawn alive indie animation unite" + }, + { + "input": "Scary Movie 6", + "output": "scary movie 6" + }, + { + "input": "Almodovar Season: All About My Mother", + "output": "all about my mother" + }, + { + "input": "Almodovar Season: Bad Education", + "output": "bad education" + }, + { + "input": "Almodovar Season: Talk to Her", + "output": "talk to her" + }, + { + "input": "Almodovar Season: Volver", + "output": "volver" + }, + { + "input": "Playing the Changes - Tracking Darius Brubeck", + "output": "playing the changes" + }, + { + "input": "Dog Friendly Screening: Toy Story 5", + "output": "toy story 5" + }, + { + "input": "NT Live: Les Liaisons Dangereuses – Premiere + Q&A", + "output": "national theatre live les liaisons dangereuses" + }, + { + "input": "Twilight Saga All Nighter Hangout", + "output": "twilight saga all nighter hangout" + }, + { + "input": "Met Opera Encore 2026-27: Parsifal", + "output": "metropolitan opera parsifal" + }, + { + "input": "Dog Friendly Screening: Disclosure Day", + "output": "disclosure day" + }, + { + "input": "Dog Friendly Screening: Tuner", + "output": "tuner" + }, + { + "input": "BAR TRASH presents BLACKMAIL (1929)", + "output": "blackmail (1929)" + }, + { + "input": "BAR TRASH presents THE CURSE OF FRANKENSTEIN (1957)", + "output": "curse of frankenstein (1957)" + }, + { + "input": "BAR TRASH presents THE MYSTERY OF THE WAX MUSEUM", + "output": "mystery of the wax museum" + }, + { + "input": "Club Room: Moon Idle", + "output": "moon idle" + }, + { + "input": "RBO Encore 2026-27: Carmen", + "output": "royal ballet opera 2026 carmen" + }, + { + "input": "RBO Encore 2026-27: Cosi Fan Tutte", + "output": "royal ballet opera 2026 cosi fan tutte" + }, + { + "input": "RBO Encore 2026-27: Gotterdammerung", + "output": "royal ballet opera 2026 gotterdammerung" + }, + { + "input": "RBO Encore 2026-27: Manon", + "output": "royal ballet opera 2026 manon" + }, + { + "input": "RBO Encore 2026-27: Romeo & Juliet (2025 Encore)", + "output": "royal ballet opera 2025 romeo juliet" + }, + { + "input": "RBO Encore 2026-27: Swan Lake", + "output": "royal ballet opera 2026 swan lake" + }, + { + "input": "RBO Encore 2026-27: The Nutcracker (2025 Encore)", + "output": "royal ballet opera 2025 the nutcracker" + }, + { + "input": "RBO Encore 2026-27: Tosca", + "output": "royal ballet opera 2026 tosca" + }, + { + "input": "RBO Encore2026-27:Alice's Adventures In Wonderland", + "output": "royal ballet opera 2025 adventures in wonderland" + }, + { + "input": "RBO Live 2026-27: Alice's Adventures In Wonderland", + "output": "royal ballet opera 2026 adventures in wonderland" + }, + { + "input": "RBO Live 2026-27: Carmen", + "output": "royal ballet opera 2026 carmen" + }, + { + "input": "RBO Live 2026-27: Cosi Fan Tutte", + "output": "royal ballet opera 2026 cosi fan tutte" + }, + { + "input": "RBO Live 2026-27: Gotterdammerung", + "output": "royal ballet opera 2026 gotterdammerung" + }, + { + "input": "RBO Live 2026-27: Manon", + "output": "royal ballet opera 2026 manon" + }, + { + "input": "RBO Live 2026-27: Romeo & Juliet (2025 Encore)", + "output": "royal ballet opera 2025 romeo juliet" + }, + { + "input": "RBO Live 2026-27: Swan Lake", + "output": "royal ballet opera 2026 swan lake" + }, + { + "input": "RBO Live 2026-27: The Nutcracker (2025 Encore)", + "output": "royal ballet opera 2025 the nutcracker" + }, + { + "input": "RBO Live 2026-27: Tosca", + "output": "royal ballet opera 2026 tosca" + }, + { + "input": "CYCLES - FATHER’S TO SON’S (EXHIBITION)", + "output": "cycles" + }, + { + "input": "Nirvanna: The Band - The Show - The Movie", + "output": "nirvanna the band the show" + }, + { + "input": "The People's Emergency Briefing + Q&A", + "output": "peoples emergency briefing" + }, + { + "input": "Virginia Woolf’s Night & Day", + "output": "virginia woolfs night day" + }, + { + "input": "When the Wind Blows (1986)", + "output": "when the wind blows (1986)" + }, + { + "input": "Arabic Cinema Club presented by Nihal El Aasar", + "output": "arabic cinema club" + }, + { + "input": "Carers & Babies: ROSE OF NEVADA", + "output": "rose of nevada" + }, + { + "input": "CINEMA MENTIRÉ: SALOME’S LAST DANCE + Intro", + "output": "salomes last dance" + }, + { + "input": "DJ YODA GOES TO THE MOVIES (AV SHOW)", + "output": "dj yoda goes to the movies" + }, + { + "input": "ERUPCJA", + "output": "erupcja" + }, + { + "input": "LESBIAN SPACE PRINCESS", + "output": "lesbian space princess" + }, + { + "input": "MAC DEMARCO: 7 DAYS IN MAY + Intro", + "output": "mac demarco 7 days in may" + }, + { + "input": "Pink Palace: MICKEY & RICHARD + Q&A", + "output": "mickey richard" + }, + { + "input": "LS/FF Presents LONDON PREMIERE: SURFILMUSIC", + "output": "surfilmusic" + }, + { + "input": "Film Music Live: Sci-Fi and Fantasy", + "output": "film music live scifi fantasy" + }, + { + "input": "Friendship Matinee: Matilda in Concert (PG)", + "output": "matilda" + }, + { + "input": "Copy of Copy of The Man With The Plan", + "output": "man with the plan" + }, + { + "input": "Copy of The Man With The Plan", + "output": "man with the plan" + }, + { + "input": "African Cinema Speaks: Screenings and Seminar", + "output": "african cinema speaks screenings seminar" + }, + { + "input": "Better a Fascist than a Faggot + Q&A", + "output": "better a fascist than a faggot" + }, + { + "input": "Choose What You Pay: Lesbian Space Princess", + "output": "lesbian space princess" + }, + { + "input": "Kokomo City + Director Q&A", + "output": "kokomo city" + }, + { + "input": "Late-Night Preview: The Serpent's Skin", + "output": "serpents skin" + }, + { + "input": "Pink Narcissus (4K Restoration) + Short Intro", + "output": "pink narcissus" + }, + { + "input": "Preview: The Serpent's Skin + Q&A", + "output": "serpents skin" + }, + { + "input": "Rosebush Pruning", + "output": "rosebush pruning" + }, + { + "input": "Sapphic Space", + "output": "space" + }, + { + "input": "Sneak Peek 2.0: Fucktoys + Q&A", + "output": "fucktoys" + }, + { + "input": "Spectra: Pride Month", + "output": "spectra pride month" + }, + { + "input": "The + Short Films Fundraiser (Choose What You Pay)", + "output": "the" + }, + { + "input": "The King's Birthday: Long Live the Drag King", + "output": "kings long live the drag king" + }, + { + "input": "Tomorrow's Too Late - Trans Documentary", + "output": "tomorrows too late" + }, + { + "input": "UK Premiere: Cramps! A Period Piece", + "output": "cramps a period piece" + }, + { + "input": "Cine-real presents: Jaws", + "output": "jaws" + }, + { + "input": "Glastonbury the Movie - 30th Anniversary Cut + Q&A", + "output": "glastonbury the movie in flashback" + }, + { + "input": "Hedwig and the Angry Inch Singalong with Rebelle Voices!", + "output": "hedwig the angry inch" + }, + { + "input": "Hotel Transylvania + Origami Workshop", + "output": "hotel transylvania" + }, + { + "input": "Pitchblack Playback: Joni Mitchell 'Blue' (55th Anniversary)", + "output": "joni mitchell blue" + }, + { + "input": "Girlfriends + Q&A", + "output": "girlfriends" + }, + { + "input": "Mystery of the First Temple", + "output": "mystery of the first temple" + }, + { + "input": "Salome by André Antonio + Intro by TGirlsOnFilm", + "output": "salome by andre antonio" + }, + { + "input": "Salome by Teo Hernández + Intro by Lola Lemke", + "output": "salome by teo hernandez" + }, + { + "input": "Strictly Ballroom", + "output": "strictly ballroom" + }, + { + "input": "Video Bazaar presents: Last Summer", + "output": "last summer" + }, + { + "input": "Protest & Recognition In Queer Islington: Film | Framed & Reframed Youth", + "output": "protest recognition in queer islington film" + }, + { + "input": "Protest & Recognition In Queer Islington: Selection of experimental films", + "output": "protest recognition in queer islington selection of experimental films" + }, + { + "input": "Disappearing Images (1): Alya Al-Sultani / Fatima Lahham / nunez (trio) | Kenichi Iwasa / Regan Bowering / Harry Murdoch (trio)", + "output": "disappearing images (1) alya alsultani" + }, + { + "input": "Disappearing Images (2): Open Secret | bod [包家巷] | Daniel Gatenio", + "output": "disappearing images (2) open secret" + }, + { + "input": "Disappearing Images (3): Mark Leckey | Klein | R.I.P. Germain | 54 the Gate", + "output": "disappearing images (3) mark leckey" + }, + { + "input": "Disappearing Images (4): Existers", + "output": "disappearing images (4) existers" + }, + { + "input": "Disappearing Images (5): Charlie Osborne | Richard Layzell: La Busqueda | Ship Sket", + "output": "disappearing images (5) charlie osborne" + }, + { + "input": "Disappearing Images (6.2): Plastique Fantastique with dove / Christine Kirubi + more TBA", + "output": "disappearing images (6 2) plastique fantastique with dove" + }, + { + "input": "Disappearing Images (7): Capital City | Angusraze", + "output": "disappearing images (7) capital city" + }, + { + "input": "Sonny Rollins Beyond the Notes", + "output": "sonny rollins beyond the notes" + }, + { + "input": "CINEMA CLUB - PORTRAIT OF A LADY ON FIRE", + "output": "portrait of a lady on fire" } ] diff --git a/sources/thecliq.app-/find-events.js b/sources/thecliq.app-/find-events.js index bf98ca41..86e47794 100644 --- a/sources/thecliq.app-/find-events.js +++ b/sources/thecliq.app-/find-events.js @@ -85,6 +85,11 @@ async function findEvents(cinema) { const titleMatches = titleVenue && venueMatchesCinema(cinema, titleVenue, coordinates); + const isSocialOnly = event.description + .toLowerCase() + .includes("tickets are not included"); + if (isSocialOnly) continue; + if (locationMatches || titleMatches) { results.push(convertEvent(event, club)); }