From 6fe2fd4e76fe5e4681618a83c38252c0281813ab Mon Sep 17 00:00:00 2001 From: MK13 Date: Thu, 21 Apr 2022 23:36:01 +0200 Subject: [PATCH] #6 Calendar view Add a calendar view Update required python version to 3.10 Correct config and animes flags to -c and -a Change timer tick rate to every 15mins instead of 55mins Update readme Signed-off-by: MK13 --- Pipfile | 5 +- Pipfile.lock | 172 ++++++++++++++++++++++++++++++++++++---------- README.md | 22 ++++-- anime-rss.py | 81 +++++++++++++++++++++- anime-rss.service | 2 +- anime-rss.timer | 2 +- animes.json | 104 +++++++++++++--------------- 7 files changed, 285 insertions(+), 103 deletions(-) diff --git a/Pipfile b/Pipfile index 8484e38..e7dd628 100644 --- a/Pipfile +++ b/Pipfile @@ -6,10 +6,13 @@ name = "pypi" [packages] feedparser = "*" notifypy = "*" +rich = "*" +notify-py = "*" [dev-packages] feedparser = "*" notifypy = "*" +rich = "*" [requires] -python_version = "3.9" +python_version = "3.10" diff --git a/Pipfile.lock b/Pipfile.lock index 20d3f04..d098002 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "7506f6a89bb55913a844cb70340725cbf1b1032cde16d7048231be79820ec318" + "sha256": "c211ea65b3e62046f929673a2bd62a6e39ae18185245f81ed8f2c5e412bc9a1f" }, "pipfile-spec": 6, "requires": { - "python_version": "3.9" + "python_version": "3.10" }, "sources": [ { @@ -25,11 +25,18 @@ }, "charset-normalizer": { "hashes": [ - "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0", - "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b" + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" ], "markers": "python_version >= '3'", - "version": "==2.0.7" + "version": "==2.0.12" + }, + "commonmark": { + "hashes": [ + "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", + "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" + ], + "version": "==0.9.1" }, "feedparser": { "hashes": [ @@ -55,11 +62,11 @@ }, "jeepney": { "hashes": [ - "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac", - "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f" + "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" ], "markers": "sys_platform == 'linux'", - "version": "==0.7.1" + "version": "==0.8.0" }, "loguru": { "hashes": [ @@ -84,28 +91,44 @@ "index": "pypi", "version": "==1.0.3.0" }, + "pygments": { + "hashes": [ + "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", + "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" + ], + "markers": "python_version >= '3.5'", + "version": "==2.11.2" + }, "pyjwt": { "hashes": [ - "sha256:a0b9a3b4e5ca5517cac9f1a6e9cd30bf1aa80be74fcdf4e28eded582ecfcfbae", - "sha256:b0ed5824c8ecc5362e540c65dc6247567db130c4226670bf7699aec92fb4dae1" + "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41", + "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f" ], "markers": "python_version >= '3.6'", - "version": "==2.2.0" + "version": "==2.3.0" }, "pytz": { "hashes": [ - "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c", - "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326" + "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", + "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" ], - "version": "==2021.3" + "version": "==2022.1" }, "requests": { "hashes": [ - "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", - "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" + "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", + "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==2.26.0" + "version": "==2.27.1" + }, + "rich": { + "hashes": [ + "sha256:c50f3d253bc6a9bb9c79d61a26d510d74abdf1b16881260fab5edfc3edfb082f", + "sha256:ea74bc9dad9589d8eea3e3fd0b136d8bf6e428888955f215824c2894f0da8b47" + ], + "index": "pypi", + "version": "==12.2.0" }, "sgmllib3k": { "hashes": [ @@ -115,21 +138,44 @@ }, "twilio": { "hashes": [ - "sha256:5d669bf92037cfa231bf8aa336b9e38763e18d16309ddbc5d66b21b00bbad157" + "sha256:59ca119442f7ed037eb64f2c90e771432418a08874fed72da99e4375cf44ad8f", + "sha256:f8d4288d39d20b1f57240c002051224fdd63850f570812a62d9b025ee4954e43" ], "markers": "python_version >= '3.6'", - "version": "==7.1.0" + "version": "==7.8.2" }, "urllib3": { "hashes": [ - "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", - "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" + "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", + "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.7" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_full_version < '4.0.0'", + "version": "==1.26.9" } }, "develop": { + "certifi": { + "hashes": [ + "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", + "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + ], + "version": "==2021.10.8" + }, + "charset-normalizer": { + "hashes": [ + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" + ], + "markers": "python_version >= '3'", + "version": "==2.0.12" + }, + "commonmark": { + "hashes": [ + "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", + "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" + ], + "version": "==0.9.1" + }, "feedparser": { "hashes": [ "sha256:1b7f57841d9cf85074deb316ed2c795091a238adb79846bc46dccdaf80f9c59a", @@ -138,35 +184,87 @@ "index": "pypi", "version": "==6.0.8" }, - "jeepney": { + "gmail": { "hashes": [ - "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac", - "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f" + "sha256:3028711d4db7db5fa47c6ddd01f237360d7ce27a3f08997bb517ba811a8418ca" ], - "markers": "sys_platform == 'linux'", - "version": "==0.7.1" + "version": "==0.6.3" }, - "loguru": { + "idna": { "hashes": [ - "sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319", - "sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c" + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "markers": "python_version >= '3.5'", - "version": "==0.5.3" + "markers": "python_version >= '3'", + "version": "==3.3" }, - "notify-py": { + "notifypy": { "hashes": [ - "sha256:8561c7d363eddad3b07be11405135e168c2f52e42bdbfc7f2e613b07a8e7bae0", - "sha256:9b9f689631ddba2ec1313fe4b4d19b8f1f032b38bbdc118b21cdd880c134e8a6" + "sha256:c14bff0c5d2fb5c09572d2e7eccb4af542c6ad2160a6cfbad684ffef75f81c6b" ], "index": "pypi", - "version": "==0.3.3" + "version": "==1.0.3.0" + }, + "pygments": { + "hashes": [ + "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", + "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" + ], + "markers": "python_version >= '3.5'", + "version": "==2.11.2" + }, + "pyjwt": { + "hashes": [ + "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41", + "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f" + ], + "markers": "python_version >= '3.6'", + "version": "==2.3.0" + }, + "pytz": { + "hashes": [ + "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", + "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" + ], + "version": "==2022.1" + }, + "requests": { + "hashes": [ + "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", + "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.27.1" + }, + "rich": { + "hashes": [ + "sha256:c50f3d253bc6a9bb9c79d61a26d510d74abdf1b16881260fab5edfc3edfb082f", + "sha256:ea74bc9dad9589d8eea3e3fd0b136d8bf6e428888955f215824c2894f0da8b47" + ], + "index": "pypi", + "version": "==12.2.0" }, "sgmllib3k": { "hashes": [ "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9" ], "version": "==1.0.0" + }, + "twilio": { + "hashes": [ + "sha256:59ca119442f7ed037eb64f2c90e771432418a08874fed72da99e4375cf44ad8f", + "sha256:f8d4288d39d20b1f57240c002051224fdd63850f570812a62d9b025ee4954e43" + ], + "markers": "python_version >= '3.6'", + "version": "==7.8.2" + }, + "urllib3": { + "hashes": [ + "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", + "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_full_version < '4.0.0'", + "version": "==1.26.9" } } } diff --git a/README.md b/README.md index 36ebcb7..5aab91a 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ running `anime-rss`. Further `transmission-remote` needs to be on the path. In the Transmission config file `~/.config/transmission-daemon/settings.json` check the `rpc-` properties, as `anime-rss` uses `transmission-remote` which sends the torrent URLs to Transmission via RPC. -Also requires at least Python `3.9`. +Also requires at least Python `3.10`. ## Install ###### Install dependencies -`pip install feedparser notify-py` +`pip install feedparser notify-py rich` ###### Clone repo `git clone ...` ###### Install systemd service and timer (optional) @@ -44,7 +44,7 @@ actual anime name during feed parsing. ## Running and example output ``` -[MK13@brutebox ~]$ python path/to/anime-rss.py path/to/config.json path/to/animes.json +[MK13@brutebox ~]$ python path/to/anime-rss.py -c path/to/config.json -a path/to/animes.json Checking feed: SubsPlease Checking anime: Go-toubun no Hanayome S2 - Airing every Thursday 02/x Checking anime: Jaku-Chara Tomozaki-kun - Airing every Friday 02/x @@ -63,4 +63,18 @@ localhost:9091/transmission/rpc/ responded: "success" ``` Both parameters are optional, if not given they are searched in the current working directory. -`anime-rss` also outputs colored and formatted text via ANSI escape sequences if supported. \ No newline at end of file +`anime-rss` also outputs colored and formatted text via ANSI escape sequences if supported. +### Calendar view +If given the `-t` flag `anime-rss` will output a calendar view of all configured animes: +``` Animes +┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Monday ┃ Tuesday ┃ Wednesday ┃ Thursday ┃ Friday ┃ Saturday ┃ Sunday ┃ +┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ +│ │ Yuusha, Yamemasu │ Tate no Yuusha no Nariagari S2 │ Mahoutsukai Reimeiki │ Kaguya-sama wa Kokurasetai S3 │ Spy x Family │ Otome Game Sekai wa Mob ni Kibishii Sekai │ +│ │ │ │ │ │ │ desu │ +│ │ │ Shijou Saikyou no Daimaou, Murabito A ni │ │ Date A Live IV │ Kawaii dake ja Nai Shikimori-san │ │ +│ │ │ Tensei suru │ │ │ │ │ +│ │ │ │ │ Aharen-san wa Hakarenai │ │ │ +│ │ │ │ │ │ │ │ +└────────┴──────────────────┴────────────────────────────────────────────┴──────────────────────┴───────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────────┘ +``` \ No newline at end of file diff --git a/anime-rss.py b/anime-rss.py index f325c32..cd9f745 100644 --- a/anime-rss.py +++ b/anime-rss.py @@ -1,3 +1,4 @@ +from collections import defaultdict import feedparser import json import re @@ -5,6 +6,9 @@ import subprocess import argparse from notifypy import Notify import os +import sys +from rich.console import Console +from rich.table import Table feedparser.USER_AGENT = "anime-rss/1.0" @@ -19,8 +23,9 @@ BOLD_GREEN = BOLD + GREEN UNDERLINE = CSI + "4;4m" parser = argparse.ArgumentParser() -parser.add_argument("c", help="path to the config.json file", type=str, default="config.json", nargs='?') -parser.add_argument("a", help="path to the animes.json file", type=str, default="animes.json", nargs='?') +parser.add_argument("-c", help="path to the config.json file", type=str, default="config.json", nargs='?') +parser.add_argument("-a", help="path to the animes.json file", type=str, default="animes.json", nargs='?') +parser.add_argument("-t", help="print a tabular calendar view and exit", action="store_true") args = parser.parse_args() @@ -39,10 +44,80 @@ def send_notification(message): notification.icon = os.path.dirname(os.path.realpath(__file__)) + "/notfication-icon.png" notification.send() - + with open(args.a, "r") as feeds: feeds = json.load(feeds) +if args.t: + table = Table(title="Animes") + + table.add_column("Monday") + table.add_column("Tuesday") + table.add_column("Wednesday") + table.add_column("Thursday") + table.add_column("Friday") + table.add_column("Saturday") + table.add_column("Sunday") + + buckets = defaultdict(list) + + for feed in feeds["Feeds"]: + for anime in feed["Animes"]: + day = anime["Airing"].lower() + + buckets[day].append(anime["Title"]) + + while buckets.items(): + monday = "" + tuesday = "" + wednesday = "" + thursday = "" + friday = "" + saturday = "" + sunday = "" + + if len(buckets["monday"]) > 0: + monday = buckets["monday"].pop(len(buckets["monday"]) - 1) + else: + buckets.pop("monday") + + if len(buckets["tuesday"]) > 0: + tuesday = buckets["tuesday"].pop(len(buckets["tuesday"]) - 1) + else: + buckets.pop("tuesday") + + if len(buckets["wednesday"]) > 0: + wednesday = buckets["wednesday"].pop(len(buckets["wednesday"]) - 1) + else: + buckets.pop("wednesday") + + if len(buckets["thursday"]) > 0: + thursday = buckets["thursday"].pop(len(buckets["thursday"]) - 1) + else: + buckets.pop("thursday") + + if len(buckets["friday"]) > 0: + friday = buckets["friday"].pop(len(buckets["friday"]) - 1) + else: + buckets.pop("friday") + + if len(buckets["saturday"]) > 0: + saturday = buckets["saturday"].pop(len(buckets["saturday"]) - 1) + else: + buckets.pop("saturday") + + if len(buckets["sunday"]) > 0: + sunday = buckets["sunday"].pop(len(buckets["sunday"]) - 1) + else: + buckets.pop("sunday") + + table.add_row(monday, tuesday, wednesday, thursday, friday, saturday, sunday) + + console = Console() + console.print(table, justify="center") + + sys.exit(0) + with open(args.c, "r") as config: config = json.load(config) diff --git a/anime-rss.service b/anime-rss.service index efbb83c..6df553a 100644 --- a/anime-rss.service +++ b/anime-rss.service @@ -3,4 +3,4 @@ Description=Check for and add new episodes via anime-rss [Service] Type=oneshot -ExecStart=python PATH/anime-rss.py PATH/config.json PATH/animes.json +ExecStart=python PATH/anime-rss.py -c PATH/config.json -a PATH/animes.json diff --git a/anime-rss.timer b/anime-rss.timer index f410a92..262e2d5 100644 --- a/anime-rss.timer +++ b/anime-rss.timer @@ -2,7 +2,7 @@ Description=Check for and add new anime via anime-rss [Timer] -OnCalendar=*:0/55 +OnCalendar=*:0/15 AccuracySec=1s Persistent=true diff --git a/animes.json b/animes.json index 2463709..9806e18 100644 --- a/animes.json +++ b/animes.json @@ -1,69 +1,61 @@ { "Feeds": [ { - "ID": "Nyaa Mushoku Tensei", - "URL": "https://nyaa.si/?page=rss&q=%5BSubsPlease%5D+Mushoku+Tensei&c=0_0&f=0", + "ID": "Subsplease", + "URL": "https://subsplease.org/rss/?t&r=1080", "Animes": [ { - "Title": "Mushoku Tensei", - "Local": "16", - "Airing": "Sunday" - } - ], - "Episode-Regex": "\\[SubsPlease\\] $SHOWS$ - (\\d{2,2}) \\(1080p\\) \\[[A-Z0-9]{8,8}\\].mkv" - }, - { - "ID": "Sekai Saikou no Ansatsusha, Isekai Kizoku ni Tensei suru", - "URL": "https://nyaa.si/?page=rss&q=%5BSubsPlease%5D+Sekai+Saikou+no+Ansatsusha%2C+Isekai+Kizoku+ni+Tensei+suru+1080&c=0_0&f=0", - "Animes": [ - { - "Title": "Sekai Saikou no Ansatsusha, Isekai Kizoku ni Tensei suru", - "Local": "05", - "Airing": "Wednesday" - } - ], - "Episode-Regex": "\\[SubsPlease\\] $SHOWS$ - (\\d{2,2}) \\(1080p\\) \\[[A-Z0-9]{8,8}\\].mkv" - }, - { - "ID": "Nyaa - Ore ga Suki nano wa Imouto dakedo Imouto ja Nai", - "URL": "https://nyaa.si/?page=rss&q=Ore+ga+Suki+nano+wa+Imouto+dakedo+Imouto+ja+Nai+-+%5Bblad761%5D&c=0_0&f=0", - "Animes": [ - { - "Title": "Ore ga Suki nano wa Imouto dakedo Imouto ja Nai", - "Local": "12", - "Airing": "Done" - } - ], - "Episode-Regex": "$SHOWS$ - (\\d{2,2}) (OVA ){0,1}\\(Uncen\\) \\[blad761\\] \\[MKV 8-bit AAC\\] \\[[A-Z0-9]{8,8}\\](.mkv){0,1}" - }, - { - "ID": "Nyaa - Isekai Quartet 1+2", - "URL": "https://nyaa.si/?page=rss&q=%5BHorribleSubs%5D+Isekai+Quartet+1080&c=0_0&f=0", - "Animes": [ - { - "Title": "Isekai Quartet", - "Local": "12", - "Airing": "Done" + "Title": "Yuusha, Yamemasu", + "Local": "03", + "Airing": "Tuesday" }, { - "Title": "Isekai Quartet S2", - "Local": "12", - "Airing": "Done" - } - ], - "Episode-Regex": "\\[HorribleSubs\\] $SHOWS$ - (\\d{2,2}) \\[1080p\\].mkv" - }, - { - "ID": "Nyaa - Darling in the FranXX", - "URL": "https://nyaa.si/?page=rss&q=%5BHorribleSubs%5D+Darling+in+the+FranXX+-+1080&c=0_0&f=0", - "Animes": [ + "Title": "Aharen-san wa Hakarenai", + "Local": "03", + "Airing": "Friday" + }, { - "Title": "Darling in the FranXX", - "Local": "24", - "Airing": "Done" + "Title": "Otome Game Sekai wa Mob ni Kibishii Sekai desu", + "Local": "03", + "Airing": "Sunday" + }, + { + "Title": "Shijou Saikyou no Daimaou, Murabito A ni Tensei suru", + "Local": "03", + "Airing": "Wednesday" + }, + { + "Title": "Tate no Yuusha no Nariagari S2", + "Local": "03", + "Airing": "Wednesday" + }, + { + "Title": "Mahoutsukai Reimeiki", + "Local": "03", + "Airing": "Thursday" + }, + { + "Title": "Date A Live IV", + "Local": "02", + "Airing": "Friday" + }, + { + "Title": "Kaguya-sama wa Kokurasetai S3", + "Local": "02", + "Airing": "Friday" + }, + { + "Title": "Kawaii dake ja Nai Shikimori-san", + "Local": "02", + "Airing": "Saturday" + }, + { + "Title": "Spy x Family", + "Local": "02", + "Airing": "Saturday" } ], - "Episode-Regex": "\\[HorribleSubs\\] $SHOWS$ - (\\d{2,2}) \\[1080p\\].mkv" + "Episode-Regex": "\\[SubsPlease\\] $SHOWS$ - (\\d{2,2}) \\(1080p\\) \\[[A-Z0-9]{8,8}\\].mkv" } ] } \ No newline at end of file