1
0

#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 <marius@kleberonline.de>
This commit is contained in:
2022-04-21 23:36:01 +02:00
parent abf6ab0bf6
commit 6fe2fd4e76
7 changed files with 285 additions and 103 deletions

View File

@@ -6,10 +6,13 @@ name = "pypi"
[packages] [packages]
feedparser = "*" feedparser = "*"
notifypy = "*" notifypy = "*"
rich = "*"
notify-py = "*"
[dev-packages] [dev-packages]
feedparser = "*" feedparser = "*"
notifypy = "*" notifypy = "*"
rich = "*"
[requires] [requires]
python_version = "3.9" python_version = "3.10"

172
Pipfile.lock generated
View File

@@ -1,11 +1,11 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "7506f6a89bb55913a844cb70340725cbf1b1032cde16d7048231be79820ec318" "sha256": "c211ea65b3e62046f929673a2bd62a6e39ae18185245f81ed8f2c5e412bc9a1f"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
"python_version": "3.9" "python_version": "3.10"
}, },
"sources": [ "sources": [
{ {
@@ -25,11 +25,18 @@
}, },
"charset-normalizer": { "charset-normalizer": {
"hashes": [ "hashes": [
"sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0", "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597",
"sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b" "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"
], ],
"markers": "python_version >= '3'", "markers": "python_version >= '3'",
"version": "==2.0.7" "version": "==2.0.12"
},
"commonmark": {
"hashes": [
"sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60",
"sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"
],
"version": "==0.9.1"
}, },
"feedparser": { "feedparser": {
"hashes": [ "hashes": [
@@ -55,11 +62,11 @@
}, },
"jeepney": { "jeepney": {
"hashes": [ "hashes": [
"sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac", "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806",
"sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f" "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"
], ],
"markers": "sys_platform == 'linux'", "markers": "sys_platform == 'linux'",
"version": "==0.7.1" "version": "==0.8.0"
}, },
"loguru": { "loguru": {
"hashes": [ "hashes": [
@@ -84,28 +91,44 @@
"index": "pypi", "index": "pypi",
"version": "==1.0.3.0" "version": "==1.0.3.0"
}, },
"pygments": {
"hashes": [
"sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65",
"sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"
],
"markers": "python_version >= '3.5'",
"version": "==2.11.2"
},
"pyjwt": { "pyjwt": {
"hashes": [ "hashes": [
"sha256:a0b9a3b4e5ca5517cac9f1a6e9cd30bf1aa80be74fcdf4e28eded582ecfcfbae", "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41",
"sha256:b0ed5824c8ecc5362e540c65dc6247567db130c4226670bf7699aec92fb4dae1" "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.6'",
"version": "==2.2.0" "version": "==2.3.0"
}, },
"pytz": { "pytz": {
"hashes": [ "hashes": [
"sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c", "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7",
"sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326" "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"
], ],
"version": "==2021.3" "version": "==2022.1"
}, },
"requests": { "requests": {
"hashes": [ "hashes": [
"sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61",
"sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
], ],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "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": { "sgmllib3k": {
"hashes": [ "hashes": [
@@ -115,21 +138,44 @@
}, },
"twilio": { "twilio": {
"hashes": [ "hashes": [
"sha256:5d669bf92037cfa231bf8aa336b9e38763e18d16309ddbc5d66b21b00bbad157" "sha256:59ca119442f7ed037eb64f2c90e771432418a08874fed72da99e4375cf44ad8f",
"sha256:f8d4288d39d20b1f57240c002051224fdd63850f570812a62d9b025ee4954e43"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.6'",
"version": "==7.1.0" "version": "==7.8.2"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
"sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
"sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" "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'", "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.7" "version": "==1.26.9"
} }
}, },
"develop": { "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": { "feedparser": {
"hashes": [ "hashes": [
"sha256:1b7f57841d9cf85074deb316ed2c795091a238adb79846bc46dccdaf80f9c59a", "sha256:1b7f57841d9cf85074deb316ed2c795091a238adb79846bc46dccdaf80f9c59a",
@@ -138,35 +184,87 @@
"index": "pypi", "index": "pypi",
"version": "==6.0.8" "version": "==6.0.8"
}, },
"jeepney": { "gmail": {
"hashes": [ "hashes": [
"sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac", "sha256:3028711d4db7db5fa47c6ddd01f237360d7ce27a3f08997bb517ba811a8418ca"
"sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"
], ],
"markers": "sys_platform == 'linux'", "version": "==0.6.3"
"version": "==0.7.1"
}, },
"loguru": { "idna": {
"hashes": [ "hashes": [
"sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319", "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
"sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c" "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"
], ],
"markers": "python_version >= '3.5'", "markers": "python_version >= '3'",
"version": "==0.5.3" "version": "==3.3"
}, },
"notify-py": { "notifypy": {
"hashes": [ "hashes": [
"sha256:8561c7d363eddad3b07be11405135e168c2f52e42bdbfc7f2e613b07a8e7bae0", "sha256:c14bff0c5d2fb5c09572d2e7eccb4af542c6ad2160a6cfbad684ffef75f81c6b"
"sha256:9b9f689631ddba2ec1313fe4b4d19b8f1f032b38bbdc118b21cdd880c134e8a6"
], ],
"index": "pypi", "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": { "sgmllib3k": {
"hashes": [ "hashes": [
"sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9" "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"
], ],
"version": "==1.0.0" "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"
} }
} }
} }

View File

@@ -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 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. `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
###### Install dependencies ###### Install dependencies
`pip install feedparser notify-py` `pip install feedparser notify-py rich`
###### Clone repo ###### Clone repo
`git clone ...` `git clone ...`
###### Install systemd service and timer (optional) ###### Install systemd service and timer (optional)
@@ -44,7 +44,7 @@ actual anime name during feed parsing.
## Running and example output ## 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 feed: SubsPlease
Checking anime: Go-toubun no Hanayome S2 - Airing every Thursday 02/x Checking anime: Go-toubun no Hanayome S2 - Airing every Thursday 02/x
Checking anime: Jaku-Chara Tomozaki-kun - Airing every Friday 02/x Checking anime: Jaku-Chara Tomozaki-kun - Airing every Friday 02/x
@@ -64,3 +64,17 @@ localhost:9091/transmission/rpc/ responded: "success"
Both parameters are optional, if not given they are searched in the current working directory. 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. `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 │ │ │
│ │ │ │ │ │ │ │
└────────┴──────────────────┴────────────────────────────────────────────┴──────────────────────┴───────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────────┘
```

View File

@@ -1,3 +1,4 @@
from collections import defaultdict
import feedparser import feedparser
import json import json
import re import re
@@ -5,6 +6,9 @@ import subprocess
import argparse import argparse
from notifypy import Notify from notifypy import Notify
import os import os
import sys
from rich.console import Console
from rich.table import Table
feedparser.USER_AGENT = "anime-rss/1.0" feedparser.USER_AGENT = "anime-rss/1.0"
@@ -19,8 +23,9 @@ BOLD_GREEN = BOLD + GREEN
UNDERLINE = CSI + "4;4m" UNDERLINE = CSI + "4;4m"
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("c", help="path to the config.json file", type=str, default="config.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("-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() args = parser.parse_args()
@@ -43,6 +48,76 @@ def send_notification(message):
with open(args.a, "r") as feeds: with open(args.a, "r") as feeds:
feeds = json.load(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: with open(args.c, "r") as config:
config = json.load(config) config = json.load(config)

View File

@@ -3,4 +3,4 @@ Description=Check for and add new episodes via anime-rss
[Service] [Service]
Type=oneshot 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

View File

@@ -2,7 +2,7 @@
Description=Check for and add new anime via anime-rss Description=Check for and add new anime via anime-rss
[Timer] [Timer]
OnCalendar=*:0/55 OnCalendar=*:0/15
AccuracySec=1s AccuracySec=1s
Persistent=true Persistent=true

View File

@@ -1,69 +1,61 @@
{ {
"Feeds": [ "Feeds": [
{ {
"ID": "Nyaa Mushoku Tensei", "ID": "Subsplease",
"URL": "https://nyaa.si/?page=rss&q=%5BSubsPlease%5D+Mushoku+Tensei&c=0_0&f=0", "URL": "https://subsplease.org/rss/?t&r=1080",
"Animes": [ "Animes": [
{ {
"Title": "Mushoku Tensei", "Title": "Yuusha, Yamemasu",
"Local": "16", "Local": "03",
"Airing": "Sunday" "Airing": "Tuesday"
}
],
"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": "Isekai Quartet S2", "Title": "Aharen-san wa Hakarenai",
"Local": "12", "Local": "03",
"Airing": "Done" "Airing": "Friday"
} },
],
"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": "Darling in the FranXX", "Title": "Otome Game Sekai wa Mob ni Kibishii Sekai desu",
"Local": "24", "Local": "03",
"Airing": "Done" "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"
} }
] ]
} }