From a98b69859c7dbd19ebc3476ca9d7cc4f349d56af Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Sat, 21 Jan 2017 20:29:31 +0100 Subject: [PATCH] Big Abstraction for IMDBWatchlist -> RSSImport (With a test) --- .../Files/imdb_watchlist.xml | 1760 +++++++++++++++++ .../IndexerTests/BasicRssParserFixture.cs | 1 + .../NetImport/RSSImportFixture.cs | 34 + .../NzbDrone.Core.Test.csproj | 4 + .../Migration/119_create_netimport_table.cs | 1 - .../NetImport/IMDbWatchList/IMDbWatchList.cs | 36 - .../IMDbWatchList/IMDbWatchListParser.cs | 57 - src/NzbDrone.Core/NetImport/INetImport.cs | 1 - src/NzbDrone.Core/NetImport/NetImportBase.cs | 4 - .../NetImport/NetImportDefinition.cs | 2 - .../IMDbWatchListAPI.cs | 2 +- .../IMDbWatchListProxy.cs | 6 +- .../NetImport/RSSImport/RSSImport.cs | 52 + .../NetImport/RSSImport/RSSImportParser.cs | 236 +++ .../RSSImportRequestGenerator.cs} | 6 +- .../RSSImportSettings.cs} | 8 +- src/NzbDrone.Core/NzbDrone.Core.csproj | 12 +- 17 files changed, 2104 insertions(+), 118 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Files/imdb_watchlist.xml create mode 100644 src/NzbDrone.Core.Test/NetImport/RSSImportFixture.cs delete mode 100644 src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchList.cs delete mode 100644 src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListParser.cs rename src/NzbDrone.Core/NetImport/{IMDbWatchList => RSSImport}/IMDbWatchListAPI.cs (96%) rename src/NzbDrone.Core/NetImport/{IMDbWatchList => RSSImport}/IMDbWatchListProxy.cs (92%) create mode 100644 src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs create mode 100644 src/NzbDrone.Core/NetImport/RSSImport/RSSImportParser.cs rename src/NzbDrone.Core/NetImport/{IMDbWatchList/IMDbWatchListRequestGenerator.cs => RSSImport/RSSImportRequestGenerator.cs} (82%) rename src/NzbDrone.Core/NetImport/{IMDbWatchList/IMDbWatchListSettings.cs => RSSImport/RSSImportSettings.cs} (68%) diff --git a/src/NzbDrone.Core.Test/Files/imdb_watchlist.xml b/src/NzbDrone.Core.Test/Files/imdb_watchlist.xml new file mode 100644 index 000000000..b49485a6c --- /dev/null +++ b/src/NzbDrone.Core.Test/Files/imdb_watchlist.xml @@ -0,0 +1,1760 @@ + + + + Movie Watchlist + http://www.imdb.com/list/ls005547488/ + + Fri, 15 Jul 2011 05:14:06 GMT + Tue, 25 Mar 2014 02:22:29 GMT + + Tue, 25 Mar 2014 02:22:29 GMT + Think Like a Man Too (2014) + http://www.imdb.com/title/tt2239832/ + http://www.imdb.com/title/tt2239832/ + + + + Tue, 25 Mar 2014 00:30:49 GMT + The Machine (2013) + http://www.imdb.com/title/tt2317225/ + http://www.imdb.com/title/tt2317225/ + + + + Sun, 23 Mar 2014 07:51:40 GMT + The Great Beauty (2013) + http://www.imdb.com/title/tt2358891/ + http://www.imdb.com/title/tt2358891/ + + + + Sun, 23 Mar 2014 07:51:03 GMT + A Touch of Sin (2013) + http://www.imdb.com/title/tt2852400/ + http://www.imdb.com/title/tt2852400/ + + + + Sun, 23 Mar 2014 07:49:12 GMT + All Is Lost (2013) + http://www.imdb.com/title/tt2017038/ + http://www.imdb.com/title/tt2017038/ + + + + Sat, 22 Mar 2014 05:07:32 GMT + Nymphomaniac: Vol. II (2013) + http://www.imdb.com/title/tt2382009/ + http://www.imdb.com/title/tt2382009/ + + + + Sat, 22 Mar 2014 05:07:18 GMT + The Maze Runner (2014) + http://www.imdb.com/title/tt1790864/ + http://www.imdb.com/title/tt1790864/ + + + + Thu, 16 Jan 2014 04:57:39 GMT + Winter's Tale (2014) + http://www.imdb.com/title/tt1837709/ + http://www.imdb.com/title/tt1837709/ + + + + Thu, 16 Jan 2014 04:50:58 GMT + Love at First Sight (2010 Short Film) + http://www.imdb.com/title/tt1735878/ + http://www.imdb.com/title/tt1735878/ + + + + Thu, 16 Jan 2014 04:47:51 GMT + Run & Jump (2013) + http://www.imdb.com/title/tt2343158/ + http://www.imdb.com/title/tt2343158/ + + + + Thu, 16 Jan 2014 04:45:23 GMT + The Railway Man (2013) + http://www.imdb.com/title/tt2058107/ + http://www.imdb.com/title/tt2058107/ + + + + Thu, 16 Jan 2014 04:41:47 GMT + Welcome to the Jungle (2013) + http://www.imdb.com/title/tt2193265/ + http://www.imdb.com/title/tt2193265/ + + + + Thu, 16 Jan 2014 04:38:26 GMT + Le Week-End (2013) + http://www.imdb.com/title/tt2392326/ + http://www.imdb.com/title/tt2392326/ + + + + Thu, 16 Jan 2014 04:31:57 GMT + Labor Day (2013) + http://www.imdb.com/title/tt1967545/ + http://www.imdb.com/title/tt1967545/ + + + + Thu, 16 Jan 2014 04:05:40 GMT + Grand Piano (2013) + http://www.imdb.com/title/tt2039345/ + http://www.imdb.com/title/tt2039345/ + + + + Thu, 16 Jan 2014 04:05:05 GMT + Gloria (2013) + http://www.imdb.com/title/tt2425486/ + http://www.imdb.com/title/tt2425486/ + + + + Thu, 16 Jan 2014 04:04:21 GMT + Gimme Shelter (2013) + http://www.imdb.com/title/tt1657510/ + http://www.imdb.com/title/tt1657510/ + + + + Thu, 16 Jan 2014 04:01:29 GMT + The Past (2013) + http://www.imdb.com/title/tt2404461/ + http://www.imdb.com/title/tt2404461/ + + + + Thu, 16 Jan 2014 04:00:49 GMT + Fading Gigolo (2013) + http://www.imdb.com/title/tt2258345/ + http://www.imdb.com/title/tt2258345/ + + + + Thu, 16 Jan 2014 04:00:18 GMT + Edge of Tomorrow (2014) + http://www.imdb.com/title/tt1631867/ + http://www.imdb.com/title/tt1631867/ + + + + Thu, 16 Jan 2014 03:58:29 GMT + Earth to Echo (2014) + http://www.imdb.com/title/tt2183034/ + http://www.imdb.com/title/tt2183034/ + + + + Thu, 16 Jan 2014 03:56:30 GMT + Drew: The Man Behind the Poster (2013 Documentary) + http://www.imdb.com/title/tt1486843/ + http://www.imdb.com/title/tt1486843/ + + + + Thu, 16 Jan 2014 03:55:16 GMT + Doomsdays (2013) + http://www.imdb.com/title/tt2395146/ + http://www.imdb.com/title/tt2395146/ + + + + Thu, 16 Jan 2014 03:52:31 GMT + Design Is One: The Vignellis (2012 Documentary) + http://www.imdb.com/title/tt2610862/ + http://www.imdb.com/title/tt2610862/ + + + + Thu, 16 Jan 2014 03:51:37 GMT + Eastern Promises (2007) + http://www.imdb.com/title/tt0765443/ + http://www.imdb.com/title/tt0765443/ + + + + Thu, 16 Jan 2014 03:50:43 GMT + The Machinist (2004) + http://www.imdb.com/title/tt0361862/ + http://www.imdb.com/title/tt0361862/ + + + + Thu, 16 Jan 2014 03:49:51 GMT + eXistenZ (1999) + http://www.imdb.com/title/tt0120907/ + http://www.imdb.com/title/tt0120907/ + + + + Thu, 16 Jan 2014 03:49:26 GMT + Courage Under Fire (1996) + http://www.imdb.com/title/tt0115956/ + http://www.imdb.com/title/tt0115956/ + + + + Thu, 16 Jan 2014 03:45:04 GMT + Cosmopolis (2012) + http://www.imdb.com/title/tt1480656/ + http://www.imdb.com/title/tt1480656/ + + + + Thu, 16 Jan 2014 03:44:27 GMT + Concussion (2013) + http://www.imdb.com/title/tt2296697/ + http://www.imdb.com/title/tt2296697/ + + + + Thu, 16 Jan 2014 03:43:05 GMT + Closed Curtain (2013) + http://www.imdb.com/title/tt2626926/ + http://www.imdb.com/title/tt2626926/ + + + + Thu, 16 Jan 2014 03:42:25 GMT + Charlie Countryman (2013) + http://www.imdb.com/title/tt1196948/ + http://www.imdb.com/title/tt1196948/ + + + + Thu, 16 Jan 2014 03:41:49 GMT + Captain America: The Winter Soldier (2014) + http://www.imdb.com/title/tt1843866/ + http://www.imdb.com/title/tt1843866/ + + + + Thu, 16 Jan 2014 03:40:59 GMT + Blue Is the Warmest Color (2013) + http://www.imdb.com/title/tt2278871/ + http://www.imdb.com/title/tt2278871/ + + + + Thu, 16 Jan 2014 03:39:37 GMT + Blind Detective (2013) + http://www.imdb.com/title/tt2332707/ + http://www.imdb.com/title/tt2332707/ + + + + Thu, 16 Jan 2014 03:38:05 GMT + Blended (2014) + http://www.imdb.com/title/tt1086772/ + http://www.imdb.com/title/tt1086772/ + + + + Thu, 16 Jan 2014 03:37:38 GMT + Big Bad Wolves (2013) + http://www.imdb.com/title/tt2309224/ + http://www.imdb.com/title/tt2309224/ + + + + Thu, 16 Jan 2014 03:36:35 GMT + Barefoot (2014) + http://www.imdb.com/title/tt2355495/ + http://www.imdb.com/title/tt2355495/ + + + + Thu, 16 Jan 2014 03:35:13 GMT + Bad Words (2013) + http://www.imdb.com/title/tt2170299/ + http://www.imdb.com/title/tt2170299/ + + + + Thu, 16 Jan 2014 03:34:27 GMT + A Fantastic Fear of Everything (2012) + http://www.imdb.com/title/tt2006040/ + http://www.imdb.com/title/tt2006040/ + + + + Thu, 16 Jan 2014 01:21:34 GMT + A Field in England (2013) + http://www.imdb.com/title/tt2375574/ + http://www.imdb.com/title/tt2375574/ + + + + Thu, 16 Jan 2014 01:21:14 GMT + Odd Thomas (2013) + http://www.imdb.com/title/tt1767354/ + http://www.imdb.com/title/tt1767354/ + + + + Thu, 16 Jan 2014 01:14:36 GMT + The Pretty One (2013) + http://www.imdb.com/title/tt2140577/ + http://www.imdb.com/title/tt2140577/ + + + + Thu, 16 Jan 2014 01:08:37 GMT + Awful Nice (2013) + http://www.imdb.com/title/tt1414449/ + http://www.imdb.com/title/tt1414449/ + + + + Wed, 15 Jan 2014 23:10:34 GMT + 50 to 1 (2014) + http://www.imdb.com/title/tt1777595/ + http://www.imdb.com/title/tt1777595/ + + + + Wed, 15 Jan 2014 23:09:57 GMT + $50K and a Call Girl: A Love Story (2014) + http://www.imdb.com/title/tt2106284/ + http://www.imdb.com/title/tt2106284/ + + + + Fri, 10 Jan 2014 04:48:44 GMT + Interstellar (2014) + http://www.imdb.com/title/tt0816692/ + http://www.imdb.com/title/tt0816692/ + + + + Fri, 10 Jan 2014 04:44:18 GMT + 3 Days to Kill (2014) + http://www.imdb.com/title/tt2172934/ + http://www.imdb.com/title/tt2172934/ + + + + Fri, 10 Jan 2014 04:40:50 GMT + Back in the Day (2014) + http://www.imdb.com/title/tt2246887/ + http://www.imdb.com/title/tt2246887/ + + + + Fri, 10 Jan 2014 04:36:30 GMT + 300: Rise of an Empire (2014) + http://www.imdb.com/title/tt1253863/ + http://www.imdb.com/title/tt1253863/ + + + + Fri, 10 Jan 2014 04:28:56 GMT + Small Time (2014) + http://www.imdb.com/title/tt2310109/ + http://www.imdb.com/title/tt2310109/ + + + + Fri, 10 Jan 2014 04:24:20 GMT + The Grand Budapest Hotel (2014) + http://www.imdb.com/title/tt2278388/ + http://www.imdb.com/title/tt2278388/ + + + + Fri, 10 Jan 2014 04:10:34 GMT + Dumbbells (2014) + http://www.imdb.com/title/tt1978428/ + http://www.imdb.com/title/tt1978428/ + + + + Fri, 10 Jan 2014 04:05:22 GMT + Dawn of the Planet of the Apes (2014) + http://www.imdb.com/title/tt2103281/ + http://www.imdb.com/title/tt2103281/ + + + + Fri, 22 Nov 2013 02:30:55 GMT + Beyond Outrage (2012) + http://www.imdb.com/title/tt1724962/ + http://www.imdb.com/title/tt1724962/ + + + + Fri, 22 Nov 2013 02:30:06 GMT + Belle (2013) + http://www.imdb.com/title/tt2404181/ + http://www.imdb.com/title/tt2404181/ + + + + Fri, 22 Nov 2013 02:29:41 GMT + A Simple Plan (1998) + http://www.imdb.com/title/tt0120324/ + http://www.imdb.com/title/tt0120324/ + + + + Fri, 22 Nov 2013 02:29:11 GMT + Approved for Adoption (2012) + http://www.imdb.com/title/tt1621766/ + http://www.imdb.com/title/tt1621766/ + + + + Fri, 22 Nov 2013 02:28:37 GMT + A Fierce Green Fire (2012 Documentary) + http://www.imdb.com/title/tt1539489/ + http://www.imdb.com/title/tt1539489/ + + + + Fri, 22 Nov 2013 02:28:01 GMT + Mother of George (2013) + http://www.imdb.com/title/tt2094890/ + http://www.imdb.com/title/tt2094890/ + + + + Tue, 20 Aug 2013 02:45:42 GMT + What Maisie Knew (2012) + http://www.imdb.com/title/tt1932767/ + http://www.imdb.com/title/tt1932767/ + + + + Tue, 20 Aug 2013 02:45:22 GMT + We're the Millers (2013) + http://www.imdb.com/title/tt1723121/ + http://www.imdb.com/title/tt1723121/ + + + + Tue, 20 Aug 2013 02:44:53 GMT + Visitors (2013 Documentary) + http://www.imdb.com/title/tt2936174/ + http://www.imdb.com/title/tt2936174/ + + + + Tue, 20 Aug 2013 02:43:58 GMT + Twenty Feet from Stardom (2013 Documentary) + http://www.imdb.com/title/tt2396566/ + http://www.imdb.com/title/tt2396566/ + + + + Tue, 20 Aug 2013 02:43:40 GMT + Trance (2013) + http://www.imdb.com/title/tt1924429/ + http://www.imdb.com/title/tt1924429/ + + + + Tue, 20 Aug 2013 02:42:19 GMT + This Is Martin Bonner (2013) + http://www.imdb.com/title/tt1798291/ + http://www.imdb.com/title/tt1798291/ + + + + Tue, 20 Aug 2013 02:41:50 GMT + The Purge (2013) + http://www.imdb.com/title/tt2184339/ + http://www.imdb.com/title/tt2184339/ + + + + Tue, 20 Aug 2013 02:41:27 GMT + The Place Beyond the Pines (2012) + http://www.imdb.com/title/tt1817273/ + http://www.imdb.com/title/tt1817273/ + + + + Tue, 20 Aug 2013 02:41:08 GMT + The Pervert's Guide to Ideology (2012 Documentary) + http://www.imdb.com/title/tt2152198/ + http://www.imdb.com/title/tt2152198/ + + + + Tue, 20 Aug 2013 02:40:36 GMT + The Monuments Men (2014) + http://www.imdb.com/title/tt2177771/ + http://www.imdb.com/title/tt2177771/ + + + + Tue, 20 Aug 2013 02:40:09 GMT + The Kids Are All Right (2010) + http://www.imdb.com/title/tt0842926/ + http://www.imdb.com/title/tt0842926/ + + + + Tue, 20 Aug 2013 02:39:46 GMT + The Internship (2013) + http://www.imdb.com/title/tt2234155/ + http://www.imdb.com/title/tt2234155/ + + + + Tue, 20 Aug 2013 02:39:26 GMT + The Incredible Burt Wonderstone (2013) + http://www.imdb.com/title/tt0790628/ + http://www.imdb.com/title/tt0790628/ + + + + Tue, 20 Aug 2013 02:39:03 GMT + The Company You Keep (2012) + http://www.imdb.com/title/tt1381404/ + http://www.imdb.com/title/tt1381404/ + + + + Tue, 20 Aug 2013 02:38:44 GMT + The Boxtrolls (2014) + http://www.imdb.com/title/tt0787474/ + http://www.imdb.com/title/tt0787474/ + + + + Tue, 20 Aug 2013 02:37:58 GMT + The Artist and the Model (2012) + http://www.imdb.com/title/tt1990217/ + http://www.imdb.com/title/tt1990217/ + + + + Tue, 20 Aug 2013 02:37:34 GMT + Spark: A Burning Man Story (2013 Documentary) + http://www.imdb.com/title/tt2554648/ + http://www.imdb.com/title/tt2554648/ + + + + Tue, 20 Aug 2013 02:36:42 GMT + Smash & Grab: The Story of the Pink Panthers (2013 Documentary) + http://www.imdb.com/title/tt2250032/ + http://www.imdb.com/title/tt2250032/ + + + + Tue, 20 Aug 2013 02:36:16 GMT + A Single Shot (2013) + http://www.imdb.com/title/tt1540741/ + http://www.imdb.com/title/tt1540741/ + + + + Tue, 20 Aug 2013 02:35:49 GMT + Side Effects (2013) + http://www.imdb.com/title/tt2053463/ + http://www.imdb.com/title/tt2053463/ + + + + Tue, 20 Aug 2013 02:34:43 GMT + Paradise (2013) + http://www.imdb.com/title/tt1262990/ + http://www.imdb.com/title/tt1262990/ + + + + Tue, 20 Aug 2013 02:34:00 GMT + Paperman (2012 Short Film) + http://www.imdb.com/title/tt2388725/ + http://www.imdb.com/title/tt2388725/ + + + + Tue, 20 Aug 2013 02:33:23 GMT + Once (2007) + http://www.imdb.com/title/tt0907657/ + http://www.imdb.com/title/tt0907657/ + + + + Tue, 20 Aug 2013 02:32:30 GMT + Mud (2012) + http://www.imdb.com/title/tt1935179/ + http://www.imdb.com/title/tt1935179/ + + + + Tue, 20 Aug 2013 02:31:52 GMT + Much Ado About Nothing (2012) + http://www.imdb.com/title/tt2094064/ + http://www.imdb.com/title/tt2094064/ + + + + Tue, 20 Aug 2013 02:31:32 GMT + Mama (2013) + http://www.imdb.com/title/tt2023587/ + http://www.imdb.com/title/tt2023587/ + + + + Tue, 20 Aug 2013 02:30:22 GMT + Ip Man: The Final Fight (2013) + http://www.imdb.com/title/tt2495118/ + http://www.imdb.com/title/tt2495118/ + + + + Tue, 20 Aug 2013 02:29:58 GMT + Intolerance: Love's Struggle Throughout the Ages (1916) + http://www.imdb.com/title/tt0006864/ + http://www.imdb.com/title/tt0006864/ + + + + Tue, 20 Aug 2013 02:29:26 GMT + Instructions Not Included (2013) + http://www.imdb.com/title/tt2378281/ + http://www.imdb.com/title/tt2378281/ + + + + Tue, 20 Aug 2013 02:29:02 GMT + Insidious: Chapter 2 (2013) + http://www.imdb.com/title/tt2226417/ + http://www.imdb.com/title/tt2226417/ + + + + Tue, 20 Aug 2013 02:27:50 GMT + Inequality for All (2013 Documentary) + http://www.imdb.com/title/tt2215151/ + http://www.imdb.com/title/tt2215151/ + + + + Tue, 20 Aug 2013 02:27:28 GMT + Her (2013) + http://www.imdb.com/title/tt1798709/ + http://www.imdb.com/title/tt1798709/ + + + + Tue, 20 Aug 2013 02:02:50 GMT + The Gatekeepers (2012 Documentary) + http://www.imdb.com/title/tt2309788/ + http://www.imdb.com/title/tt2309788/ + + + + Tue, 20 Aug 2013 02:02:32 GMT + Greetings from Tim Buckley (2012) + http://www.imdb.com/title/tt1823125/ + http://www.imdb.com/title/tt1823125/ + + + + Tue, 20 Aug 2013 02:02:16 GMT + Good Ol' Freda (2013 Documentary) + http://www.imdb.com/title/tt2505938/ + http://www.imdb.com/title/tt2505938/ + + + + Tue, 20 Aug 2013 02:01:56 GMT + Standing Up (2013) + http://www.imdb.com/title/tt1905042/ + http://www.imdb.com/title/tt1905042/ + + + + Tue, 20 Aug 2013 02:01:35 GMT + Gimme the Loot (2012) + http://www.imdb.com/title/tt2139919/ + http://www.imdb.com/title/tt2139919/ + + + + Tue, 20 Aug 2013 01:55:45 GMT + Frozen (2013) + http://www.imdb.com/title/tt2294629/ + http://www.imdb.com/title/tt2294629/ + + + + Tue, 20 Aug 2013 01:54:33 GMT + Enough Said (2013) + http://www.imdb.com/title/tt2390361/ + http://www.imdb.com/title/tt2390361/ + + + + Tue, 20 Aug 2013 01:53:53 GMT + Disconnect (2012) + http://www.imdb.com/title/tt1433811/ + http://www.imdb.com/title/tt1433811/ + + + + Tue, 20 Aug 2013 01:53:18 GMT + The Seventh Dwarf (2014) + http://www.imdb.com/title/tt2914892/ + http://www.imdb.com/title/tt2914892/ + + + + Tue, 20 Aug 2013 01:52:48 GMT + Delicatessen (1991) + http://www.imdb.com/title/tt0101700/ + http://www.imdb.com/title/tt0101700/ + + + + Tue, 20 Aug 2013 01:52:21 GMT + Cold Comes the Night (2013) + http://www.imdb.com/title/tt2511428/ + http://www.imdb.com/title/tt2511428/ + + + + Tue, 20 Aug 2013 01:51:51 GMT + CBGB (2013) + http://www.imdb.com/title/tt1786751/ + http://www.imdb.com/title/tt1786751/ + + + + Tue, 20 Aug 2013 01:51:25 GMT + C.O.G. (2013) + http://www.imdb.com/title/tt1650393/ + http://www.imdb.com/title/tt1650393/ + + + + Tue, 20 Aug 2013 01:50:38 GMT + Beyond the Hills (2012) + http://www.imdb.com/title/tt2258281/ + http://www.imdb.com/title/tt2258281/ + + + + Tue, 20 Aug 2013 01:49:52 GMT + Bears (2014 Documentary) + http://www.imdb.com/title/tt2458776/ + http://www.imdb.com/title/tt2458776/ + + + + Tue, 20 Aug 2013 01:47:45 GMT + A Teacher (2013) + http://www.imdb.com/title/tt2201548/ + http://www.imdb.com/title/tt2201548/ + + + + Tue, 20 Aug 2013 01:37:42 GMT + At Any Price (2012) + http://www.imdb.com/title/tt1937449/ + http://www.imdb.com/title/tt1937449/ + + + + Tue, 20 Aug 2013 01:37:18 GMT + A Strange Brand of Happy (2013) + http://www.imdb.com/title/tt2014168/ + http://www.imdb.com/title/tt2014168/ + + + + Tue, 20 Aug 2013 01:36:35 GMT + American Milkshake (2013) + http://www.imdb.com/title/tt2254364/ + http://www.imdb.com/title/tt2254364/ + + + + Tue, 20 Aug 2013 01:36:14 GMT + American Hustle (2013) + http://www.imdb.com/title/tt1800241/ + http://www.imdb.com/title/tt1800241/ + + + + Tue, 20 Aug 2013 01:33:58 GMT + Airplane! (1980) + http://www.imdb.com/title/tt0080339/ + http://www.imdb.com/title/tt0080339/ + + + + Tue, 20 Aug 2013 01:33:27 GMT + A.C.O.D. (2013) + http://www.imdb.com/title/tt1311060/ + http://www.imdb.com/title/tt1311060/ + + + + Tue, 20 Aug 2013 01:33:07 GMT + 12 O'Clock Boys (2013 Documentary) + http://www.imdb.com/title/tt2420006/ + http://www.imdb.com/title/tt2420006/ + + + + Tue, 20 Aug 2013 01:31:45 GMT + Unfinished Song (2012) + http://www.imdb.com/title/tt1047011/ + http://www.imdb.com/title/tt1047011/ + + + + Tue, 20 Aug 2013 01:31:25 GMT + The Sapphires (2012) + http://www.imdb.com/title/tt1673697/ + http://www.imdb.com/title/tt1673697/ + + + + Tue, 20 Aug 2013 01:30:59 GMT + Stories We Tell (2012 Documentary) + http://www.imdb.com/title/tt2366450/ + http://www.imdb.com/title/tt2366450/ + + + + Tue, 20 Aug 2013 01:30:29 GMT + Morning (2010) + http://www.imdb.com/title/tt1320103/ + http://www.imdb.com/title/tt1320103/ + + + + Tue, 20 Aug 2013 01:28:57 GMT + Kon-Tiki (2012) + http://www.imdb.com/title/tt1613750/ + http://www.imdb.com/title/tt1613750/ + + + + Tue, 20 Aug 2013 01:27:42 GMT + Kelly's Heroes (1970) + http://www.imdb.com/title/tt0065938/ + http://www.imdb.com/title/tt0065938/ + + + + Tue, 20 Aug 2013 01:20:13 GMT + Il Futuro (2013) + http://www.imdb.com/title/tt1992156/ + http://www.imdb.com/title/tt1992156/ + + + + Tue, 20 Aug 2013 01:18:48 GMT + Dear Zachary: A Letter to a Son About His Father (2008 Documentary) + http://www.imdb.com/title/tt1152758/ + http://www.imdb.com/title/tt1152758/ + + + + Tue, 20 Aug 2013 01:17:34 GMT + August: Osage County (2013) + http://www.imdb.com/title/tt1322269/ + http://www.imdb.com/title/tt1322269/ + + + + Tue, 20 Aug 2013 01:17:02 GMT + A Thousand Clowns (1965) + http://www.imdb.com/title/tt0059798/ + http://www.imdb.com/title/tt0059798/ + + + + Fri, 16 Aug 2013 05:39:41 GMT + The Naked Gun 2½: The Smell of Fear (1991) + http://www.imdb.com/title/tt0102510/ + http://www.imdb.com/title/tt0102510/ + + + + Fri, 16 Aug 2013 02:11:27 GMT + Blazing Saddles (1974) + http://www.imdb.com/title/tt0071230/ + http://www.imdb.com/title/tt0071230/ + + + + Wed, 14 Aug 2013 23:11:34 GMT + Super High Me (2007 Documentary) + http://www.imdb.com/title/tt1111833/ + http://www.imdb.com/title/tt1111833/ + + + + Fri, 26 Jul 2013 06:26:43 GMT + I Am Love (2009) + http://www.imdb.com/title/tt1226236/ + http://www.imdb.com/title/tt1226236/ + + + + Fri, 26 Jul 2013 06:26:20 GMT + The Wind Rises (2013) + http://www.imdb.com/title/tt2013293/ + http://www.imdb.com/title/tt2013293/ + + + + Fri, 26 Jul 2013 06:25:56 GMT + Melancholia (2011) + http://www.imdb.com/title/tt1527186/ + http://www.imdb.com/title/tt1527186/ + + + + Fri, 26 Jul 2013 06:14:53 GMT + The Patience Stone (2012) + http://www.imdb.com/title/tt1638353/ + http://www.imdb.com/title/tt1638353/ + + + + Fri, 26 Jul 2013 06:12:55 GMT + The Hunger Games (2012) + http://www.imdb.com/title/tt1392170/ + http://www.imdb.com/title/tt1392170/ + + + + Fri, 26 Jul 2013 06:10:37 GMT + Salinger (2013 Documentary) + http://www.imdb.com/title/tt1596753/ + http://www.imdb.com/title/tt1596753/ + + + + Fri, 26 Jul 2013 06:09:51 GMT + 47 Ronin (2013) + http://www.imdb.com/title/tt1335975/ + http://www.imdb.com/title/tt1335975/ + + + + Fri, 26 Jul 2013 06:06:53 GMT + Kick-Ass 2 (2013) + http://www.imdb.com/title/tt1650554/ + http://www.imdb.com/title/tt1650554/ + + + + Fri, 26 Jul 2013 06:05:54 GMT + Blackfish (2013 Documentary) + http://www.imdb.com/title/tt2545118/ + http://www.imdb.com/title/tt2545118/ + + + + Fri, 26 Jul 2013 06:05:32 GMT + Cockneys vs Zombies (2012) + http://www.imdb.com/title/tt1362058/ + http://www.imdb.com/title/tt1362058/ + + + + Fri, 26 Jul 2013 06:05:11 GMT + Blue Exorcist: The Movie (2012) + http://www.imdb.com/title/tt3028018/ + http://www.imdb.com/title/tt3028018/ + + + + Fri, 26 Jul 2013 06:04:31 GMT + Computer Chess (2013) + http://www.imdb.com/title/tt2007360/ + http://www.imdb.com/title/tt2007360/ + + + + Fri, 26 Jul 2013 06:03:22 GMT + Girl Most Likely (2012) + http://www.imdb.com/title/tt1698648/ + http://www.imdb.com/title/tt1698648/ + + + + Fri, 26 Jul 2013 05:31:00 GMT + Frankenweenie (2012) + http://www.imdb.com/title/tt1142977/ + http://www.imdb.com/title/tt1142977/ + + + + Thu, 18 Jul 2013 07:41:08 GMT + Nowhere Boy (2009) + http://www.imdb.com/title/tt1266029/ + http://www.imdb.com/title/tt1266029/ + + + + Thu, 18 Jul 2013 07:40:41 GMT + Amistad (1997) + http://www.imdb.com/title/tt0118607/ + http://www.imdb.com/title/tt0118607/ + + + + Thu, 18 Jul 2013 07:40:19 GMT + Angus, Thongs and Perfect Snogging (2008) + http://www.imdb.com/title/tt0963743/ + http://www.imdb.com/title/tt0963743/ + + + + Thu, 18 Jul 2013 07:31:50 GMT + Year One (2009) + http://www.imdb.com/title/tt1045778/ + http://www.imdb.com/title/tt1045778/ + + + + Thu, 18 Jul 2013 07:31:23 GMT + RocknRolla (2008) + http://www.imdb.com/title/tt1032755/ + http://www.imdb.com/title/tt1032755/ + + + + Thu, 18 Jul 2013 07:31:07 GMT + World War Z (2013) + http://www.imdb.com/title/tt0816711/ + http://www.imdb.com/title/tt0816711/ + + + + Thu, 18 Jul 2013 07:30:27 GMT + Welcome to the Punch (2013) + http://www.imdb.com/title/tt1684233/ + http://www.imdb.com/title/tt1684233/ + + + + Thu, 18 Jul 2013 07:30:01 GMT + Ways to Live Forever (2010) + http://www.imdb.com/title/tt1446208/ + http://www.imdb.com/title/tt1446208/ + + + + Thu, 18 Jul 2013 07:29:43 GMT + The Rise (2012) + http://www.imdb.com/title/tt1981140/ + http://www.imdb.com/title/tt1981140/ + + + + Thu, 18 Jul 2013 07:29:19 GMT + Warm Bodies (2013) + http://www.imdb.com/title/tt1588173/ + http://www.imdb.com/title/tt1588173/ + + + + Thu, 18 Jul 2013 07:27:30 GMT + Violet & Daisy (2011) + http://www.imdb.com/title/tt1634136/ + http://www.imdb.com/title/tt1634136/ + + + + Thu, 18 Jul 2013 07:24:58 GMT + Tiger Eyes (2012) + http://www.imdb.com/title/tt1748260/ + http://www.imdb.com/title/tt1748260/ + + + + Thu, 18 Jul 2013 07:24:37 GMT + This Is the End (2013) + http://www.imdb.com/title/tt1245492/ + http://www.imdb.com/title/tt1245492/ + + + + Thu, 18 Jul 2013 07:24:19 GMT + The Wolf of Wall Street (2013) + http://www.imdb.com/title/tt0993846/ + http://www.imdb.com/title/tt0993846/ + + + + Thu, 18 Jul 2013 07:24:01 GMT + The Way Way Back (2013) + http://www.imdb.com/title/tt1727388/ + http://www.imdb.com/title/tt1727388/ + + + + Thu, 18 Jul 2013 07:20:15 GMT + The Time Being (2012) + http://www.imdb.com/title/tt1916749/ + http://www.imdb.com/title/tt1916749/ + + + + Thu, 18 Jul 2013 07:19:57 GMT + The Sweeney (2012) + http://www.imdb.com/title/tt0857190/ + http://www.imdb.com/title/tt0857190/ + + + + Thu, 18 Jul 2013 07:19:26 GMT + The Spectacular Now (2013) + http://www.imdb.com/title/tt1714206/ + http://www.imdb.com/title/tt1714206/ + + + + Thu, 18 Jul 2013 07:18:41 GMT + Thérèse (2012) + http://www.imdb.com/title/tt1654829/ + http://www.imdb.com/title/tt1654829/ + + + + Thu, 18 Jul 2013 07:18:17 GMT + The Mortal Instruments: City of Bones (2013) + http://www.imdb.com/title/tt1538403/ + http://www.imdb.com/title/tt1538403/ + + + + Thu, 18 Jul 2013 07:17:15 GMT + The Lifeguard (2013) + http://www.imdb.com/title/tt2265534/ + http://www.imdb.com/title/tt2265534/ + + + + Thu, 18 Jul 2013 07:16:58 GMT + The Lego Movie (2014) + http://www.imdb.com/title/tt1490017/ + http://www.imdb.com/title/tt1490017/ + + + + Thu, 18 Jul 2013 07:05:06 GMT + The Hobbit: The Battle of the Five Armies (2014) + http://www.imdb.com/title/tt2310332/ + http://www.imdb.com/title/tt2310332/ + + + + Thu, 18 Jul 2013 07:04:28 GMT + The Hobbit: The Desolation of Smaug (2013) + http://www.imdb.com/title/tt1170358/ + http://www.imdb.com/title/tt1170358/ + + + + Thu, 18 Jul 2013 07:02:54 GMT + Silver Linings Playbook (2012) + http://www.imdb.com/title/tt1045658/ + http://www.imdb.com/title/tt1045658/ + + + + Thu, 18 Jul 2013 07:02:22 GMT + The Heat (2013) + http://www.imdb.com/title/tt2404463/ + http://www.imdb.com/title/tt2404463/ + + + + Thu, 18 Jul 2013 06:59:40 GMT + The Frozen Ground (2013) + http://www.imdb.com/title/tt2005374/ + http://www.imdb.com/title/tt2005374/ + + + + Thu, 18 Jul 2013 06:59:19 GMT + The Fifth Estate (2013) + http://www.imdb.com/title/tt1837703/ + http://www.imdb.com/title/tt1837703/ + + + + Thu, 18 Jul 2013 06:58:18 GMT + The Counselor (2013) + http://www.imdb.com/title/tt2193215/ + http://www.imdb.com/title/tt2193215/ + + + + Thu, 18 Jul 2013 06:57:39 GMT + The Conjuring (2013) + http://www.imdb.com/title/tt1457767/ + http://www.imdb.com/title/tt1457767/ + + + + Thu, 18 Jul 2013 06:56:31 GMT + The Act of Killing (2012 Documentary) + http://www.imdb.com/title/tt2375605/ + http://www.imdb.com/title/tt2375605/ + + + + Thu, 18 Jul 2013 06:56:11 GMT + Thanks for Sharing (2012) + http://www.imdb.com/title/tt1932718/ + http://www.imdb.com/title/tt1932718/ + + + + Thu, 18 Jul 2013 06:55:46 GMT + Stuck in Love (2012) + http://www.imdb.com/title/tt2205697/ + http://www.imdb.com/title/tt2205697/ + + + + Thu, 18 Jul 2013 06:54:11 GMT + Some Girl(s) (2013) + http://www.imdb.com/title/tt2201221/ + http://www.imdb.com/title/tt2201221/ + + + + Thu, 18 Jul 2013 06:53:27 GMT + Snowpiercer (2013) + http://www.imdb.com/title/tt1706620/ + http://www.imdb.com/title/tt1706620/ + + + + Thu, 18 Jul 2013 06:51:58 GMT + Arbitrage (2012) + http://www.imdb.com/title/tt1764183/ + http://www.imdb.com/title/tt1764183/ + + + + Thu, 18 Jul 2013 06:39:19 GMT + Seventh Son (2014) + http://www.imdb.com/title/tt1121096/ + http://www.imdb.com/title/tt1121096/ + + + + Thu, 18 Jul 2013 06:38:57 GMT + Saving Mr. Banks (2013) + http://www.imdb.com/title/tt2140373/ + http://www.imdb.com/title/tt2140373/ + + + + Thu, 18 Jul 2013 06:38:14 GMT + Runner Runner (2013) + http://www.imdb.com/title/tt2364841/ + http://www.imdb.com/title/tt2364841/ + + + + Thu, 18 Jul 2013 06:37:47 GMT + Rigor Mortis (2013) + http://www.imdb.com/title/tt2771800/ + http://www.imdb.com/title/tt2771800/ + + + + Thu, 18 Jul 2013 06:37:24 GMT + Ride Along (2014) + http://www.imdb.com/title/tt1408253/ + http://www.imdb.com/title/tt1408253/ + + + + Thu, 18 Jul 2013 06:35:37 GMT + Rush (2013) + http://www.imdb.com/title/tt1979320/ + http://www.imdb.com/title/tt1979320/ + + + + Thu, 18 Jul 2013 06:35:07 GMT + Prisoners (2013) + http://www.imdb.com/title/tt1392214/ + http://www.imdb.com/title/tt1392214/ + + + + Thu, 18 Jul 2013 06:34:50 GMT + Prince Avalanche (2013) + http://www.imdb.com/title/tt2195548/ + http://www.imdb.com/title/tt2195548/ + + + + Thu, 18 Jul 2013 06:34:28 GMT + Populaire (2012) + http://www.imdb.com/title/tt2070776/ + http://www.imdb.com/title/tt2070776/ + + + + Thu, 18 Jul 2013 06:34:06 GMT + Pitch Perfect (2012) + http://www.imdb.com/title/tt1981677/ + http://www.imdb.com/title/tt1981677/ + + + + Thu, 18 Jul 2013 06:33:17 GMT + Percy Jackson: Sea of Monsters (2013) + http://www.imdb.com/title/tt1854564/ + http://www.imdb.com/title/tt1854564/ + + + + Thu, 18 Jul 2013 06:33:00 GMT + Percy Jackson & the Olympians: The Lightning Thief (2010) + http://www.imdb.com/title/tt0814255/ + http://www.imdb.com/title/tt0814255/ + + + + Thu, 18 Jul 2013 06:32:39 GMT + Pawn Shop Chronicles (2013) + http://www.imdb.com/title/tt1741243/ + http://www.imdb.com/title/tt1741243/ + + + + Thu, 18 Jul 2013 06:32:04 GMT + Pacific Rim (2013) + http://www.imdb.com/title/tt1663662/ + http://www.imdb.com/title/tt1663662/ + + + + Thu, 18 Jul 2013 06:31:41 GMT + Oz the Great and Powerful (2013) + http://www.imdb.com/title/tt1623205/ + http://www.imdb.com/title/tt1623205/ + + + + Thu, 18 Jul 2013 06:31:21 GMT + Out of the Furnace (2013) + http://www.imdb.com/title/tt1206543/ + http://www.imdb.com/title/tt1206543/ + + + + Thu, 18 Jul 2013 06:30:54 GMT + Anchorman: The Legend of Ron Burgundy (2004) + http://www.imdb.com/title/tt0357413/ + http://www.imdb.com/title/tt0357413/ + + + + Thu, 18 Jul 2013 06:29:59 GMT + Now You See Me (2013) + http://www.imdb.com/title/tt1670345/ + http://www.imdb.com/title/tt1670345/ + + + + Thu, 18 Jul 2013 06:29:33 GMT + No (2012) + http://www.imdb.com/title/tt2059255/ + http://www.imdb.com/title/tt2059255/ + + + + Thu, 18 Jul 2013 06:28:06 GMT + Monsters University (2013) + http://www.imdb.com/title/tt1453405/ + http://www.imdb.com/title/tt1453405/ + + + + Thu, 18 Jul 2013 06:26:52 GMT + Magic Magic (2013) + http://www.imdb.com/title/tt1929308/ + http://www.imdb.com/title/tt1929308/ + + + + Thu, 18 Jul 2013 06:25:38 GMT + Like Someone in Love (2012) + http://www.imdb.com/title/tt1843287/ + http://www.imdb.com/title/tt1843287/ + + + + Thu, 18 Jul 2013 06:24:48 GMT + Jug Face (2013) + http://www.imdb.com/title/tt2620736/ + http://www.imdb.com/title/tt2620736/ + + + + Thu, 18 Jul 2013 06:24:25 GMT + Inside Llewyn Davis (2013) + http://www.imdb.com/title/tt2042568/ + http://www.imdb.com/title/tt2042568/ + + + + Thu, 18 Jul 2013 06:23:39 GMT + I Give It a Year (2013) + http://www.imdb.com/title/tt2244901/ + http://www.imdb.com/title/tt2244901/ + + + + Thu, 18 Jul 2013 06:23:14 GMT + I Declare War (2012) + http://www.imdb.com/title/tt2133239/ + http://www.imdb.com/title/tt2133239/ + + + + Thu, 18 Jul 2013 06:22:51 GMT + How to Train Your Dragon 2 (2014) + http://www.imdb.com/title/tt1646971/ + http://www.imdb.com/title/tt1646971/ + + + + Thu, 18 Jul 2013 06:22:32 GMT + How to Make Money Selling Drugs (2012 Documentary) + http://www.imdb.com/title/tt1276962/ + http://www.imdb.com/title/tt1276962/ + + + + Thu, 18 Jul 2013 06:22:07 GMT + Hell Baby (2013) + http://www.imdb.com/title/tt2318527/ + http://www.imdb.com/title/tt2318527/ + + + + Thu, 18 Jul 2013 06:16:54 GMT + Hannah Arendt (2012) + http://www.imdb.com/title/tt1674773/ + http://www.imdb.com/title/tt1674773/ + + + + Thu, 18 Jul 2013 06:16:01 GMT + Gravity (2013) + http://www.imdb.com/title/tt1454468/ + http://www.imdb.com/title/tt1454468/ + + + + Thu, 18 Jul 2013 06:15:42 GMT + Getaway (2013) + http://www.imdb.com/title/tt2167202/ + http://www.imdb.com/title/tt2167202/ + + + + Thu, 18 Jul 2013 06:15:24 GMT + Generation Um... (2012) + http://www.imdb.com/title/tt1718158/ + http://www.imdb.com/title/tt1718158/ + + + + Thu, 18 Jul 2013 06:14:29 GMT + Fruitvale Station (2013) + http://www.imdb.com/title/tt2334649/ + http://www.imdb.com/title/tt2334649/ + + + + Thu, 18 Jul 2013 06:13:55 GMT + Free Birds (2013) + http://www.imdb.com/title/tt1621039/ + http://www.imdb.com/title/tt1621039/ + + + + Thu, 18 Jul 2013 06:13:32 GMT + Billy Elliot (2000) + http://www.imdb.com/title/tt0249462/ + http://www.imdb.com/title/tt0249462/ + + + + Thu, 18 Jul 2013 06:13:03 GMT + Filth (2013) + http://www.imdb.com/title/tt1450321/ + http://www.imdb.com/title/tt1450321/ + + + + Thu, 18 Jul 2013 06:12:44 GMT + Ferris Bueller's Day Off (1986) + http://www.imdb.com/title/tt0091042/ + http://www.imdb.com/title/tt0091042/ + + + + Thu, 18 Jul 2013 06:12:22 GMT + Fast & Furious 6 (2013) + http://www.imdb.com/title/tt1905041/ + http://www.imdb.com/title/tt1905041/ + + + + Thu, 18 Jul 2013 06:11:49 GMT + Extraction (2013) + http://www.imdb.com/title/tt2823574/ + http://www.imdb.com/title/tt2823574/ + + + + Thu, 18 Jul 2013 06:11:13 GMT + Europa Report (2013) + http://www.imdb.com/title/tt2051879/ + http://www.imdb.com/title/tt2051879/ + + + + Thu, 18 Jul 2013 06:10:52 GMT + Escape Plan (2013) + http://www.imdb.com/title/tt1211956/ + http://www.imdb.com/title/tt1211956/ + + + + Thu, 18 Jul 2013 06:10:30 GMT + Epic (2013) + http://www.imdb.com/title/tt0848537/ + http://www.imdb.com/title/tt0848537/ + + + + Thu, 18 Jul 2013 06:09:42 GMT + Elysium (2013) + http://www.imdb.com/title/tt1535108/ + http://www.imdb.com/title/tt1535108/ + + + + Thu, 18 Jul 2013 06:09:19 GMT + Drift (2013) + http://www.imdb.com/title/tt1714833/ + http://www.imdb.com/title/tt1714833/ + + + + Thu, 18 Jul 2013 06:08:49 GMT + Dragon (2011) + http://www.imdb.com/title/tt1718199/ + http://www.imdb.com/title/tt1718199/ + + + + Thu, 18 Jul 2013 06:08:46 GMT + Dragon (2011) + http://www.imdb.com/title/tt1718199/ + http://www.imdb.com/title/tt1718199/ + + + + Thu, 18 Jul 2013 06:07:34 GMT + Don Jon (2013) + http://www.imdb.com/title/tt2229499/ + http://www.imdb.com/title/tt2229499/ + + + + Thu, 18 Jul 2013 06:07:01 GMT + Despicable Me 2 (2013) + http://www.imdb.com/title/tt1690953/ + http://www.imdb.com/title/tt1690953/ + + + + Thu, 18 Jul 2013 05:55:51 GMT + All the Real Girls (2003) + http://www.imdb.com/title/tt0299458/ + http://www.imdb.com/title/tt0299458/ + + + + Thu, 18 Jul 2013 05:55:35 GMT + The Assassination of Jesse James by the Coward Robert Ford (2007) + http://www.imdb.com/title/tt0443680/ + http://www.imdb.com/title/tt0443680/ + + + + Thu, 18 Jul 2013 05:55:29 GMT + Lars and the Real Girl (2007) + http://www.imdb.com/title/tt0805564/ + http://www.imdb.com/title/tt0805564/ + + + + Thu, 18 Jul 2013 05:48:45 GMT + Cutie and the Boxer (2013 Documentary) + http://www.imdb.com/title/tt2355540/ + http://www.imdb.com/title/tt2355540/ + + + + Thu, 18 Jul 2013 05:48:23 GMT + Superbad (2007) + http://www.imdb.com/title/tt0829482/ + http://www.imdb.com/title/tt0829482/ + + + + Thu, 18 Jul 2013 05:48:03 GMT + Crystal Fairy & the Magical Cactus (2013) + http://www.imdb.com/title/tt2332579/ + http://www.imdb.com/title/tt2332579/ + + + + Thu, 18 Jul 2013 05:47:45 GMT + Cloudy with a Chance of Meatballs 2 (2013) + http://www.imdb.com/title/tt1985966/ + http://www.imdb.com/title/tt1985966/ + + + + Thu, 18 Jul 2013 05:47:26 GMT + Cloudy with a Chance of Meatballs (2009) + http://www.imdb.com/title/tt0844471/ + http://www.imdb.com/title/tt0844471/ + + + + Thu, 18 Jul 2013 05:47:03 GMT + Captain Phillips (2013) + http://www.imdb.com/title/tt1535109/ + http://www.imdb.com/title/tt1535109/ + + + + Thu, 18 Jul 2013 05:46:03 GMT + Byzantium (2012) + http://www.imdb.com/title/tt1531901/ + http://www.imdb.com/title/tt1531901/ + + + + Thu, 18 Jul 2013 05:45:36 GMT + Broken (2012) + http://www.imdb.com/title/tt1441940/ + http://www.imdb.com/title/tt1441940/ + + + + Thu, 18 Jul 2013 05:45:13 GMT + Blue Jasmine (2013) + http://www.imdb.com/title/tt2334873/ + http://www.imdb.com/title/tt2334873/ + + + + Thu, 18 Jul 2013 05:44:53 GMT + Before Midnight (2013) + http://www.imdb.com/title/tt2209418/ + http://www.imdb.com/title/tt2209418/ + + + + Thu, 18 Jul 2013 05:44:21 GMT + Dirty Pretty Things (2002) + http://www.imdb.com/title/tt0301199/ + http://www.imdb.com/title/tt0301199/ + + + + Thu, 18 Jul 2013 05:43:52 GMT + Inside Man (2006) + http://www.imdb.com/title/tt0454848/ + http://www.imdb.com/title/tt0454848/ + + + + Thu, 18 Jul 2013 05:43:40 GMT + About Time (2013) + http://www.imdb.com/title/tt2194499/ + http://www.imdb.com/title/tt2194499/ + + + + Thu, 18 Jul 2013 05:43:26 GMT + Adore (2013) + http://www.imdb.com/title/tt2103267/ + http://www.imdb.com/title/tt2103267/ + + + + Thu, 18 Jul 2013 05:43:07 GMT + After Earth (2013) + http://www.imdb.com/title/tt1815862/ + http://www.imdb.com/title/tt1815862/ + + + + Thu, 18 Jul 2013 05:42:45 GMT + The Kings of Summer (2013) + http://www.imdb.com/title/tt2179116/ + http://www.imdb.com/title/tt2179116/ + + + + Thu, 18 Jul 2013 05:42:37 GMT + Afternoon Delight (2013) + http://www.imdb.com/title/tt2312890/ + http://www.imdb.com/title/tt2312890/ + + + + Thu, 18 Jul 2013 05:42:29 GMT + Ain't Them Bodies Saints (2013) + http://www.imdb.com/title/tt2388637/ + http://www.imdb.com/title/tt2388637/ + + + + Thu, 18 Jul 2013 05:42:21 GMT + Alan Partridge (2013) + http://www.imdb.com/title/tt0469021/ + http://www.imdb.com/title/tt0469021/ + + + + Thu, 18 Jul 2013 05:42:12 GMT + And Now a Word from Our Sponsor (2013) + http://www.imdb.com/title/tt2094762/ + http://www.imdb.com/title/tt2094762/ + + + + diff --git a/src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs index b2819434d..802744c96 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs @@ -45,6 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests return new IndexerResponse(new IndexerRequest(httpRequest), httpResponse); } + [Test] public void should_handle_relative_url() { diff --git a/src/NzbDrone.Core.Test/NetImport/RSSImportFixture.cs b/src/NzbDrone.Core.Test/NetImport/RSSImportFixture.cs new file mode 100644 index 000000000..9eb154b0f --- /dev/null +++ b/src/NzbDrone.Core.Test/NetImport/RSSImportFixture.cs @@ -0,0 +1,34 @@ +using System.Linq; +using System.Text; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Common.Http; +using NzbDrone.Core.Indexers; +using NzbDrone.Core.NetImport; +using NzbDrone.Core.NetImport.RSSImport; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.NetImport +{ + public class RSSImportTest : CoreTest + { + private NetImportResponse CreateResponse(string url, string content) + { + var httpRequest = new HttpRequest(url); + var httpResponse = new HttpResponse(httpRequest, new HttpHeader(), Encoding.UTF8.GetBytes(content)); + + return new NetImportResponse(new NetImportRequest(httpRequest), httpResponse); + } + + + [Test] + public void should_handle_relative_url() + { + var xml = ReadAllText("Files/imdb_watchlist.xml"); + + var result = Subject.ParseResponse(CreateResponse("http://my.indexer.com/api?q=My+Favourite+Show", xml)); + + result.First().Title.Should().Be("Think Like a Man Too"); + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 70e548681..d65fed883 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -284,6 +284,7 @@ + @@ -409,6 +410,9 @@ sqlite3.dll Always + + Always + Always diff --git a/src/NzbDrone.Core/Datastore/Migration/119_create_netimport_table.cs b/src/NzbDrone.Core/Datastore/Migration/119_create_netimport_table.cs index 086464746..f324ee925 100644 --- a/src/NzbDrone.Core/Datastore/Migration/119_create_netimport_table.cs +++ b/src/NzbDrone.Core/Datastore/Migration/119_create_netimport_table.cs @@ -10,7 +10,6 @@ namespace NzbDrone.Core.Datastore.Migration { Create.TableForModel("NetImport") .WithColumn("Enabled").AsBoolean() - .WithColumn("ProfileId").AsInt32() .WithColumn("Name").AsString().Unique() .WithColumn("Implementation").AsString() .WithColumn("Settings").AsString().Nullable(); diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchList.cs b/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchList.cs deleted file mode 100644 index ed5c06da4..000000000 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchList.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; -using FluentValidation.Results; -using NLog; -using NzbDrone.Common.Http; -using NzbDrone.Core.Configuration; -using NzbDrone.Core.Indexers; -using NzbDrone.Core.Indexers.PassThePopcorn; -using NzbDrone.Core.Parser; -using NzbDrone.Core.Tv; - -namespace NzbDrone.Core.NetImport.IMDbWatchList -{ - public class IMDbWatchList : HttpNetImportBase - { - public override string Name => "IMDbWatchList"; - public override string Link => "http://rss.imdb.com/list/"; - public override int ProfileId => 1; - public override bool Enabled => true; - - public IMDbWatchList(IHttpClient httpClient, IConfigService configService, IParsingService parsingService, Logger logger) - : base(httpClient, configService, parsingService, logger) - { } - - public override INetImportRequestGenerator GetRequestGenerator() - { - return new IMDbWatchListRequestGenerator() { Settings = Settings }; - } - - public override IParseNetImportResponse GetParser() - { - return new IMDbWatchListParser(Settings); - } - } -} diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListParser.cs b/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListParser.cs deleted file mode 100644 index 20fb368ec..000000000 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListParser.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Newtonsoft.Json; -using NzbDrone.Core.NetImport.Exceptions; -using NzbDrone.Core.Tv; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace NzbDrone.Core.NetImport.IMDbWatchList -{ - public class IMDbWatchListParser : IParseNetImportResponse - { - private readonly IMDbWatchListSettings _settings; - - public IMDbWatchListParser(IMDbWatchListSettings settings) - { - _settings = settings; - } - - public IList ParseResponse(NetImportResponse netImportResponse) - { - var torrentInfos = new List(); - - if (netImportResponse.HttpResponse.StatusCode != HttpStatusCode.OK) - { - throw new NetImportException(netImportResponse, - "Unexpected response status {0} code from API request", - netImportResponse.HttpResponse.StatusCode); - } - - var jsonResponse = JsonConvert.DeserializeObject(netImportResponse.Content); - - var responseData = jsonResponse.Movie; - if (responseData == null) - { - throw new NetImportException(netImportResponse, - "This list has no movies"); - } - - foreach (var result in responseData) - { - var title = Parser.Parser.ParseMovieTitle(result.Title, false); - - torrentInfos.Add(new Movie() - { - Title = title.MovieTitle, - Year = title.Year, - ProfileId = _settings.ProfileId, - ImdbId = Parser.Parser.ParseImdbId(result.Link) - }); - } - - return torrentInfos.ToArray(); - } - } -} diff --git a/src/NzbDrone.Core/NetImport/INetImport.cs b/src/NzbDrone.Core/NetImport/INetImport.cs index 82ec79629..e32eb2ed9 100644 --- a/src/NzbDrone.Core/NetImport/INetImport.cs +++ b/src/NzbDrone.Core/NetImport/INetImport.cs @@ -8,7 +8,6 @@ namespace NzbDrone.Core.NetImport { public interface INetImport : IProvider { - string Link { get; } bool Enabled { get; } IList Fetch(); diff --git a/src/NzbDrone.Core/NetImport/NetImportBase.cs b/src/NzbDrone.Core/NetImport/NetImportBase.cs index 0f3f6fc0f..165cd7375 100644 --- a/src/NzbDrone.Core/NetImport/NetImportBase.cs +++ b/src/NzbDrone.Core/NetImport/NetImportBase.cs @@ -21,8 +21,6 @@ namespace NzbDrone.Core.NetImport protected readonly Logger _logger; public abstract string Name { get; } - public abstract string Link { get; } - public abstract int ProfileId { get; } public abstract bool Enabled { get; } @@ -46,8 +44,6 @@ namespace NzbDrone.Core.NetImport yield return new NetImportDefinition { Name = GetType().Name, - Link = Link, - ProfileId = ProfileId, Enabled = config.Validate().IsValid && Enabled, Implementation = GetType().Name, Settings = config diff --git a/src/NzbDrone.Core/NetImport/NetImportDefinition.cs b/src/NzbDrone.Core/NetImport/NetImportDefinition.cs index b4af0c4a2..fb2313353 100644 --- a/src/NzbDrone.Core/NetImport/NetImportDefinition.cs +++ b/src/NzbDrone.Core/NetImport/NetImportDefinition.cs @@ -4,8 +4,6 @@ namespace NzbDrone.Core.NetImport { public class NetImportDefinition : ProviderDefinition { - public string Link { get; set; } - public int ProfileId { get; set; } public bool Enabled { get; set; } public override bool Enable => Enabled; } diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListAPI.cs b/src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListAPI.cs similarity index 96% rename from src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListAPI.cs rename to src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListAPI.cs index 73570c897..ccc618e9c 100644 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListAPI.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListAPI.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Xml.Serialization; -namespace NzbDrone.Core.NetImport.IMDbWatchList +namespace NzbDrone.Core.NetImport.RSSImport { class IMDbWatchListAPI { diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListProxy.cs b/src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListProxy.cs similarity index 92% rename from src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListProxy.cs rename to src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListProxy.cs index 664919c52..0d46198f4 100644 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListProxy.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/IMDbWatchListProxy.cs @@ -8,12 +8,12 @@ using NzbDrone.Core.Exceptions; using RestSharp; using NzbDrone.Core.Rest; -namespace NzbDrone.Core.NetImport.IMDbWatchList +namespace NzbDrone.Core.NetImport.RSSImport { public interface IIMDbWatchListProxy { void ImportMovies(string url); - ValidationFailure Test(IMDbWatchListSettings settings); + ValidationFailure Test(RSSImportSettings settings); } public class IMDbWatchListProxy : IIMDbWatchListProxy @@ -60,7 +60,7 @@ namespace NzbDrone.Core.NetImport.IMDbWatchList } } - public ValidationFailure Test(IMDbWatchListSettings settings) + public ValidationFailure Test(RSSImportSettings settings) { try { diff --git a/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs new file mode 100644 index 000000000..a945e4b77 --- /dev/null +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using FluentValidation.Results; +using NLog; +using NzbDrone.Common.Http; +using NzbDrone.Core.Configuration; +using NzbDrone.Core.Indexers; +using NzbDrone.Core.Indexers.PassThePopcorn; +using NzbDrone.Core.Parser; +using NzbDrone.Core.ThingiProvider; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.NetImport.RSSImport +{ + public class RSSImport : HttpNetImportBase + { + public override string Name => "RSSList"; + public override bool Enabled => true; + + public RSSImport(IHttpClient httpClient, IConfigService configService, IParsingService parsingService, Logger logger) + : base(httpClient, configService, parsingService, logger) + { } + + public new virtual IEnumerable DefaultDefinitions + { + get + { + var config = (RSSImportSettings)new RSSImportSettings(); + config.Link = "https://rss.imdb.com/list/YOURLISTID"; + + yield return new NetImportDefinition + { + Name = GetType().Name, + Enabled = config.Validate().IsValid && Enabled, + Implementation = GetType().Name, + Settings = config + }; + } + } + + public override INetImportRequestGenerator GetRequestGenerator() + { + return new RSSImportRequestGenerator() { Settings = Settings }; + } + + public override IParseNetImportResponse GetParser() + { + return new RSSImportParser(Settings); + } + } +} diff --git a/src/NzbDrone.Core/NetImport/RSSImport/RSSImportParser.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportParser.cs new file mode 100644 index 000000000..f3244beec --- /dev/null +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportParser.cs @@ -0,0 +1,236 @@ +using Newtonsoft.Json; +using NzbDrone.Core.NetImport.Exceptions; +using NzbDrone.Core.Tv; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Linq; +using NLog; +using NzbDrone.Common.Extensions; +using NzbDrone.Common.Http; +using NzbDrone.Core.Indexers; +using NzbDrone.Core.Indexers.Exceptions; +using NzbDrone.Core.Parser.Model; + +namespace NzbDrone.Core.NetImport.RSSImport +{ + public class RSSImportParser : IParseNetImportResponse + { + private readonly RSSImportSettings _settings; + private NetImportResponse _importResponse; + private readonly Logger _logger; + + private static readonly Regex ReplaceEntities = new Regex("&[a-z]+;", RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public RSSImportParser(RSSImportSettings settings) + { + _settings = settings; + } + + public virtual IList ParseResponse(NetImportResponse importResponse) + { + _importResponse = importResponse; + + var movies = new List(); + + if (!PreProcess(importResponse)) + { + return movies; + } + + var document = LoadXmlDocument(importResponse); + var items = GetItems(document); + + foreach (var item in items) + { + try + { + var reportInfo = ProcessItem(item); + + movies.AddIfNotNull(reportInfo); + } + catch (Exception itemEx) + { + //itemEx.Data.Add("Item", item.Title()); + _logger.Error(itemEx, "An error occurred while processing feed item from " + importResponse.Request.Url); + } + } + + return movies; + } + + protected virtual XDocument LoadXmlDocument(NetImportResponse indexerResponse) + { + try + { + var content = indexerResponse.Content; + content = ReplaceEntities.Replace(content, ReplaceEntity); + + using (var xmlTextReader = XmlReader.Create(new StringReader(content), new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true })) + { + return XDocument.Load(xmlTextReader); + } + } + catch (XmlException ex) + { + var contentSample = indexerResponse.Content.Substring(0, Math.Min(indexerResponse.Content.Length, 512)); + _logger.Debug("Truncated response content (originally {0} characters): {1}", indexerResponse.Content.Length, contentSample); + + ex.Data.Add("ContentLength", indexerResponse.Content.Length); + ex.Data.Add("ContentSample", contentSample); + + throw; + } + } + + protected virtual string ReplaceEntity(Match match) + { + try + { + var character = WebUtility.HtmlDecode(match.Value); + return string.Concat("&#", (int)character[0], ";"); + } + catch + { + return match.Value; + } + } + + protected virtual Movie CreateNewMovie() + { + return new Movie(); + } + + protected virtual bool PreProcess(NetImportResponse indexerResponse) + { + if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) + { + throw new NetImportException(indexerResponse, "Indexer API call resulted in an unexpected StatusCode [{0}]", indexerResponse.HttpResponse.StatusCode); + } + + if (indexerResponse.HttpResponse.Headers.ContentType != null && indexerResponse.HttpResponse.Headers.ContentType.Contains("text/html") && + indexerResponse.HttpRequest.Headers.Accept != null && !indexerResponse.HttpRequest.Headers.Accept.Contains("text/html")) + { + throw new NetImportException(indexerResponse, "Indexer responded with html content. Site is likely blocked or unavailable."); + } + + return true; + } + + protected Movie ProcessItem(XElement item) + { + var releaseInfo = CreateNewMovie(); + + releaseInfo = ProcessItem(item, releaseInfo); + + //_logger.Trace("Parsed: {0}", releaseInfo.Title); + + return PostProcess(item, releaseInfo); + } + + protected virtual Movie ProcessItem(XElement item, Movie releaseInfo) + { + var result = Parser.Parser.ParseMovieTitle(GetTitle(item)); + + releaseInfo.Title = GetTitle(item); + + if (result != null) + { + releaseInfo.Title = result.MovieTitle; + releaseInfo.Year = result.Year; + releaseInfo.ImdbId = result.ImdbId; + } + + try + { + if (releaseInfo.ImdbId.IsNullOrWhiteSpace()) + { + releaseInfo.ImdbId = GetImdbId(item); + } + + } + catch (Exception) + { + _logger.Debug("Unable to extract Imdb Id :(."); + } + + return releaseInfo; + } + + protected virtual Movie PostProcess(XElement item, Movie releaseInfo) + { + return releaseInfo; + } + + protected virtual string GetTitle(XElement item) + { + return item.TryGetValue("title", "Unknown"); + } + + protected virtual DateTime GetPublishDate(XElement item) + { + var dateString = item.TryGetValue("pubDate"); + + if (dateString.IsNullOrWhiteSpace()) + { + throw new UnsupportedFeedException("Rss feed must have a pubDate element with a valid publish date."); + } + + return XElementExtensions.ParseDate(dateString); + } + + protected virtual string GetImdbId(XElement item) + { + var url = item.TryGetValue("link"); + if (url.IsNullOrWhiteSpace()) + { + return ""; + } + return Parser.Parser.ParseImdbId(url); + } + + protected IEnumerable GetItems(XDocument document) + { + var root = document.Root; + + if (root == null) + { + return Enumerable.Empty(); + } + + var channel = root.Element("channel"); + + if (channel == null) + { + return Enumerable.Empty(); + } + + return channel.Elements("item"); + } + + protected virtual string ParseUrl(string value) + { + if (value.IsNullOrWhiteSpace()) + { + return null; + } + + try + { + var url = _importResponse.HttpRequest.Url + new HttpUri(value); + + return url.FullUri; + } + catch (Exception ex) + { + _logger.Debug(ex, string.Format("Failed to parse Url {0}, ignoring.", value)); + return null; + } + } + } +} diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListRequestGenerator.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportRequestGenerator.cs similarity index 82% rename from src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListRequestGenerator.cs rename to src/NzbDrone.Core/NetImport/RSSImport/RSSImportRequestGenerator.cs index cfd92810b..a28068a07 100644 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListRequestGenerator.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportRequestGenerator.cs @@ -5,11 +5,11 @@ using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; using NzbDrone.Core.IndexerSearch.Definitions; -namespace NzbDrone.Core.NetImport.IMDbWatchList +namespace NzbDrone.Core.NetImport.RSSImport { - public class IMDbWatchListRequestGenerator : INetImportRequestGenerator + public class RSSImportRequestGenerator : INetImportRequestGenerator { - public IMDbWatchListSettings Settings { get; set; } + public RSSImportSettings Settings { get; set; } public virtual NetImportPageableRequestChain GetMovies() { diff --git a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListSettings.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportSettings.cs similarity index 68% rename from src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListSettings.cs rename to src/NzbDrone.Core/NetImport/RSSImport/RSSImportSettings.cs index 6d10fa78c..f4fb783c7 100644 --- a/src/NzbDrone.Core/NetImport/IMDbWatchList/IMDbWatchListSettings.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImportSettings.cs @@ -4,16 +4,16 @@ using NzbDrone.Core.Profiles; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; -namespace NzbDrone.Core.NetImport.IMDbWatchList +namespace NzbDrone.Core.NetImport.RSSImport { - public class IMDbWatchListSettings : NetImportBaseSettings + public class RSSImportSettings : NetImportBaseSettings { //private const string helpLink = "https://imdb.com"; - public IMDbWatchListSettings() + public RSSImportSettings() { - Link = "http://rss.imdb.com/list/"; + Link = "http://rss.yoursite.com"; ProfileId = 1; } diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 06402f783..a2607ca25 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -130,18 +130,18 @@ - - - + + + - - - + + +