add book adding to script, update tv series'

This commit is contained in:
Ben Goldsworthy 2024-01-15 22:43:23 +01:00
parent 5b92efcc98
commit 06957e053f
11 changed files with 15654 additions and 14769 deletions

View file

@ -1,3 +1,3 @@
TMDB_API_KEY= TMDB_API_KEY=
TVDB_API_KEY= TVDB_API_KEY=
OPENLIBRARY_API_KEY=

View file

@ -1,4 +1,34 @@
[ [
{
"title": "Le K\u00e2ma S\u00fbtra",
"publishers": [
"\u00c9ditions Gl\u00e9nat"
],
"publish_date": "2017-10-25",
"covers": [
14567221
],
"languages": [
"fre"
],
"description": "Osez ouvrir votre \u00e2me, votre c\u0153ur et votre corps \u00e0 la plus excitante initiation \u00e0 l'amour. Osez ouvrir le kama sutra de Manara.\r\n\r\nParva superbe blonde, entre par accident en possession d\u2019une ceinture tr\u00e8s \u00e9trange\u2026 puisqu\u2019elle s\u2019av\u00e8re \u00eatre l\u2019\u00e9crin dans lequel a \u00e9t\u00e9 emprisonn\u00e9 l\u2019esprit du dieu hindou Shiva. Celui-ci va initier la jeune femme au Kama Sutra, l\u2019emmenant en r\u00eave parcourir l\u2019Inde et ses myst\u00e8res sensuels et \u00e9rotiques dans le but de retrouver forme humaine.\r\n\r\nNouvelle \u00e9dition de cet incontournable de Manara, dans une nouvelle traduction enrichie d\u2019une pr\u00e9face in\u00e9dite de l\u2019auteur.",
"physical_format": "Hardcover",
"number_of_pages": 72,
"isbn_13": "9782344025642",
"edition_name": "24X32 (Gl\u00e9nat BD)",
"work": {
"id": "OL608214W",
"title": "Kamasutra",
"original_language": "ita"
},
"id": "OL50543310M",
"published_in": "Grenoble",
"date_added": "2024-01-15",
"date_started": "2024-01-15",
"date_finished": "2024-01-15",
"added_by_id": "9782344025642",
"comments": "Read in French"
},
{ {
"Title": "Montpellier", "Title": "Montpellier",
"Author": "Jean du Boiseberranger", "Author": "Jean du Boiseberranger",
@ -28,7 +58,7 @@
}, },
{ {
"Additional Authors": "Aleida Guevara March", "Additional Authors": "Aleida Guevara March",
"Author": "Ernesto “Che” Guevara", "Author": "Ernesto \u201cChe\u201d Guevara",
"Binding": "Paperback", "Binding": "Paperback",
"Date Added": "2023-05-12", "Date Added": "2023-05-12",
"Date Finished": "2023-12-12", "Date Finished": "2023-12-12",
@ -38,7 +68,7 @@
"Original Publication Year": "1993", "Original Publication Year": "1993",
"Publisher": "Ocean Sur", "Publisher": "Ocean Sur",
"Read Count": 1, "Read Count": 1,
"Title": "Diarios de Motocicleta: Notas de Viaje por América Latina", "Title": "Diarios de Motocicleta: Notas de Viaje por Am\u00e9rica Latina",
"TitleLang": "es", "TitleLang": "es",
"TitleTrans": "The Motorcycle Diaries: Notes on a Latin American Journey", "TitleTrans": "The Motorcycle Diaries: Notes on a Latin American Journey",
"Year Published": "2004" "Year Published": "2004"
@ -102,7 +132,7 @@
"ISBN13": "9781905492220" "ISBN13": "9781905492220"
}, },
{ {
"Title": "The Field Guide to Understanding Human Error", "Title": "The Field Guide to Understanding \u2018Human Error\u2019",
"Binding": "Paperback", "Binding": "Paperback",
"Publisher": "Routledge", "Publisher": "Routledge",
"Edition": "Third Edition", "Edition": "Third Edition",
@ -238,7 +268,7 @@
"Date Started": "2023-09-01", "Date Started": "2023-09-01",
"Publisher": "Active Distribution", "Publisher": "Active Distribution",
"Read Count": 1, "Read Count": 1,
"Title": "Rojava Anarchists: One Year Since the Turkish Invasion of Rojava: An Interview with Tekoşîna Anarşîst", "Title": "Rojava Anarchists: One Year Since the Turkish Invasion of Rojava: An Interview with Teko\u015f\u00eena Anar\u015f\u00eest",
"Year Published": "2020" "Year Published": "2020"
}, },
{ {
@ -443,7 +473,7 @@
"Title": "History Will Absolve Me", "Title": "History Will Absolve Me",
"Author": "Fidel Castro", "Author": "Fidel Castro",
"ISBN13": "9789590107832", "ISBN13": "9789590107832",
"Publisher": "Editorial Política", "Publisher": "Editorial Pol\u00edtica",
"Binding": "Paperback", "Binding": "Paperback",
"Number of Pages": 64, "Number of Pages": 64,
"Year Published": "2002", "Year Published": "2002",
@ -486,8 +516,8 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Dreams of Freedom: A Ricardo Flores Magón Reader", "Title": "Dreams of Freedom: A Ricardo Flores Mag\u00f3n Reader",
"Author": "Ricardo Flores Magón", "Author": "Ricardo Flores Mag\u00f3n",
"Additional Authors": "Charles Buf, Mitchell Cowen Verter", "Additional Authors": "Charles Buf, Mitchell Cowen Verter",
"ISBN": "1904859240", "ISBN": "1904859240",
"ISBN13": "9781904859246", "ISBN13": "9781904859246",
@ -652,7 +682,7 @@
}, },
{ {
"Title": "Critical Thought in the Face of the Capitalist Hydra I: Contributions by the Sixth Commission of the EZLN", "Title": "Critical Thought in the Face of the Capitalist Hydra I: Contributions by the Sixth Commission of the EZLN",
"Author": "Ejército Zapatista de Liberación Nacional", "Author": "Ej\u00e9rcito Zapatista de Liberaci\u00f3n Nacional",
"ISBN": "979799325", "ISBN": "979799325",
"ISBN13": "9780979799327", "ISBN13": "9780979799327",
"Publisher": "Paperboat Press", "Publisher": "Paperboat Press",
@ -733,7 +763,7 @@
}, },
{ {
"Title": "Sara: My Whole Life Was a Struggle", "Title": "Sara: My Whole Life Was a Struggle",
"Author": "Sakine Cansız", "Author": "Sakine Cans\u0131z",
"ISBN": null, "ISBN": null,
"ISBN13": "9781786802910", "ISBN13": "9781786802910",
"Publisher": "Pluto Press", "Publisher": "Pluto Press",
@ -815,7 +845,7 @@
}, },
{ {
"Title": "Brigadistes: Lives for Liberty", "Title": "Brigadistes: Lives for Liberty",
"Author": "Jordi Martí-Rueda", "Author": "Jordi Mart\u00ed-Rueda",
"Additional Authors": "Mary Ann Newman", "Additional Authors": "Mary Ann Newman",
"ISBN": "745347126", "ISBN": "745347126",
"ISBN13": "9780745347127", "ISBN13": "9780745347127",
@ -833,7 +863,7 @@
"Title": "Manifesto for a Democratic Civilization, Volume I - Civilization: The Age of Masked Gods and Disguised Kings", "Title": "Manifesto for a Democratic Civilization, Volume I - Civilization: The Age of Masked Gods and Disguised Kings",
"Series": "Manifesto for a Democratic Civilization", "Series": "Manifesto for a Democratic Civilization",
"Series Number": 1, "Series Number": 1,
"Author": "Abdullah Öcalan", "Author": "Abdullah \u00d6calan",
"Additional Authors": "David Graeber", "Additional Authors": "David Graeber",
"ISBN": "8293064420", "ISBN": "8293064420",
"ISBN13": "9788293064428", "ISBN13": "9788293064428",
@ -960,9 +990,9 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Building Free Life: Dialogues with Öcalan", "Title": "Building Free Life: Dialogues with \u00d6calan",
"Author": "International Initiative “Freedom for Abdullah Öcalan Peace in Kurdistan”", "Author": "International Initiative \u201cFreedom for Abdullah \u00d6calan \u2013 Peace in Kurdistan\u201d",
"Additional Authors": "John Holloway, Norman Paech, Ekkehard Sauermann, Immanuel Wallerstein, Arnaldo Otegi, Barry K. Gills, Antonio Negri, Peter Lamborn Wilson, Donald H. Matthews, Thomas Jeffrey Miley, Muriel González Athenas, Radha D'Souza, Andrej Grubačić, Raul Zibechi, Mechthild Exo, David Graeber, Fabian Scheidler, Damian Gerber and Shannon Brincat, Patrick Huff, Nazan Üstündağ, Michael Panser, Abdullah Öcalan", "Additional Authors": "John Holloway, Norman Paech, Ekkehard Sauermann, Immanuel Wallerstein, Arnaldo Otegi, Barry K. Gills, Antonio Negri, Peter Lamborn Wilson, Donald H. Matthews, Thomas Jeffrey Miley, Muriel Gonz\u00e1lez Athenas, Radha D'Souza, Andrej Gruba\u010di\u0107, Raul Zibechi, Mechthild Exo, David Graeber, Fabian Scheidler, Damian Gerber and Shannon Brincat, Patrick Huff, Nazan \u00dcst\u00fcnda\u011f, Michael Panser, Abdullah \u00d6calan",
"ISBN": null, "ISBN": null,
"ISBN13": "9781629637686", "ISBN13": "9781629637686",
"Publisher": "PM Press", "Publisher": "PM Press",
@ -1152,7 +1182,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "If This is a Woman: Inside Ravensbrück: Hitler's Concentration Camp for Women", "Title": "If This is a Woman: Inside Ravensbr\u00fcck: Hitler's Concentration Camp for Women",
"Author": "Sarah Helm", "Author": "Sarah Helm",
"ISBN": "1408701073", "ISBN": "1408701073",
"ISBN13": "9781408701072", "ISBN13": "9781408701072",
@ -1251,7 +1281,7 @@
}, },
{ {
"Title": "How to Read Lacan", "Title": "How to Read Lacan",
"Author": "Slavoj Žižek", "Author": "Slavoj \u017di\u017eek",
"ISBN": "1862078947", "ISBN": "1862078947",
"ISBN13": "9781862078949", "ISBN13": "9781862078949",
"Publisher": "Granta Books", "Publisher": "Granta Books",
@ -1532,7 +1562,7 @@
"Read Count": 2 "Read Count": 2
}, },
{ {
"Title": "Phaic Tăn: Sunstroke on a Shoestring", "Title": "Phaic T\u0103n: Sunstroke on a Shoestring",
"Author": "Santo Cilauro", "Author": "Santo Cilauro",
"Additional Authors": "Tom Gleisner, Rob Sitch", "Additional Authors": "Tom Gleisner, Rob Sitch",
"ISBN": "811853659", "ISBN": "811853659",
@ -1925,8 +1955,8 @@
}, },
{ {
"Title": "Visions, voices, and practices of the zapatistas", "Title": "Visions, voices, and practices of the zapatistas",
"Author": "Gilberto López y Rivas", "Author": "Gilberto L\u00f3pez y Rivas",
"Additional Authors": "José Jorge Santiago S., David Barkin, Claudia Yadira Caballero Borja, Alejandra Jiménez Ramírez, Mariana Mora, Gustavo Esteva, Lau Kin Chi", "Additional Authors": "Jos\u00e9 Jorge Santiago S., David Barkin, Claudia Yadira Caballero Borja, Alejandra Jim\u00e9nez Ram\u00edrez, Mariana Mora, Gustavo Esteva, Lau Kin Chi",
"ISBN": null, "ISBN": null,
"ISBN13": null, "ISBN13": null,
"Publisher": "Universidad de la Tierra Oaxaca", "Publisher": "Universidad de la Tierra Oaxaca",
@ -1942,7 +1972,7 @@
}, },
{ {
"Title": "This Fire Never Dies: One Year With the PKK", "Title": "This Fire Never Dies: One Year With the PKK",
"Author": "Fréderike Geerdink", "Author": "Fr\u00e9derike Geerdink",
"ISBN": null, "ISBN": null,
"ISBN13": "9788195031047", "ISBN13": "9788195031047",
"Publisher": "Leftword Books", "Publisher": "Leftword Books",
@ -1973,7 +2003,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Exquisite Rebel: The Essays of Voltairine de Cleyre Anarchist, Feminist, Genius", "Title": "Exquisite Rebel: The Essays of Voltairine de Cleyre \u2014 Anarchist, Feminist, Genius",
"Author": "Voltairine de Cleyre", "Author": "Voltairine de Cleyre",
"Additional Authors": "Sharon Presley, Crispin Sartwell", "Additional Authors": "Sharon Presley, Crispin Sartwell",
"ISBN": "791460940", "ISBN": "791460940",
@ -1990,7 +2020,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Nestor Makhno — Anarchy's Cossack: The Struggle for Free Soviets in the Ukraine 19171921", "Title": "Nestor Makhno \u2014 Anarchy's Cossack: The Struggle for Free Soviets in the Ukraine 1917\u20131921",
"Author": "Alexandre Skirda", "Author": "Alexandre Skirda",
"Additional Authors": "Paul Sharkey", "Additional Authors": "Paul Sharkey",
"ISBN": "1902593685", "ISBN": "1902593685",
@ -2109,7 +2139,7 @@
}, },
{ {
"Title": "The Courage of Hopelessness: Chronicles of a Year of Acting Dangerously", "Title": "The Courage of Hopelessness: Chronicles of a Year of Acting Dangerously",
"Author": "Slavoj Žižek", "Author": "Slavoj \u017di\u017eek",
"ISBN": "241305586", "ISBN": "241305586",
"ISBN13": "9780241305584", "ISBN13": "9780241305584",
"Publisher": "Allen Lane", "Publisher": "Allen Lane",
@ -2190,7 +2220,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "They Thought They Were Free: The Germans, 193345", "Title": "They Thought They Were Free: The Germans, 1933\u201345",
"Author": "Milton Sanford Mayer", "Author": "Milton Sanford Mayer",
"ISBN": "1299641024", "ISBN": "1299641024",
"ISBN13": "9781299641020", "ISBN13": "9781299641020",
@ -2353,7 +2383,7 @@
{ {
"Title": "To Dare Imagining: Rojava Revolution", "Title": "To Dare Imagining: Rojava Revolution",
"Author": "Dilar Dirik", "Author": "Dilar Dirik",
"Additional Authors": "David Levi Strauss, Michael Taussig, Peter Lamborn Wilson, Bill Weinberg, David Graeber, Havin Güneşer, Nazan Ustundag, Abdullah Öcalan", "Additional Authors": "David Levi Strauss, Michael Taussig, Peter Lamborn Wilson, Bill Weinberg, David Graeber, Havin G\u00fcne\u015fer, Nazan Ustundag, Abdullah \u00d6calan",
"ISBN": "157027312X", "ISBN": "157027312X",
"ISBN13": "9781570273124", "ISBN13": "9781570273124",
"Publisher": "Autonomedia", "Publisher": "Autonomedia",
@ -2513,7 +2543,7 @@
}, },
{ {
"Title": "The Seeker of Truth Who Insisted on Another World", "Title": "The Seeker of Truth Who Insisted on Another World",
"Author": "Bager Nûjiyan", "Author": "Bager N\u00fbjiyan",
"ISBN": null, "ISBN": null,
"ISBN13": null, "ISBN13": null,
"Publisher": "Internationalist Commune", "Publisher": "Internationalist Commune",
@ -2560,7 +2590,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Les Misérables", "Title": "Les Mis\u00e9rables",
"Author": "Victor Hugo", "Author": "Victor Hugo",
"Additional Authors": "Norman Denny", "Additional Authors": "Norman Denny",
"ISBN": "140444300", "ISBN": "140444300",
@ -2578,7 +2608,7 @@
}, },
{ {
"Title": "Riot Medicine", "Title": "Riot Medicine",
"Author": "Håkan Geijer", "Author": "H\u00e5kan Geijer",
"Additional Authors": "Audrey Huff, Bizhan Khodabande, Cat Paris, Citriii, drnSX42, snailsnail, ZEROC0IL", "Additional Authors": "Audrey Huff, Bizhan Khodabande, Cat Paris, Citriii, drnSX42, snailsnail, ZEROC0IL",
"ISBN": null, "ISBN": null,
"ISBN13": null, "ISBN13": null,
@ -2867,7 +2897,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Catch-22: As recommended on BBC2s Between the Covers", "Title": "Catch-22: As recommended on BBC2\u2019s Between the Covers",
"Author": "Joseph Heller", "Author": "Joseph Heller",
"ISBN": "99477319", "ISBN": "99477319",
"ISBN13": "9780099477310", "ISBN13": "9780099477310",
@ -2898,7 +2928,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Exterminate All the Brutes", "Title": "\u2018Exterminate All the Brutes\u2019",
"Author": "Sven Lindqvist", "Author": "Sven Lindqvist",
"Additional Authors": "Joan Tate", "Additional Authors": "Joan Tate",
"ISBN": "1862075085", "ISBN": "1862075085",
@ -2947,7 +2977,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Fanged Noumena: Collected Writings, 19872007", "Title": "Fanged Noumena: Collected Writings, 1987\u20132007",
"Author": "Nick Land", "Author": "Nick Land",
"Additional Authors": "Ray Brassier, Robin Mackay", "Additional Authors": "Ray Brassier, Robin Mackay",
"ISBN": "095530878X", "ISBN": "095530878X",
@ -3439,8 +3469,8 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "The Political Thought of Abdullah Öcalan: Kurdistan, Women's Revolution and Democratic Confederalism", "Title": "The Political Thought of Abdullah \u00d6calan: Kurdistan, Women's Revolution and Democratic Confederalism",
"Author": "Abdullah Öcalan", "Author": "Abdullah \u00d6calan",
"ISBN": "745399762", "ISBN": "745399762",
"ISBN13": "9780745399768", "ISBN13": "9780745399768",
"Publisher": "Pluto Press", "Publisher": "Pluto Press",
@ -3958,8 +3988,8 @@
}, },
{ {
"Title": "Journey to the End of the Night", "Title": "Journey to the End of the Night",
"Author": "Louis-Ferdinand Céline", "Author": "Louis-Ferdinand C\u00e9line",
"Additional Authors": "John Banville, André Derval", "Additional Authors": "John Banville, Andr\u00e9 Derval",
"ISBN": "1847492401", "ISBN": "1847492401",
"ISBN13": "9781847492401", "ISBN13": "9781847492401",
"Publisher": "Alma Books", "Publisher": "Alma Books",
@ -4788,7 +4818,7 @@
{ {
"Title": "The Art of Rhetoric", "Title": "The Art of Rhetoric",
"Author": "Aristotle", "Author": "Aristotle",
"Additional Authors": "Hugh Lawson-Tancred, Rudolf Kassel, Aristóteles", "Additional Authors": "Hugh Lawson-Tancred, Rudolf Kassel, Arist\u00f3teles",
"ISBN": "140445102", "ISBN": "140445102",
"ISBN13": "9780140445107", "ISBN13": "9780140445107",
"Publisher": "Penguin Classics", "Publisher": "Penguin Classics",
@ -5061,7 +5091,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Wieża Jaskółki (Saga o Wiedźminie, #4)", "Title": "Wie\u017ca Jask\u00f3\u0142ki (Saga o Wied\u017aminie, #4)",
"Author": "Andrzej Sapkowski", "Author": "Andrzej Sapkowski",
"ISBN": "8370541240", "ISBN": "8370541240",
"ISBN13": "9788370541248", "ISBN13": "9788370541248",
@ -5077,7 +5107,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Pani Jeziora (Saga o Wiedźminie, #5)", "Title": "Pani Jeziora (Saga o Wied\u017aminie, #5)",
"Author": "Andrzej Sapkowski", "Author": "Andrzej Sapkowski",
"ISBN": "8370541291", "ISBN": "8370541291",
"ISBN13": "9788370541293", "ISBN13": "9788370541293",
@ -5352,7 +5382,7 @@
}, },
{ {
"Title": "Meditations on First Philosophy", "Title": "Meditations on First Philosophy",
"Author": "René Descartes", "Author": "Ren\u00e9 Descartes",
"ISBN": null, "ISBN": null,
"ISBN13": "9781622971800", "ISBN13": "9781622971800",
"Publisher": "Seedbox Press, LLC.", "Publisher": "Seedbox Press, LLC.",
@ -5479,7 +5509,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Gödel, Escher, Bach: An Eternal Golden Braid", "Title": "G\u00f6del, Escher, Bach: An Eternal Golden Braid",
"Author": "Douglas R. Hofstadter", "Author": "Douglas R. Hofstadter",
"ISBN": "465026567", "ISBN": "465026567",
"ISBN13": "9780465026562", "ISBN13": "9780465026562",
@ -5529,7 +5559,7 @@
}, },
{ {
"Title": "Storm of Steel", "Title": "Storm of Steel",
"Author": "Ernst Jünger", "Author": "Ernst J\u00fcnger",
"Additional Authors": "Michael Hofmann", "Additional Authors": "Michael Hofmann",
"ISBN": "141186917", "ISBN": "141186917",
"ISBN13": "9780141186917", "ISBN13": "9780141186917",
@ -5952,7 +5982,7 @@
{ {
"Title": "The Rime of the Ancient Mariner", "Title": "The Rime of the Ancient Mariner",
"Author": "Samuel Taylor Coleridge", "Author": "Samuel Taylor Coleridge",
"Additional Authors": "Gustave Doré", "Additional Authors": "Gustave Dor\u00e9",
"ISBN": "486223051", "ISBN": "486223051",
"ISBN13": "9780486223056", "ISBN13": "9780486223056",
"Publisher": "Dover Publications", "Publisher": "Dover Publications",
@ -6066,8 +6096,8 @@
}, },
{ {
"Title": "The Witcher: Reasons of State", "Title": "The Witcher: Reasons of State",
"Author": "Michał Gałek", "Author": "Micha\u0142 Ga\u0142ek",
"Additional Authors": "Arkadiusz Klimek, Łukasz Poller", "Additional Authors": "Arkadiusz Klimek, \u0141ukasz Poller",
"ISBN": null, "ISBN": null,
"ISBN13": null, "ISBN13": null,
"Publisher": "CD Projekt RED", "Publisher": "CD Projekt RED",
@ -6195,9 +6225,9 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Crécy", "Title": "Cr\u00e9cy",
"Author": "Warren Ellis", "Author": "Warren Ellis",
"Additional Authors": "Raúlo Cáceres", "Additional Authors": "Ra\u00falo C\u00e1ceres",
"ISBN": "1592910408", "ISBN": "1592910408",
"ISBN13": "9781592910403", "ISBN13": "9781592910403",
"Publisher": "Avatar Press", "Publisher": "Avatar Press",
@ -6341,7 +6371,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "The Early Stuarts, 16031660", "Title": "The Early Stuarts, 1603\u20131660",
"Author": "Godfrey Davies", "Author": "Godfrey Davies",
"ISBN": "198217048", "ISBN": "198217048",
"ISBN13": "9780198217046", "ISBN13": "9780198217046",
@ -6465,7 +6495,7 @@
}, },
{ {
"Title": "The Prince", "Title": "The Prince",
"Author": "Niccolò Machiavelli", "Author": "Niccol\u00f2 Machiavelli",
"Additional Authors": "George Bull, Anthony Grafton", "Additional Authors": "George Bull, Anthony Grafton",
"ISBN": "140449159", "ISBN": "140449159",
"ISBN13": "9780140449150", "ISBN13": "9780140449150",
@ -6870,7 +6900,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "Le Dernier Jour d'un Condamné", "Title": "Le Dernier Jour d'un Condamn\u00e9",
"Author": "Victor Hugo", "Author": "Victor Hugo",
"ISBN": null, "ISBN": null,
"ISBN13": null, "ISBN13": null,
@ -7688,7 +7718,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "England In Crisis, 164060 (Heinemann Advanced History)", "Title": "England In Crisis, 1640\u201360 (Heinemann Advanced History)",
"Author": "David Sharp", "Author": "David Sharp",
"ISBN": "435327143", "ISBN": "435327143",
"ISBN13": "9780435327149", "ISBN13": "9780435327149",
@ -7734,7 +7764,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "The Coming Of The Civil War, 160349 (Heinemann Advanced History)", "Title": "The Coming Of The Civil War, 1603\u201349 (Heinemann Advanced History)",
"Author": "David Sharp", "Author": "David Sharp",
"ISBN": "435327135", "ISBN": "435327135",
"ISBN13": "9780435327132", "ISBN13": "9780435327132",
@ -7752,7 +7782,7 @@
{ {
"Title": "Ghost Hunt, Vol. 1 (Ghost Hunt, #1)", "Title": "Ghost Hunt, Vol. 1 (Ghost Hunt, #1)",
"Author": "Shiho Inada", "Author": "Shiho Inada",
"Additional Authors": "Fuyumi Ono, 小野不由美", "Additional Authors": "Fuyumi Ono, \u5c0f\u91ce\u4e0d\u7531\u7f8e",
"ISBN": "345486242", "ISBN": "345486242",
"ISBN13": "9780345486240", "ISBN13": "9780345486240",
"Publisher": "Del Rey", "Publisher": "Del Rey",
@ -8100,7 +8130,7 @@
}, },
{ {
"Title": "The Narrow Road to the Deep North and Other Travel Sketches (Yuasa)", "Title": "The Narrow Road to the Deep North and Other Travel Sketches (Yuasa)",
"Author": "Matsuo Bashō", "Author": "Matsuo Bash\u014d",
"Additional Authors": "Nobuyuki Yuasa", "Additional Authors": "Nobuyuki Yuasa",
"ISBN": "140441859", "ISBN": "140441859",
"ISBN13": "9780140441857", "ISBN13": "9780140441857",
@ -8133,7 +8163,7 @@
}, },
{ {
"Title": "D-Day Normandy: Weapons, Uniforms, Military Equipment", "Title": "D-Day Normandy: Weapons, Uniforms, Military Equipment",
"Author": "François Bertin", "Author": "Fran\u00e7ois Bertin",
"Additional Authors": "id2m", "Additional Authors": "id2m",
"ISBN": "1932033777", "ISBN": "1932033777",
"ISBN13": "9781932033779", "ISBN13": "9781932033779",
@ -8692,7 +8722,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "The Far Side®", "Title": "The Far Side\u00ae",
"Author": "Gary Larson", "Author": "Gary Larson",
"ISBN": "836212002", "ISBN": "836212002",
"ISBN13": "9780836212006", "ISBN13": "9780836212006",
@ -8722,7 +8752,7 @@
"Read Count": 1 "Read Count": 1
}, },
{ {
"Title": "The Far Side® Gallery 2", "Title": "The Far Side\u00ae Gallery 2",
"Author": "Gary Larson", "Author": "Gary Larson",
"Additional Authors": "Stephen King", "Additional Authors": "Stephen King",
"ISBN": "836220854", "ISBN": "836220854",
@ -8953,7 +8983,7 @@
{ {
"Title": "d'artiste Character Modeling 3: Digital Artists Master Class", "Title": "d'artiste Character Modeling 3: Digital Artists Master Class",
"Author": "Jan-Bart van Beek", "Author": "Jan-Bart van Beek",
"Additional Authors": "Giovanni Nakpil, César Da Col, Daniel P. Wade", "Additional Authors": "Giovanni Nakpil, C\u00e9sar Da Col, Daniel P. Wade",
"ISBN": "1921002670", "ISBN": "1921002670",
"ISBN13": "9781921002670", "ISBN13": "9781921002670",
"Publisher": "Ballistic Publishing", "Publisher": "Ballistic Publishing",
@ -9154,7 +9184,7 @@
{ {
"Title": "Batman Black and White, Vol. 1", "Title": "Batman Black and White, Vol. 1",
"Author": "Mark Chiarello", "Author": "Mark Chiarello",
"Additional Authors": "Ted McKeever, Bruce Timm, Joe Kubert, Howard Chaykin, Archie Goodwin, José Muñoz, Walter Simonson, Jan Strnad, Richard Corben, Kent Williams, Chuck Dixon, Jorge Zaffino, Neil Gaiman, Simon Bisley, Klaus Janson, Andy Helfer, Tanino Liberatore, Matt Wagner, Bill Sienkiewicz, Dennis O'Neil, Teddy Kristiansen, Brian Bolland, Kevin Nowlan, Gary Gianni, Brian Stelfreeze, Katsuhiro Otomo, Jo Duffy", "Additional Authors": "Ted McKeever, Bruce Timm, Joe Kubert, Howard Chaykin, Archie Goodwin, Jos\u00e9 Mu\u00f1oz, Walter Simonson, Jan Strnad, Richard Corben, Kent Williams, Chuck Dixon, Jorge Zaffino, Neil Gaiman, Simon Bisley, Klaus Janson, Andy Helfer, Tanino Liberatore, Matt Wagner, Bill Sienkiewicz, Dennis O'Neil, Teddy Kristiansen, Brian Bolland, Kevin Nowlan, Gary Gianni, Brian Stelfreeze, Katsuhiro Otomo, Jo Duffy",
"ISBN": "1563894394", "ISBN": "1563894394",
"ISBN13": "9781563894398", "ISBN13": "9781563894398",
"Publisher": "DC Comics", "Publisher": "DC Comics",

View file

@ -1,4 +1,9 @@
[ [
{
"Title": "Bottoms Up and the Devil Laughs",
"Author": "Kerry Howley",
"Date Added": "2024-01-14"
},
{ {
"Title": "Jonathan Abernathy You Are Kind", "Title": "Jonathan Abernathy You Are Kind",
"Author": "Molly McGhee", "Author": "Molly McGhee",

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,14 @@
[ [
{
"id": 93304,
"title": "Alternative 3",
"original_language": "en",
"original_title": "Alternative 3",
"overview": "Purporting to be an investigation into the UK's contemporary \"brain drain\", Alternative 3 uncovered a plan to make the Moon and Mars habitable in the event of climate change and a terminal environmental catastrophe on Earth.",
"poster_path": "/tcVu3RX3ZycwAlQhudKwvIguilM.jpg",
"release_date": "1977-06-20",
"date_added": "2024-01-14"
},
{ {
"id": 786892, "id": 786892,
"title": "Furiosa: A Mad Max Saga", "title": "Furiosa: A Mad Max Saga",

View file

@ -1,4 +1,12 @@
[ [
{
"Title": "That's Pretty Clever",
"Developers": "Wolfgang Warsch",
"Platform": "Board",
"Date Started": "2024-01-13",
"Date Finished": "2024-01-13",
"BGG ID": "244522"
},
{ {
"Title": "Cacho Alalay", "Title": "Cacho Alalay",
"Platform": "Board", "Platform": "Board",
@ -9,7 +17,7 @@
"Title": "Cheating Moth", "Title": "Cheating Moth",
"Developers": "Emely Brand and Lukas Brand", "Developers": "Emely Brand and Lukas Brand",
"Platform": "Board", "Platform": "Board",
"BBG ID": "105593", "BGG ID": "105593",
"Date Released": "2011", "Date Released": "2011",
"Date Started": "2024-01-06", "Date Started": "2024-01-06",
"Date Finished": "2024-01-06" "Date Finished": "2024-01-06"

View file

@ -1,4 +1,16 @@
[ [
{
"id": 2316,
"name": "The Office",
"overview": "The everyday lives of office employees in the Scranton, Pennsylvania branch of the fictional Dunder Mifflin Paper Company.",
"poster_path": "/7DJKHzAi83BmQrWLrYYOqcoKfhR.jpg",
"first_air_date": "2005-03-24",
"origin_country": [
"US"
],
"date_added": "2024-01-14",
"added_by_id": "tt0386676"
},
{ {
"id": 44045, "id": 44045,
"origin_country": [ "origin_country": [

View file

@ -1,216 +1,815 @@
[ [
{
"Show Title": "The Corner"
},
{
"Show Title": "When the Levees Broke: A Requiem in Four Acts (2006)"
},
{
"Show Title": "The National Parks: America's Best Idea"
},
{
"Show Title": "On Death Row"
},
{
"Show Title": "Heimat"
},
{
"Show Title": "Heimat II"
},
{
"Show Title": "V (1983)"
},
{
"Show Title": "V: The Final Battle"
},
{
"Show Title": "Dunkirk (2004)"
},
{
"Show Title": "Walking with Dinosaurs: The Ballad of Big Al"
},
{
"Show Title": "Chased by Dinosaurs"
},
{
"Show Title": "I Love Alaska"
},
{
"Show Title": "Nerds 2.0.1: A Brief History of the Internet"
},
{
"Show Title": "World on a Wire"
},
{
"Show Title": "Prohibition (2011)"
},
{
"Show Title": "The Dust Bowl"
},
{
"Show Title": "The Story of Film: An Odyssey"
},
{
"Show Title": "It (1990)"
},
{
"Show Title": "Life with Judy Garland: Me and My Shadows"
},
{
"Show Title": "Nazis: A Warning from History"
},
{ {
"Show Title": "How To with John Wilson" "id": 133232,
"name": "Africa",
"overview": "An eight-part exploration of the diverse peoples that make up the African continent.",
"poster_path": "/coWNcluZKG1EIHditwUYwy8ic8f.jpg",
"first_air_date": "2001-09-09",
"origin_country": [],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Russia 19851999: TraumaZone" "id": 121,
"name": "Doctor Who",
"overview": "The adventures of The Doctor, a time-traveling humanoid alien known as a Time Lord. He explores the universe in his TARDIS, a sentient time-traveling spaceship. Its exterior appears as a blue British police box, which was a common sight in Britain in 1963 when the series first aired. Along with a succession of companions, The Doctor faces a variety of foes while working to save civilizations, help ordinary people, and right many wrongs.",
"poster_path": "/xinqAmYrZ1TEwowcQhgTkZVtVE0.jpg",
"first_air_date": "1963-11-23",
"origin_country": [
"GB"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "'Til Death" "id": 14531,
"origin_country": [
"US"
],
"overview": "The Corner presents the world of Fayette Street using real names and real events. The miniseries tells the true story of men, women and children living amid the open-air drug markets of West Baltimore. It chronicles a year in the lives of 15-year-old DeAndre McCullough, his mother Fran Boyd, and his father Gary McCullough, as well as other addicts and low-level drug dealers caught up in the twin-engine economy of heroin and cocaine.",
"poster_path": "/mdZEDLbtbp9CUOFPTvrYh55G5V2.jpg",
"first_air_date": "2000-04-16",
"name": "The Corner",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": ".hack//Liminality" "id": 16468,
"name": "When the Levees Broke: A Requiem in Four Acts",
"overview": "Spike Lee's award-winning documentary follows the events that preceded and followed Hurricane Katrina's catastrophic passage through New Orleans in 2005.",
"poster_path": "/o8YXm3gkRtGy0yQKfWvYNQXoblU.jpg",
"first_air_date": "2006-08-21",
"origin_country": [
"US"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": ".hack//Quantum" "id": 31708,
"origin_country": [
"US"
],
"overview": "Filmed over the course of more than six years at some of nature's most spectacular locales \u2013 from Acadia to Yosemite, Yellowstone to the Grand Canyon, the Everglades of Florida to the Gates of the Arctic in Alaska - \u201cThe National Parks: America's Best Idea\u201d is nonetheless a story of people: people from every conceivable background \u2013 rich and poor; famous and unknown; soldiers and scientists; natives and newcomers; idealists, artists and entrepreneurs; people who were willing to devote themselves to saving some precious portion of the land they loved, and in doing so reminded their fellow citizens of the full meaning of democracy.",
"poster_path": "/6RIXsAA5O91qnUha9VqUN9uBfng.jpg",
"first_air_date": "2009-09-27",
"name": "The National Parks: America's Best Idea",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": ".hack//Roots" "id": 56988,
"origin_country": [
"AT",
"US",
"GB"
],
"overview": "A two part series on an inside look at a maximum security prison in Texas featuring interviews with death row inmates.",
"poster_path": "/om3zDi14MgPkxdr7qvJtI0euptr.jpg",
"first_air_date": "2012-03-09",
"name": "On Death Row",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": ".hack//SIGN" "id": 43059,
"origin_country": [
"DE"
],
"original_language": "de",
"original_name": "Heimat",
"overview": "Spanning 1919 to 1982, in the fictional village of Schabbach, lives Maria Simon and her family, whose lives and community are changed by historical events around them.",
"poster_path": "/GDFS4Ud7a7cjv9evYXfFGVG4u7.jpg",
"first_air_date": "1984-09-16",
"name": "Heimat",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "12 oz. Mouse" "id": 43060,
"origin_country": [
"DE"
],
"original_language": "de",
"original_name": "Die zweite Heimat",
"overview": "The movie consist of 13 separate episodes each handling a period between 1960 and 1970. It tells the story of a group of people in Munich (mostly music and film students). The movie tells a story in many different levels about love, friendship, misfortune, loss, art, politics, history with important historic events of the decennium in the background.",
"poster_path": "/pCoHoIfxCuf5N7e3eM2xk2EpR4T.jpg",
"first_air_date": "1993-03-04",
"name": "Heimat II: A Chronicle of a Generation",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "20th Century Battlefields" "id": 14141,
"origin_country": [
"US"
],
"overview": "Fifty spaceships, each three miles across, hover ominously above Earth's major cities. The Visitors that emerge are humanlike in appearance and extend the hand of friendship. Our planet's resources are just what these aliens need to survive. And for its future survival, unsuspecting humankind will need... a miracle!",
"poster_path": "/fV5U1eWPC8Dvxq0BUIoF7cvBK1o.jpg",
"first_air_date": "1983-05-01",
"name": "V",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "24" "id": 75896,
"origin_country": [
"US"
],
"overview": "Is there life out there? Finally we know. Beause they are there. Alien spacecraft with humanlike passengers have come to Earth. They say they come in peace for food and water. The water they find in our reservoirs. The food they find walking about everywhere on two legs.",
"poster_path": "/yTN3fHZ7ki1mXxFbJtbZfvLxj3t.jpg",
"first_air_date": "1984-05-06",
"name": "V: The Final Battle",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "2DTV" "id": 7516,
"name": "Dunkirk",
"overview": "Major factual drama telling the story of history's greatest maritime evacuation, after the World War II Battle of Dunkirk in May and June 1940.",
"poster_path": "/5sMOjEMsDBiJL0CZqUXTD58kZTN.jpg",
"first_air_date": "2004-02-18",
"origin_country": [
"FR",
"GB"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "30 Rock" "id": 19640,
"origin_country": [
"GB"
],
"overview": "Two part documentary re-creating the life of Big Al, an Allosaurus from the Jurassic.",
"poster_path": "/85ZpMLym48e6hYXR8fkHWf3M05T.jpg",
"first_air_date": "2000-12-25",
"name": "Big Al",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "A Bit of Fry & Laurie" "id": 232763,
"origin_country": [
"GB"
],
"overview": "",
"poster_path": "/bDuxRxC3osBTy6xKbNMFAqnRVv4.jpg",
"first_air_date": "2002-12-30",
"name": "Chased by Dinosaurs",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "A History of Britain" "id": 128378,
"origin_country": [
"NL"
],
"overview": "How much do our personal search queries reveal about us? On August 4, 2006, the search queries of 650,000 AOL users accidentally ended up online. The Minimovie I Love Alaska by Lernert Engelberts and Sander Plug reveals the heartbreaking search history of user #711391\u2026",
"poster_path": null,
"first_air_date": "",
"name": "I Love Alaska",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "A Tale of Two Cities (1989)" "id": 19585,
"origin_country": [
"US"
],
"overview": "Nerds 2.0.1: A Brief History of the Internet is a 1998 three hour American PBS documentary film that explores the development of the Arpanet, the Internet, and the World Wide Web in the United States from 1969 to 1998. It was created during the dot-com boom of the late 1990s. The documentary was written and hosted by Robert X. Cringely and is the sequel to the 1996 documentary, Triumph of the Nerds. ",
"poster_path": "/9e6Yu8azHT0WgcHAlvyhAi3dKPE.jpg",
"first_air_date": "1998-11-25",
"name": "Nerds 2.0.1: A Brief History of the Internet",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "A Touch of Frost" "id": 86449,
"origin_country": [
"DE"
],
"original_language": "de",
"original_name": "Welt am Draht",
"overview": "Cybernetics engineer Fred Stiller uncovers a massive corporate conspiracy involving a virtual reality computer project.",
"poster_path": "/yopUrYgAinsVmaB9tYZRQt6HtiE.jpg",
"first_air_date": "1973-10-14",
"name": "World on a Wire",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Aeon Flux" "id": 39983,
"name": "Prohibition",
"overview": "The history of the rise, rule and fall of the Eighteenth Amendment to the United States Constitution and the entire era it encompassed (1920-33). After nearly a century of activism, Prohibition was intended to improve the lives of all citizens by protecting individuals, families and society at large from the devastating effects of alcohol abuse; but paradoxically it made millions of people rethink their definition of morality.",
"poster_path": "/dhZKY66U37aIJVxA6OsR95efTkI.jpg",
"first_air_date": "2011-10-02",
"origin_country": [
"US"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Africa" "id": 56629,
"origin_country": [
"US"
],
"overview": "Chronicles the worst man-made ecological disaster in American history, in which the frenzied wheat boom of the Great Plow-Up, followed by a decade-long drought during the 1930s nearly swept away the breadbasket of the nation.",
"poster_path": "/aU2HpeCBZhTnEixhSwfPtP7gfa2.jpg",
"first_air_date": "2012-11-18",
"name": "The Dust Bowl",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Afro Samurai" "id": 45571,
"origin_country": [
"GB"
],
"overview": "A worldwide guided tour of the greatest movies ever made and the story of international cinema through the history of cinematic innovation.",
"poster_path": "/g0TCWFNIFHO8u2yy1hboUDIhD6n.jpg",
"first_air_date": "2011-09-03",
"name": "The Story of Film: An Odyssey",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "After Dark" "id": 19614,
"name": "It",
"overview": "In 1960, seven outcast kids known as \"The Losers' Club\" fight an evil demon who poses as a child-killing clown. Thirty years later, they reunite to stop the demon once and for all when it returns to their hometown.",
"poster_path": "/4ybQ6gopB3H3cu0seVZLznDnIKo.jpg",
"first_air_date": "1990-11-18",
"origin_country": [
"US"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Agatha Christie's Poirot" "id": 75577,
"origin_country": [
"US"
],
"overview": "Chronicles the life of Judy Garland, from her first public performance in 1924 until her death.",
"poster_path": "/qNh6PCOJIuG0ErqFFvukuodrStw.jpg",
"first_air_date": "2001-02-25",
"name": "Life with Judy Garland: Me and My Shadows",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Airwolf" "id": 18892,
"origin_country": [
"GB"
],
"overview": "Documentary film series that examines Adolf Hitler and the Nazis' rise to power, their zenith, their decline and fall, and the consequences of their reign featuring archive footage and interviews with eyewitnesses.",
"poster_path": "/wdAiFowckDaZLdqvWVLw8M9Kx8X.jpg",
"first_air_date": "1997-09-10",
"name": "The Nazis: A Warning from History",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Akagi" "id": 110971,
"origin_country": [
"US"
],
"overview": "In a uniquely hilarious odyssey of self-discovery and cultural observation, documentary filmmaker and self-described \"anxious New Yorker\" John Wilson covertly and obsessively films the lives of his fellow New Yorkers while attempting to give everyday advice on relatable topics. The awkward contradictions of modern life are eased by Wilson\u2019s candid, unpolished commentary. Building upon Wilson\u2019s previously released \"how to\" short films, each episode takes wildly unexpected turns but is grounded in John's refreshing honesty.",
"poster_path": "/jpHziYpJniprEFDFwMbOHabgnow.jpg",
"first_air_date": "2020-10-23",
"name": "How To with John Wilson",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Alias" "id": 210992,
"origin_country": [
"GB"
],
"overview": "What it felt like to live through the collapse of communism and democracy. A series of films by Adam Curtis.",
"poster_path": "/mW0lSHk0TW4eiLgzQpiSvR9kS78.jpg",
"first_air_date": "2022-10-13",
"name": "Russia 1985-1999: TraumaZone",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Alien Nation" "id": 1568,
"origin_country": [
"US"
],
"overview": "A comedy about the triumphs and tribulations of marriage and friendship from very different perspectives. It's about the funny \u2013 and sometimes annoying \u2013 things that happen between husbands, wives, parents, children, neighbors and friends day after day after day. The show focuses on Eddie and Joy Stark, a couple married for 23 years who live in Philadelphia, Pennsylvania.",
"poster_path": "/trOymv1SiVmMeWlCmV0EiOC6E6v.jpg",
"first_air_date": "2006-09-07",
"name": "'Til Death",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "All Watched Over By Machine..." "id": 36023,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": ".hack//Liminality",
"overview": ".hack//Liminality is an OVA series directly related to the .hack video game series for the PlayStation 2, with the perspective of Liminality focused on the real world as opposed to the games' MMORPG The World. Liminality was separated into four volumes; each volume was released with its corresponding game. The initial episode is 45 minutes long, while subsequent episodes are 30 minutes long. The video series was directed by Koichi Mashimo, written by Kazunori It\u014d with music by Yuki Kajiura. Primary Animation production was handled by Mashimo's studio Bee Train which collaborated for the four games as well as handled major production on .hack//Sign.",
"poster_path": "/5pGlzAgepsEr7CJihEhoezLsvZu.jpg",
"first_air_date": "2002-06-20",
"name": ".hack//Liminality",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Allo! Allo!" "id": 127752,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": ".hack//Quantum",
"overview": "Tobias, Mary, and Sakuya challenge the impregnable \"The One Sin\".",
"poster_path": "/zr26cF92rXLXQ8m51ioJKAvzQei.jpg",
"first_air_date": "2011-01-28",
"name": ".hack//Quantum",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Altered Carbon" "id": 120330,
"name": ".hack//ROOTS",
"original_language": "ja",
"original_name": ".hack//ROOTS",
"overview": "In 2015, CC Corporation's data centre caught on fire destroying \"The World\", an online RPG. By using data from a different game, CC Corp was able to rebuild the game. In 2016, The World R:2 was released. In this slightly different world, Haseo spends his time with Shino and Ovan in the guild known as the Twilight Brigade. They are on the search for a legendary item. When a rival team challenges them, the conflict has deep repercussions both inside and outside the game and threatens to change the players forever.",
"poster_path": "/9HugakJIKV07AWMotFzgZSvT99N.jpg",
"first_air_date": "2006-04-06",
"origin_country": [
"JP"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Alternative 3" "id": 8864,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": ".hack",
"overview": ".hack follows several young players as they navigate the vast, mysterious MMORPG known as \u201cThe World\u201d \u2013 a place, it turns out, that is sometimes impossible to leave.",
"poster_path": "/wNplB2ViLejqtyU76Qz2iv3oZPM.jpg",
"first_air_date": "2002-04-04",
"name": ".hack",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "American Vandal" "id": 3043,
"origin_country": [
"US"
],
"overview": "12 oz. Mouse revolves around Mouse Fitzgerald, nicknamed \"Fitz\", an alcoholic mouse who performs odd jobs so he can buy more beer. Together with his chinchilla companion Skillet, Fitz begins to recover suppressed memories that he once had a wife and a child who have now vanished. This leads him to seek answers about his past and the shadowy forces that seem to be manipulating his world.",
"poster_path": "/8lt7ltHs5s1pdIqxsNN0TeI9L10.jpg",
"first_air_date": "2005-06-19",
"name": "12 oz. Mouse",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Ancient Rome: The Rise and ..." "id": 4089,
"origin_country": [
"GB"
],
"overview": "20th Century Battlefields is a BBC documentary television series hosted by television and radio personality Peter Snow, and his son Dan Snow.\n\nEpisodes cover the major battles of the twentieth century, and is best known for its extensive use of \"sand table\" CGI effects to help viewers visualize the battles.",
"poster_path": "/pfYWbaHX0iO31LeSqcv1FmAaqbd.jpg",
"first_air_date": "2007-06-04",
"name": "Peter and Dan Snow: 20th Century Battlefields",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Andromeda" "id": 1973,
"origin_country": [
"US"
],
"overview": "Counterterrorism agent Jack Bauer fights the bad guys of the world, a day at a time. With each week's episode unfolding in real-time, \"24\" covers a single day in the life of Bauer each season.",
"poster_path": "/iq6yrZ5LEDXf1ArCOYLq8PIUBpV.jpg",
"first_air_date": "2001-11-06",
"name": "24",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Andy Barker, P.I." "id": 1852,
"origin_country": [
"GB"
],
"overview": "2DTV is a British satirical animated television show that was broadcast on ITV in the United Kingdom from March 2001 to December 2004. Lasting a total of five series and thirty-three episodes, 2DTV became the successor of popular 80's TV series Spitting Image, and the predecessor of 2008 ITV satirical animation Headcases.",
"poster_path": null,
"first_air_date": "2001-10-14",
"name": "2DTV",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Andy Richter Controls the U..." "id": 4608,
"origin_country": [
"US"
],
"overview": "Liz Lemon, the head writer for a late-night TV variety show in New York, tries to juggle all the egos around her while chasing her own dream.",
"poster_path": "/eYYQWACx7ttUzRwTNYuo6zveqpE.jpg",
"first_air_date": "2006-10-11",
"name": "30 Rock",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Angel" "id": 192,
"origin_country": [
"GB"
],
"overview": "A British comedy television series with turns of phrase and elaborate wordplay, written by and starring former Cambridge Footlights members Stephen Fry and Hugh Laurie.",
"poster_path": "/x2BeuxXkbOoiUCyECb0AdUHxw0y.jpg",
"first_air_date": "1989-01-13",
"name": "A Bit of Fry & Laurie",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Angels in America" "id": 14269,
"origin_country": [
"GB"
],
"overview": "Stretching from the Stone Age to the year 2000, Simon Schama's Complete History of Britain does not pretend to be a definitive chronicle of the turbulent events which buffeted and shaped the British Isles. What Schama does do, however, is tell the story in vivid and gripping narrative terms, free of the fustiness of traditional academe, personalising key historical events by examining the major characters at the centre of them. Not all historians would approve of the history depicted here as shaped principally by the actions of great men and women rather than by more abstract developments, but Schama's way of telling it is a good deal more enthralling as a result. \n\nSchama successfully gives lie to the idea that the history of Britain has been moderate and temperate, passing down the generations as stately as a galleon, taking on board sensible ideas but steering clear of sillier, revolutionary ones. Nonsense. Schama retells British history the way it was--as bloody, convulsive, precarious, hot-blooded and several times within an inch of haring off onto an entirely different course. Schama seems almost to delight in the goriness of history. Themes returned to repeatedly include the wars between the Scots and the Irish and the Catholic/Protestant conflicts--only the Irish question remains unresolved by the new millennium. As Britain becomes a constitutional monarchy, Schama talks less of Kings and Queens but of poets and idea-makers like Orwell. Still, with his pungent, direct manner and against an evocative visual and aural backdrop, Schama makes history seem as though it happened yesterday, the bloodstains not yet dry.",
"poster_path": "/znHndnfGtFuYIRcPd8RFrk4Jl6.jpg",
"first_air_date": "2000-09-30",
"name": "A History of Britain",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Anthony Bourdain Parts Unknown" "id": 23595,
"name": "A Tale of Two Cities",
"overview": "A pair of lookalikes, one a former French aristocrat and the other an alcoholic English lawyer, fall in love with the same woman amongst the turmoil of the French Revolution.",
"poster_path": "/kbosfbiACgTevQNzktvDgj9Nlg.jpg",
"first_air_date": "1989-05-21",
"origin_country": [
"GB"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Aqua Teen Hunger Force" "id": 2474,
"origin_country": [
"GB"
],
"overview": "Jack Frost is a gritty, dogged and unconventional detective with sympathy for the underdog and an instinct for moral justice who attracts trouble like a magnet. Despite some animosity with his superintendent, Norman \u201cHorn-rimmed Harry\u201d Mullett, Frost and his ever-changing roster of assistants manage to solve cases via his clever mind, good heart, and cool touch.",
"poster_path": "/ffGxtqWI0TFVuLRGawxFJbibZfx.jpg",
"first_air_date": "1992-12-06",
"name": "A Touch of Frost",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Arrow" "id": 406,
"name": "\u00c6on Flux",
"overview": "\u00c6on Flux is set in a bizarre, dystopian future world. The title character is a tall, leather-clad secret agent from the nation of Monica, skilled in assassination and acrobatics. Her mission is to infiltrate the strongholds of the neighboring country of Bregna, which is led by her sometimes-nemesis and sometimes-lover Trevor Goodchild. Monica represents a dynamic anarchist society, while Bregna embodies a police state.",
"poster_path": "/3745n05zXNMfWwkXMcCiF64838s.jpg",
"first_air_date": "1991-09-01",
"origin_country": [
"US"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Assassin's Creed - Lineage" "id": 46664,
"origin_country": [
"US",
"GB"
],
"overview": "Africa, the world's wildest continent. David Attenborough takes us on an awe-inspiring journey through one of the most diverse places in the world. We visit deserts, savannas, and jungles and meet up with some of Africa's amazing wildlife.",
"poster_path": "/emrvQId86K5dXKRSnFGNQAH3XAO.jpg",
"first_air_date": "2013-01-02",
"name": "Africa",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Assy McGee" "id": 19544,
"origin_country": [
"US"
],
"overview": "In a futuristic Japan where conflicts are settled by the sword, Afro Samurai must avenge his father's murder by challenging a powerful warrior.",
"poster_path": "/1wif9a57obZA5N1UujiluoUahkI.jpg",
"first_air_date": "2007-01-04",
"name": "Afro Samurai",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Attack on Titan" "id": 13681,
"origin_country": [
"GB"
],
"overview": "After Dark was a British late night live discussion programme broadcast on Channel 4 television between 1987 and 1997, and on the BBC in 2003. Inspired by an Austrian programme called Club 2, Roly Keating of the BBC described it as \"one of the great television talk formats of all time\". In 2010 the television trade magazine Broadcast wrote \"After Dark defined the first 10 years of Channel 4, just as Big Brother did for the second\".\n\nBroadcast live and with no scheduled end time, the series was considered to be a groundbreaking reinvention of the discussion programme format. The programme was hosted by a variety of presenters, and each episode had around half a dozen guests, often including a member of the public. Guests would be selected to provoke lively discussion, and memorable conversations included footballer Garth Crooks disputing the future of the game with politician Sir Rhodes Boyson, MP Teresa Gorman walking out of a discussion about unemployment with Billy Bragg, and Oliver Reed drunkenly kissing Kate Millett during a programme that asked \"Do Men Have To Be Violent?\".\n\nThe show ended in 1991 but a number of one-off specials and a BBC revival followed.",
"poster_path": null,
"first_air_date": "",
"name": "After Dark",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Attention Scum" "id": 790,
"origin_country": [
"GB"
],
"overview": "From England to Egypt, accompanied by his elegant and trustworthy sidekicks, the intelligent yet eccentrically-refined Belgian detective Hercule Poirot pits his wits against a collection of first class deceptions.",
"poster_path": "/6f4IVfbn8knb7RjdZlGLuW5guDc.jpg",
"first_air_date": "1989-01-08",
"name": "Agatha Christie's Poirot",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Avatar: The Last Airbender" "id": 2119,
"origin_country": [
"US"
],
"overview": "As part of a deal with an intelligence agency to look for his missing brother, a renegade pilot goes on missions with an advanced battle helicopter.",
"poster_path": "/4PAN7zPqmR9b73een97WkxqCTQN.jpg",
"first_air_date": "1984-01-22",
"name": "Airwolf",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Awake" "id": 42877,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": "\u95d8\u724c\u4f1d\u8aac\u30a2\u30ab\u30ae\uff5e\u95c7\u306b\u821e\u3044\u964d\u308a\u305f\u5929\u624d\uff5e",
"overview": "Akagi is a mah-jong-centric Japanese comic, written and illustrated by Nobuyuki Fukumoto and first published in 1992. It is featured in the weekly magazine Modern Mahjong, and is a prequel to the author's previous work Ten, in which Akagi's titular character also appears. Due to its popularity, the manga has been adopted into two live-action direct-to-video movies, a 26-episode anime series which aired in Japan in the fall of 2005, and a live-action TV drama series.",
"poster_path": "/hsXnmIZfp8B8TobylmIbe8wHyDi.jpg",
"first_air_date": "2005-10-05",
"name": "Akagi",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Axe Cop" "id": 2046,
"origin_country": [
"US"
],
"overview": "Sydney Bristow, an agent who has been tricked to believe she is working for the U.S. government, is actually working for a criminal organization named the Alliance of Twelve. Upon learning this, Sydney becomes a double agent for the real CIA.",
"poster_path": "/Dl3KIxWlSEvnXogNHxdXA4pbAk.jpg",
"first_air_date": "2001-09-30",
"name": "Alias",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Babylon 5" "id": 5383,
"origin_country": [
"US"
],
"overview": "Detective Matthew Sikes, a Los Angeles police officer reluctantly works with \"Newcomer\" alien George Francisco. Sikes also has an 'on again off again' flirtation with a female Newcomer, Cathy Frankel.",
"poster_path": "/mSnZFa4Yv3dFCMdcyJXjlq0lj4c.jpg",
"first_air_date": "1989-09-18",
"name": "Alien Nation",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Babylon Berlin" "id": 44045,
"origin_country": [
"GB"
],
"overview": "We have been colonised by the machines we have built. Although we don't realise it, the way we see everything in the world today is through the eyes of the computers.",
"poster_path": "/cKkDDZrydzGhd04LdMJ9goRc1cp.jpg",
"first_air_date": "2011-05-23",
"name": "All Watched Over by Machines of Loving Grace",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Baccano!" "id": 2211,
"name": "'Allo 'Allo!",
"overview": "The misadventures of hapless cafe owner Ren\u00e9 Artois and his escapades with the Resistance in occupied France.",
"poster_path": "/m42lb4UxkpaFil4bw0bqqjlWCY4.jpg",
"first_air_date": "1984-09-07",
"origin_country": [
"GB"
],
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Bakemonogatari" "id": 68421,
"origin_country": [
"US"
],
"overview": "After 250 years on ice, a prisoner returns to life in a new body with one chance to win his freedom: by solving a mind-bending murder.",
"poster_path": "/95IsiH4p5937YXQHaOS2W2dWYOG.jpg",
"first_air_date": "2018-02-02",
"name": "Altered Carbon",
"date_added": "2024-01-14"
}, },
{ {
"Show Title": "Baker Boys: Inside The Surge" "id": 73126,
"origin_country": [
"US"
],
"overview": "A true-crime satire that explores the aftermath of a costly high school prank that left twenty-seven faculty cars vandalized with phallic images.",
"poster_path": "/hMbVY6f4zfUcX0xf2jo3xZFdrMp.jpg",
"first_air_date": "2017-09-15",
"name": "American Vandal",
"date_added": "2024-01-14"
},
{
"id": 13398,
"origin_country": [
"GB"
],
"overview": "Turning points in ancient Roman history and some of the Empire's greatest stories are brought to life in this drama documentary series.",
"poster_path": "/qMVzcLIWRqwe0TddlDG8WQMfmjx.jpg",
"first_air_date": "2006-09-21",
"name": "Ancient Rome: The Rise and Fall of an Empire",
"date_added": "2024-01-14"
},
{
"id": 2985,
"origin_country": [
"US",
"CA"
],
"overview": "Captain Dylan Hunt and his crew quest to restore a government that once presided over an extended peace and prosperity.",
"poster_path": "/wJHCks9QrBOcxyYx1H8dvEjQE7E.jpg",
"first_air_date": "2000-10-02",
"name": "Andromeda",
"date_added": "2024-01-14"
},
{
"id": 4667,
"origin_country": [
"US"
],
"overview": "Certified public accountant Andy Barker reluctantly becomes a private investigator after he is mistaken for the former office tenant, who was a private eye.",
"poster_path": "/uJD9UMko7SPZWwzxm1M0vQw1yYH.jpg",
"first_air_date": "2007-03-15",
"name": "Andy Barker, P.I.",
"date_added": "2024-01-14"
},
{
"id": 1460,
"name": "Andy Richter Controls the Universe",
"overview": "Fanciful series about an aspiring writer who imagines alternative life scenarios while working for a big company.",
"poster_path": "/m8GdEnMamK9rOo2Th2l8XJXhw7U.jpg",
"first_air_date": "2002-03-19",
"origin_country": [
"US"
],
"date_added": "2024-01-14"
},
{
"id": 2426,
"origin_country": [
"US"
],
"overview": "The vampire Angel, cursed with a soul, moves to Los Angeles and aids people with supernatural-related problems while questing for his own redemption. A spin-off from Buffy the Vampire Slayer.",
"poster_path": "/7dRU3wdMJba3PedicxEYSks0oJx.jpg",
"first_air_date": "1999-10-05",
"name": "Angel",
"date_added": "2024-01-14"
},
{
"id": 11245,
"origin_country": [
"US"
],
"overview": "In 1985, two couples' relationships dissolve amidst the backdrop of Reagan era politics, the spreading AIDS epidemic, and a rapidly changing social and political climate.",
"poster_path": "/rrV0kCmzcP8oB00gemSZDns90rb.jpg",
"first_air_date": "2003-12-07",
"name": "Angels in America",
"date_added": "2024-01-14"
},
{
"id": 56305,
"origin_country": [
"US"
],
"overview": "Bourdain travels across the globe to uncover little-known areas of the world and celebrate diverse cultures by exploring food and dining rituals. Known for his curiosity, candor, and acerbic wit, Bourdain takes viewers off the beaten path of tourist destinations \u2013 including some war-torn parts of the world \u2013 and meets with a variety of local citizens to offer a window into their lifestyles, and occasionally communes with an internationally lauded chef on his journeys.",
"poster_path": "/qg7lcydNf8DBVFIFK3XEuccv1jf.jpg",
"first_air_date": "2013-04-14",
"name": "Anthony Bourdain: Parts Unknown",
"date_added": "2024-01-14"
},
{
"id": 251,
"origin_country": [
"US"
],
"overview": "The surreal adventures of three anthropomorphic fast food items: Master Shake, Frylock and Meatwad, and their human nextdoor neighbor, Carl Brutananadilewski.",
"poster_path": "/jCWOkfMLsT2sGHadCkmR65MWtJu.jpg",
"first_air_date": "2000-12-30",
"name": "Aqua Teen Hunger Force",
"date_added": "2024-01-14"
},
{
"id": 1412,
"origin_country": [
"US"
],
"overview": "Spoiled billionaire playboy Oliver Queen is missing and presumed dead when his yacht is lost at sea. He returns five years later a changed man, determined to clean up the city as a hooded vigilante armed with a bow.",
"poster_path": "/gKG5QGz5Ngf8fgWpBsWtlg5L2SF.jpg",
"first_air_date": "2012-10-10",
"name": "Arrow",
"date_added": "2024-01-14"
},
{
"id": 40137,
"origin_country": [
"FR"
],
"overview": "When the Duke of Milan is brutally murdered, the Assassin Giovanni Auditore is dispatched to investigate. What he uncovers implicates Italy's most powerful families reaching all the way back to the Vatican itself. As Giovanni draws closer to the truth, he becomes hunted himself. He must expose the conspirators before he joins their ever-growing list of victims.\n\nThree short films based on the Assassin's Creed II video game.",
"poster_path": "/i9H4PEtufr7yazAAkShwGemkwHz.jpg",
"first_air_date": "2009-10-26",
"name": "Assassin's Creed: Lineage",
"date_added": "2024-01-14"
},
{
"id": 6318,
"origin_country": [
"US"
],
"overview": "Assy McGee is an animated sitcom featuring police detective Assy McGee, a parody of tough-guy cop shows and movies, who is literally a walking pair of buttocks. Along with his partner Don Sanchez, the trigger-happy McGee solves crimes in a fictionalized Exeter, New Hampshire. Larry Murphy voices all of the main characters. The series premiered on November 26, 2006, on Adult Swim and was canceled after season two ended on July 6, 2008.",
"poster_path": "/stSGJNl7TDWqD6QFOdo3sXDakwo.jpg",
"first_air_date": "2006-11-26",
"name": "Assy McGee",
"date_added": "2024-01-14"
},
{
"id": 1429,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": "\u9032\u6483\u306e\u5de8\u4eba",
"overview": "Several hundred years ago, humans were nearly exterminated by Titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by walling themselves in a city protected by extremely high walls, even taller than the biggest Titans. Flash forward to the present and the city has not seen a Titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a Colossal Titan that appears out of thin air. As the smaller Titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single Titan and take revenge for all of mankind.",
"poster_path": "/hTP1DtLGFamjfu8WqjnuQdP1n4i.jpg",
"first_air_date": "2013-04-07",
"name": "Attack on Titan",
"date_added": "2024-01-14"
},
{
"id": 4959,
"origin_country": [
"GB"
],
"overview": "Attention Scum! was a 2001 television comedy series created by Simon Munnery and Stewart Lee. It starred Munnery as his \"The League Against Tedium\" character and contained acerbic stand-up routines atop a transit van and sketches including mainstays such as \"24 Hour News\", operatic intermissions by Kombat Opera, and two characters engaged in a duel over their hats.",
"poster_path": "/ox7nNYqYz5fbigrz1jTJB5AECvl.jpg",
"first_air_date": "2001-02-25",
"name": "Attention Scum",
"date_added": "2024-01-14"
},
{
"id": 246,
"origin_country": [
"US"
],
"overview": "In a war-torn world of elemental magic, a young boy reawakens to undertake a dangerous mystic quest to fulfill his destiny as the Avatar, and bring peace to the world.",
"poster_path": "/cHFZA8Tlv03nKTGXhLOYOLtqoSm.jpg",
"first_air_date": "2005-02-21",
"name": "Avatar: The Last Airbender",
"date_added": "2024-01-14"
},
{
"id": 39361,
"origin_country": [
"US"
],
"overview": "Michael lives in two separate realities after a car accident. In one reality, his wife Hannah survives the accident; in the other reality, his son Rex survives. Michael does not know which reality is \"real\", and uses the wristbands to differentiate the two. He sees two therapists: Dr. Jonathan Lee in the \"red reality\" and Dr. Judith Evans in the \"green reality\". At work, Michael's erratic behavior triggers clashes with his team; they do not know about Michael's uncanny ability to solve crimes using details from both realities.",
"poster_path": "/gAXMk6AhGNNIT00DyCiXZ2gIQnK.jpg",
"first_air_date": "2012-03-01",
"name": "Awake",
"date_added": "2024-01-14"
},
{
"id": 49008,
"origin_country": [
"US"
],
"overview": "Axe Cop is an animated series based on the webcomic of the same name. It premiered on Fox on July 21, 2013, as a part of the channel's Animation Domination HD programming block. The series aired 6 11-minute episodes in its first season, which will later expand to half-hour episodes should the show be renewed for a second season.",
"poster_path": "/v4ETEzVOIFWhnLNM3n04gNMknWv.jpg",
"first_air_date": "2013-07-21",
"name": "Axe Cop",
"date_added": "2024-01-14"
},
{
"id": 3137,
"origin_country": [
"US"
],
"overview": "Babylon 5 is a five-mile long space station located in neutral space. Built by the Earth Alliance in the 2250s, its goal is to maintain peace among the various alien races by providing a sanctuary where grievances and negotiations can be worked out among duly appointed ambassadors. A council made up of representatives from the five major space-faring civilizations - the Earth Alliance, Minbari Federation, Centauri Republic, Narn Regime, and Vorlon Empire - work with the League of Non-Aligned Worlds to keep interstellar relations under control. Aside from its diplomatic function, Babylon 5 also serves as a military post for Earth and a port of call for travelers, traders, businessmen, criminals, and Rangers.",
"poster_path": "/rj87TqwabgJzslrH4G6BCDseBKV.jpg",
"first_air_date": "1994-01-26",
"name": "Babylon 5",
"date_added": "2024-01-14"
},
{
"id": 66980,
"origin_country": [
"DE"
],
"original_language": "de",
"original_name": "Babylon Berlin",
"overview": "Beneath the decadence of 1929 Berlin, lies an underworld city of sin. Police investigator Gareon Rath has been transferred from Cologne to the epicenter of political and social changes in the Golden Twenties.",
"poster_path": "/jYShWyYllx9DhOS6d92mN2yVsbA.jpg",
"first_air_date": "2017-10-13",
"name": "Babylon Berlin",
"date_added": "2024-01-14"
},
{
"id": 34121,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": "\u30d0\u30c3\u30ab\u30fc\u30ce\uff01",
"overview": "During the early 1930s in Chicago, the transcontinental train, Flying Pussyfoot, is starting its legendary journey that will leave a trail of blood all over the country. At the same time in New York, the ambitious scientist Szilard and his unwilling aide Ennis are looking for missing bottles of the immortality elixir. In addition, a war between the mafia groups is getting worse. On board the Advena Avis, in 1711, alchemists are about to learn the price of immortality. Takes place in the same universe as Durarara (2010).",
"poster_path": "/qOxUTQAOTrMKTHuC9HQZiVsTK0F.jpg",
"first_air_date": "2007-07-27",
"name": "Baccano!",
"date_added": "2024-01-14"
},
{
"id": 46195,
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": "\u5316\u7269\u8a9e",
"overview": "Although there are still traces of the brief period he became a vampire, third-year high school student Koyomi Araragi is human again. He happens upon others with their own supernatural problems and finds that he can empathize. Koyomi becomes involved in their lives, seeking to help them and occasionally asking for advice from Meme Oshino, the homeless man who helped him become human again.",
"poster_path": "/tlIbNzOsighRnINf3oQUoEUzOE5.jpg",
"first_air_date": "2009-07-03",
"name": "Monogatari",
"date_added": "2024-01-14"
},
{
"Show Title": "Baker Boys: Inside the Surge",
"TVDB ID": "252424"
}, },
{ {
"Show Title": "Bang! Bang! It's Reeves and..." "Show Title": "Bang! Bang! It's Reeves and..."
@ -480,7 +1079,7 @@
"Show Title": "Dekalog" "Show Title": "Dekalog"
}, },
{ {
"Show Title": "Den som dræber" "Show Title": "Den som dr\u00e6ber"
}, },
{ {
"Show Title": "Derek" "Show Title": "Derek"
@ -510,7 +1109,7 @@
"Show Title": "Doctor Who" "Show Title": "Doctor Who"
}, },
{ {
"Show Title": "Dolphins Spy In The Pod" "Show Title": "Dolphins \u2013 Spy In The Pod"
}, },
{ {
"Show Title": "Doogie Howser, M.D." "Show Title": "Doogie Howser, M.D."
@ -678,10 +1277,7 @@
"Show Title": "Full Metal Panic!" "Show Title": "Full Metal Panic!"
}, },
{ {
"Show Title": "FullMetal Alchemist (US)" "Show Title": "Fullmetal Alchemist: Brotherhood"
},
{
"Show Title": "Fullmetal Alchemist: Brothe..."
}, },
{ {
"Show Title": "Future Diary" "Show Title": "Future Diary"
@ -750,7 +1346,7 @@
"Show Title": "Harsh Realm" "Show Title": "Harsh Realm"
}, },
{ {
"Show Title": "Harvey Birdman, Attorney at..." "Show Title": "Harvey Birdman, Attorney at Lawn"
}, },
{ {
"Show Title": "Hatfields & McCoys" "Show Title": "Hatfields & McCoys"
@ -774,7 +1370,7 @@
"Show Title": "Hellsing" "Show Title": "Hellsing"
}, },
{ {
"Show Title": "Henry VIII: The Mind of a T..." "Show Title": "Henry VIII: The Mind of a Tyrant"
}, },
{ {
"Show Title": "Heroes" "Show Title": "Heroes"
@ -854,9 +1450,6 @@
{ {
"Show Title": "Invader ZIM" "Show Title": "Invader ZIM"
}, },
{
"Show Title": "It's Always Sunny in Philad..."
},
{ {
"Show Title": "It's Kevin" "Show Title": "It's Kevin"
}, },
@ -930,7 +1523,7 @@
"Show Title": "Kolchak: The Night Stalker" "Show Title": "Kolchak: The Night Stalker"
}, },
{ {
"Show Title": "Kröd Mändoon and the Flamin..." "Show Title": "Kr\u00f6d M\u00e4ndoon and the Flamin..."
}, },
{ {
"Show Title": "Kroll Show" "Show Title": "Kroll Show"
@ -1290,7 +1883,7 @@
"Show Title": "Randall and Hopkirk (Deceas..." "Show Title": "Randall and Hopkirk (Deceas..."
}, },
{ {
"Show Title": "Ranma ½" "Show Title": "Ranma \u00bd"
}, },
{ {
"Show Title": "Rectify" "Show Title": "Rectify"

View file

@ -2,7 +2,7 @@
<tr> <tr>
<td colspan=4><h3>Diary</h3></td> <td colspan=4><h3>Diary</h3></td>
</tr> </tr>
{{ range ( sort ( where $.Site.Data.films.log "date_watched" "!=" "" ) "date_watched" "desc" ) }} {{ range ( sort ( where $.Site.Data.films.log "date_completed" "!=" "" ) "date_completed" "desc" ) }}
<tr> <tr>
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td> <td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
<td> <td>
@ -10,9 +10,9 @@
</td> </td>
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td> <td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
<td> <td>
{{- if .date_watched -}} {{- if .date_completed -}}
{{- time.Format "Jan 2, 2006" .date_watched -}} {{- time.Format "Jan 2, 2006" .date_completed -}}
{{- if .is_rewatch }} &#x21BB;{{ end -}} {{- if .is_repeat }} &#x21BB;{{ end -}}
{{- else -}} {{- else -}}
n/a n/a
{{- end -}} {{- end -}}
@ -22,7 +22,7 @@
<tr> <tr>
<td colspan=4><h3>Assorted</h3></td> <td colspan=4><h3>Assorted</h3></td>
</tr> </tr>
{{ range ( sort ( where $.Site.Data.films.log "date_watched" "" ) "title" "asc" ) }} {{ range ( sort ( where $.Site.Data.films.log "date_completed" "" ) "title" "asc" ) }}
<tr> <tr>
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td> <td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
<td> <td>
@ -38,9 +38,9 @@
</td> </td>
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td> <td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
<td> <td>
{{- if .date_watched -}} {{- if .date_completed -}}
{{- time.Format "Jan 2, 2006" .date_watched -}} {{- time.Format "Jan 2, 2006" .date_completed -}}
{{- if .is_rewatch }} &#x21BB;{{ end -}} {{- if .is_repeat }} &#x21BB;{{ end -}}
{{- else -}} {{- else -}}
n/a n/a
{{- end -}} {{- end -}}
@ -64,9 +64,9 @@
</td> </td>
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td> <td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
<td> <td>
{{- if .date_watched -}} {{- if .date_completed -}}
{{- time.Format "Jan 2, 2006" .date_watched -}} {{- time.Format "Jan 2, 2006" .date_completed -}}
{{- if .is_rewatch }} &#x21BB;{{ end -}} {{- if .is_repeat }} &#x21BB;{{ end -}}
{{- else -}} {{- else -}}
n/a n/a
{{- end -}} {{- end -}}

View file

@ -15,11 +15,9 @@ load_dotenv()
TMDB_API_KEY = os.getenv('TMDB_API_KEY') TMDB_API_KEY = os.getenv('TMDB_API_KEY')
TVDB_API_KEY = os.getenv('TVDB_API_KEY') TVDB_API_KEY = os.getenv('TVDB_API_KEY')
OPENLIBRARY_API_KEY = os.getenv('OPENLIBRARY_API_KEY')
if "" == TMDB_API_KEY: logging.error("TMDB API key not found") if "" == TMDB_API_KEY: logging.error("TMDB API key not found")
if "" == TVDB_API_KEY: logging.error("TVDB API key not found") if "" == TVDB_API_KEY: logging.error("TVDB API key not found")
if "" == OPENLIBRARY_API_KEY: logging.error("OpenLibrary API key not found")
def add_item_to_log(item_id, media_type, log): def add_item_to_log(item_id, media_type, log):
@ -29,27 +27,30 @@ def add_item_to_log(item_id, media_type, log):
item = import_by_id(item_id, media_type) item = import_by_id(item_id, media_type)
if log in ['log', 'current']: if log in ['log', 'current']:
if 'log' == log:
date_watched = ''
while re.search('[0-9]{4}-[0-9]{2}-[0-9]{2}', date_watched) is None:
date_watched = input("Enter date watched [YYYY-MM-DD, t for today]:")
if 't' == date_watched: date_watched = datetime.today().strftime('%Y-%m-%d')
item['date_watched'] = date_watched
elif 'current' == log: # TODO - review this when moving from one log to another
if media_type in ['books', 'tv-series', 'games']:
date_started = '' date_started = ''
while re.search('[0-9]{4}-[0-9]{2}-[0-9]{2}', date_started) is None: while re.search('[0-9]{4}-[0-9]{2}-[0-9]{2}', date_started) is None:
date_started = input("Enter date started [YYYY-MM-DD, t for today]:") date_started = input("Enter date started [YYYY-MM-DD, t for today]: ")
if 't' == date_started: date_started = datetime.today().strftime('%Y-%m-%d') if 't' == date_started: date_started = datetime.today().strftime('%Y-%m-%d')
item['date_started'] = date_started item['date_started'] = date_started
is_rewatch = '' if 'log' == log:
while is_rewatch not in ['y', 'n']: date_finished = ''
is_rewatch = input("Is this a rewatch? [y/n]:") while re.search('[0-9]{4}-[0-9]{2}-[0-9]{2}', date_finished) is None:
if 'y' == is_rewatch: item['is_rewatch'] = True date_finished = input("Enter date finished [YYYY-MM-DD, t for today]: ")
if 't' == date_finished: date_finished = datetime.today().strftime('%Y-%m-%d')
item['date_finished'] = date_finished
# TODO - do this automatically
is_repeat = ''
while is_repeat not in ['y', 'n']:
is_repeat = input(f"Is this a repeat entry? [y/n]: ")
if 'y' == is_repeat: item['is_repeat'] = True
item['added_by_id'] = item_id item['added_by_id'] = item_id
comments = input("Enter comments (optional):") comments = input("Enter comments (optional): ")
if '' != comments: item['comments'] = comments if '' != comments: item['comments'] = comments
# Validation step # Validation step
@ -75,10 +76,12 @@ def add_item_to_log(item_id, media_type, log):
def import_by_id(import_id, media_type): def import_by_id(import_id, media_type):
if media_type in ['films', 'tv-series']: if media_type in ['films', 'tv-series']:
return import_from_imdb_by_id(import_id, media_type) return import_from_imdb_by_id(import_id, media_type)
elif media_type in ['tv-episodes']: elif media_type in ['tv-episodes']:
return #import_from_tvdb_by_id(import_id, media_type) return #import_from_tvdb_by_id(import_id, media_type)
elif media_type in ['books']: elif media_type in ['books']:
return #import_from_openlibrary_by_id(import_id, media_type) return import_from_openlibrary_by_id(import_id, media_type)
def import_from_imdb_by_id(imdb_id, media_type): def import_from_imdb_by_id(imdb_id, media_type):
@ -98,12 +101,14 @@ def import_from_imdb_by_id(imdb_id, media_type):
# Process the response # Process the response
if (200 == response.status_code): if (200 == response.status_code):
logging.info(response.status_code) logging.info(response.status_code)
elif (429 == response.status_code): elif (429 == response.status_code):
time.sleep(2) time.sleep(2)
import_from_imdb_by_id(imdb_id, media_type) import_from_imdb_by_id(imdb_id, media_type)
return return
else: else:
logging.error(response.text) raise Exception(f"Error {response.status_code}: {response.text}")
if ('films' == media_type): results_key = 'movie_results' if ('films' == media_type): results_key = 'movie_results'
elif ('tv-episodes' == media_type): results_key = 'TODO' elif ('tv-episodes' == media_type): results_key = 'TODO'
@ -113,37 +118,198 @@ def import_from_imdb_by_id(imdb_id, media_type):
if 1 == len(response_data): if 1 == len(response_data):
item = response_data[0] item = response_data[0]
elif 0 == len(response_data): elif 0 == len(response_data):
logging.error(f"Returned no results for {imdb_id}") raise Exception(f"Returned no results for {imdb_id}")
return
elif 1 < len(response_data): elif 1 < len(response_data):
logging.warning(f"Returned more than one {media_type} for ID {imdb_id}") logging.warning(f"Returned more than one {media_type} for ID '{imdb_id}'")
print(f"Returned more than one {media_type} for ID {imdb_id}:\n") print(f"Returned more than one {media_type} for ID '{imdb_id}':\n")
print(json.dumps(response_data, indent=4)) print(json.dumps(response_data, indent=4))
idx = input("\nEnter the index of the result to use: ") idx = input("\nEnter the index of the result to use: ")
try: try:
item = response_data[int(idx)] item = response_data[int(idx)]
except: except:
logging.error("Index invalid!") raise Exception(f"Index {idx} is invalid")
print("Index invalid!")
# Modify the returned result to add additional data # Modify the returned result to add additional data
return cleanup_result(item) return cleanup_result(item, media_type)
def cleanup_result(item): def import_from_openlibrary_by_id(isbn, media_type):
"""Process a film or TV episode returned by the TMDB API by removing unnecessary fields and adding others""" """Retrieve a film, TV show or TV episode from TMDB using an IMDB ID"""
for field_name in ['adult', 'backdrop_path', 'episode_type', 'genre_ids', 'media_type', 'origin_country', 'popularity', 'production_code', 'runtime', 'still_path', 'video', 'vote_average', 'vote_count']: api_url = f"https://openlibrary.org/isbn/{isbn}"
# Sending API request
response = requests.get(
api_url,
headers={'accept': 'application/json'}
)
# Process the response
if (200 == response.status_code):
logging.info(response.status_code)
elif (429 == response.status_code):
time.sleep(2)
import_from_openlibrary_by_id(isbn, media_type)
return
else:
raise Exception(f"Error {reponse.status_code}: {response.text}")
item = json.loads(response.text)
for key in ['authors', 'works']:
if key in item:
for i, sub_item in enumerate(item[key]):
item[key][i] = import_from_openlibrary_by_ol_key(sub_item['key'])
if 'works' in item:
if len(item['works']) > 1:
raise Exception(f"Multiple works found for {isbn}")
else:
item['work'] = item['works'][0]
del item['works']
# Modify the returned result to add additional data
return cleanup_result(item, media_type)
def import_from_openlibrary_by_ol_key(key):
"""Retrieves an item (author or work) from OpenLibrary using an OL key"""
_, mode, ol_id = key.split('/')
if mode in ['works', 'authors']:
api_url = f"https://openlibrary.org{key}"
# Sending API request
response = requests.get(
api_url,
headers={'accept': 'application/json'}
)
# Process the response
if (200 == response.status_code):
logging.info(response.status_code)
elif (429 == response.status_code):
time.sleep(2)
import_from_openlibrary_by_ol_key(key)
return
else:
raise Exception(f"Error {reponse.status_code}: {response.text}")
item = json.loads(response.text)
if 'authors' == mode:
author = {
'id': ol_id,
'name': item['name']
}
if 'personal_name' in item:
if item['name'] != item['personal_name']: author['personal_name'] = item['personal_name']
return author
elif 'works' == mode:
work = {
'id': ol_id,
'title': item['title']
}
for key in ['first_publish_date', 'subjects']:
if key in item: work[key] = item[key]
return work
else:
raise Exception(f"Unknown OpenLibrary key '{mode}'")
def cleanup_result(item, media_type):
"""Process a film, TV series, TV episode or book returned by their respecitve APIs by removing unnecessary fields and adding others"""
for field_name in [
'adult', # TMDB
'backdrop_path', # TMDB
'copyright_date', # OpenLibrary
'classifications', # OpenLibrary
'created', # OpenLibrary
'episode_type', # TMDB
'first_sentence', # OpenLibrary
'genre_ids', # TMDB
'identifiers', # OpenLibrary
'media_type', # TMDB
'last_modified', # OpenLibrary
'latest_revision', # OpenLibrary
'lc_classifications', # OpenLibrary
'local_id', # OpenLibrary
'ocaid', # OpenLibrary
'popularity', # TMDB
'production_code', # TMDB
'revision', # OpenLibrary
'runtime', # TMDB
'source_records', # OpenLibrary
'still_path', # TMDB
'type', # OpenLibrary
'video', # TMDB
'vote_average', # TMDB
'vote_count' # TMDB
]:
if field_name in item: del item[field_name] if field_name in item: del item[field_name]
# TODO - select automatically if media_type in ['films', 'tv-series']:
title_key = 'name' title_key = 'name' if 'tv-series' == media_type else 'title'
if f"original_{title_key}" in item and 'original_language' in item: if f"original_{title_key}" in item and 'original_language' in item:
if item[f"original_{title_key}"] == item[title_key] and item['original_language'] == 'en': if item[f"original_{title_key}"] == item[title_key] and item['original_language'] == 'en':
del item[f"original_{title_key}"], item['original_language'] del item[f"original_{title_key}"], item['original_language']
if 'books' == media_type:
_, _, item['id'] = item['key'].split('/')
del item['key']
for key in ['isbn_10', 'isbn_13']:
if key in item:
if len(item[key]) > 1:
raise Exception("Multiple ISBN results")
else:
item[key] = item[key][0]
if 'publish_places' in item:
if len(item['publish_places']) > 1:
raise Exception("Multiple publish_places")
else:
item['published_in'] = item['publish_places'][0]
del item['publish_places']
if 'languages' in item:
item['languages'] = [lang['key'].split('/')[2] for lang in item['languages']]
if 'translation_of' in item:
if item['translation_of'] == item['work']['title']:
del item['translation_of']
else:
raise Exception(f"translation_of '{item['translation_of']}' is different to work title '{item['work']['title']}'")
if 'translated_from' in item:
if len(item['translated_from']) > 1:
raise Exception("Multiple translated_from results")
else:
item['work']['original_language'] = item['translated_from'][0]['key'].split('/')[2]
del item['translated_from']
if 'date_added' not in item: item['date_added'] = datetime.today().strftime('%Y-%m-%d') if 'date_added' not in item: item['date_added'] = datetime.today().strftime('%Y-%m-%d')
return item return item
@ -152,46 +318,53 @@ def cleanup_result(item):
def main(): def main():
media_type = '' media_type = ''
while media_type not in ['films', 'tv-episodes', 'tv-series', 'books']: while media_type not in ['films', 'tv-episodes', 'tv-series', 'books']:
media_type = input("Select media type [films|tv-episodes|tv-series|books]:") media_type = input("Select media type [films|tv-episodes|tv-series|books]: ")
try:
if 'films' == media_type: if 'films' == media_type:
log = '' log = ''
while log not in ['log', 'wishlist']: while log not in ['log', 'wishlist']:
log = input ("Enter log to update [log|wishlist]:") log = input ("Enter log to update [log|wishlist]: ")
imdb_id = '' imdb_id = ''
while re.search("tt[0-9]+", imdb_id) is None: while re.search("tt[0-9]+", imdb_id) is None:
imdb_id = input("Enter IMDB ID:") imdb_id = input("Enter IMDB ID: ")
add_item_to_log(imdb_id, media_type, log) add_item_to_log(imdb_id, media_type, log)
elif 'books' == media_type: elif 'books' == media_type:
log = '' log = ''
while log not in ['log', 'current', 'wishlist']: while log not in ['log', 'current', 'wishlist']:
log = input ("Enter log to update [log|current|wishlist]:") log = input ("Enter log to update [log|current|wishlist]: ")
isbn = '' isbn = ''
while re.search("[0-9]+", isbn) is None: while re.search("[0-9]+", isbn) is None:
isbn = input("Enter ISBN:") isbn = input("Enter ISBN: ")
add_item_to_log(isbn, media_type, log)
elif 'tv-episodes' == media_type: elif 'tv-episodes' == media_type:
imdb_id = '' imdb_id = ''
while re.search("tt[0-9]+", imdb_id) is None: while re.search("tt[0-9]+", imdb_id) is None:
imdb_id = input("Enter IMDB ID:") imdb_id = input("Enter IMDB ID: ")
add_item_to_log(imdb_id, media_type, 'log') add_item_to_log(imdb_id, media_type, 'log')
elif 'tv-series' == media_type: elif 'tv-series' == media_type:
log = '' log = ''
while log not in ['log', 'current', 'wishlist']: while log not in ['log', 'current', 'wishlist']:
log = input ("Enter log to update [log|current|wishlist]:") log = input ("Enter log to update [log|current|wishlist]: ")
imdb_id = '' imdb_id = ''
while re.search("tt[0-9]+", imdb_id) is None: while re.search("tt[0-9]+", imdb_id) is None:
imdb_id = input("Enter IMDB ID:") imdb_id = input("Enter IMDB ID: ")
add_item_to_log(imdb_id, media_type, log) add_item_to_log(imdb_id, media_type, log)
except Exception as error:
logging.error(repr(error))
print(error)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -14,11 +14,9 @@ load_dotenv()
TMDB_API_KEY = os.getenv('TMDB_API_KEY') TMDB_API_KEY = os.getenv('TMDB_API_KEY')
TVDB_API_KEY = os.getenv('TVDB_API_KEY') TVDB_API_KEY = os.getenv('TVDB_API_KEY')
OPENLIBRARY_API_KEY = os.getenv('OPENLIBRARY_API_KEY')
if "" == TMDB_API_KEY: logging.error("TMDB API key not found") if "" == TMDB_API_KEY: logging.error("TMDB API key not found")
if "" == TVDB_API_KEY: logging.error("TVDB API key not found") if "" == TVDB_API_KEY: logging.error("TVDB API key not found")
if "" == OPENLIBRARY_API_KEY: logging.error("OpenLibrary API key not found")
def process_log(media_type, log): def process_log(media_type, log):
logging.info(f"Processing {media_type}/{log}") logging.info(f"Processing {media_type}/{log}")
@ -41,29 +39,48 @@ def process_log(media_type, log):
if 'Date Added' in item: if 'Date Added' in item:
log_item_values['date_added'] = item['Date Added'] log_item_values['date_added'] = item['Date Added']
del item['Date Added'] del item['Date Added']
if 'Date Watched' in item: if 'Date Watched' in item:
log_item_values['date_watched'] = item['Date Watched'] log_item_values['date_finished'] = item['Date Watched']
del item['Date Watched'] del item['Date Watched']
if 'Rewatch' in item: if 'Rewatch' in item:
log_item_values['is_rewatch'] = item['Rewatch'] log_item_values['is_repeat'] = item['Rewatch']
del item['Rewatch'] del item['Rewatch']
if 'Comments' in item: if 'Comments' in item:
log_item_values['comments'] = item['Comments'] log_item_values['comments'] = item['Comments']
del item['Comments'] del item['Comments']
if 'Series Title' in item: if 'Series Title' in item:
log_item_values['series_title'] = item['Series Title'] log_item_values['series_title'] = item['Series Title']
del item['Series Title'] del item['Series Title']
if 'Episode Title' in item: if 'Episode Title' in item:
log_item_values['name'] = item['Episode Title'] log_item_values['name'] = item['Episode Title']
del item['Episode Title'] del item['Episode Title']
if 'Episode Number' in item: if 'Episode Number' in item:
split_num = log_item_values['episode_number'].split("E") if re.search("[0-9]+x[0-9]+", item['Episode Number']) is not None:
log_item_values['episode_number'] = split_num[1] season_no, _, episode_no = log_item_values['episode_number'].split("x")
log_item_values['season_number'] = split_num[0] or None
elif re.search("S[0-9]+E[0-9]+", item['Episode Number']) is not None:
season_no, _, episode_no = log_item_values['episode_number'].split("E")
elif re.search("E[0-9]+", item['Episode Number']) is not None:
season_no = None
episode_no = item['episode_number'][1:]
else:
logging.error(f"Invalid episode number format '{item['Episode Number']}'")
return
log_item_values['season_number'] = season_no
log_item_values['episode_number'] = episode_no
del item['Episode Number'] del item['Episode Number']
if 'IMDB ID' in item: if 'IMDB ID' in item:
log_items[i] = import_by_id(item['IMDB ID'], media_type) log_items[i] = import_by_id(item['IMDB ID'], media_type)
else: else:
log_items[i] = import_by_details(item, item_title, media_type) log_items[i] = import_by_details(item, item_title, media_type)
@ -75,6 +92,7 @@ def process_log(media_type, log):
with open(f"./data/{media_type}/{log}.json", "w") as log_file: with open(f"./data/{media_type}/{log}.json", "w") as log_file:
json.dump(log_items, log_file, indent=4) json.dump(log_items, log_file, indent=4)
else: else:
logging.warning(f"Skipped {item_title}") logging.warning(f"Skipped {item_title}")
@ -92,11 +110,16 @@ def process_log(media_type, log):
def import_by_details(item, item_title, media_type): def import_by_details(item, item_title, media_type):
if media_type in ['films', 'tv-series']: if media_type in ['films', 'tv-series']:
return import_from_tmdb_by_details(item, item_title, media_type) return import_from_tmdb_by_details(item, item_title, media_type)
elif media_type in ['tv-episodes']: elif media_type in ['tv-episodes']:
return #import_from_tvdb_by_details(item, item_title, media_type) return #import_from_tvdb_by_details(item, item_title, media_type)
elif media_type in ['books']: elif media_type in ['books']:
return #import_from_openlibrary_by_details(item, item_title, media_type) return #import_from_openlibrary_by_details(item, item_title, media_type)
elif media_type in ['games']:
return #import_from_igdb_by_details(item, item_title, media_type)
def import_from_tmdb_by_details(item, item_title, media_type): def import_from_tmdb_by_details(item, item_title, media_type):
"""Retrieve a film or TV series from TMDB using its title""" """Retrieve a film or TV series from TMDB using its title"""
@ -128,7 +151,7 @@ def import_from_tmdb_by_details(item, item_title, media_type):
response_data = json.loads(response.text)['results'] response_data = json.loads(response.text)['results']
if 1 == len(response_data): if 1 == len(response_data):
return cleanup_result(response_data[0]) return cleanup_result(response_data[0], media_type)
elif 0 == len(response_data): elif 0 == len(response_data):
logging.warning(f"Returned no {media_type} for {item_title}") logging.warning(f"Returned no {media_type} for {item_title}")
@ -140,7 +163,7 @@ def import_from_tmdb_by_details(item, item_title, media_type):
response_data = [result for result in response_data if result[title_key] == item_title] response_data = [result for result in response_data if result[title_key] == item_title]
if 1 == len(response_data): if 1 == len(response_data):
return cleanup_result(response_data[0]) return cleanup_result(response_data[0], media_type)
else: else:
logging.warning(f"Returned more than one {media_type} for '{item_title}':\n") logging.warning(f"Returned more than one {media_type} for '{item_title}':\n")
@ -149,7 +172,8 @@ def import_from_tmdb_by_details(item, item_title, media_type):
if "" != idx: if "" != idx:
try: try:
return cleanup_result(response_data[int(idx)]) return cleanup_result(response_data[int(idx)], media_type)
except: except:
logging.error("Index invalid!") logging.error("Index invalid!")
print("Index invalid!") print("Index invalid!")
@ -179,9 +203,13 @@ while media_type not in ['films', 'tv-episodes', 'tv-series', 'books']:
while log not in ['log', 'current', 'wishlist']: while log not in ['log', 'current', 'wishlist']:
log = input ("Enter log to process [log|current|wishlist]:") log = input ("Enter log to process [log|current|wishlist]:")
# TODO
elif 'tv-episodes' == media_type: elif 'tv-episodes' == media_type:
process_log(media_type, 'log') process_log(media_type, 'log')
# TODO
elif 'tv-series' == media_type: elif 'tv-series' == media_type:
log = '' log = ''
while log not in ['log', 'current', 'wishlist']: while log not in ['log', 'current', 'wishlist']: