aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-29 07:25:16 -0700
committerFuwn <[email protected]>2025-06-29 07:25:16 -0700
commit0469c2da8e6ff3acdcd70c8f01157bf3f15a2282 (patch)
treecf65b2cc7a9f0b7309f5971e095e65bce0f4c6ee /src
downloadoguri-0469c2da8e6ff3acdcd70c8f01157bf3f15a2282.tar.xz
oguri-0469c2da8e6ff3acdcd70c8f01157bf3f15a2282.zip
feat: Initial commit
Diffstat (limited to 'src')
-rw-r--r--src/oguri/__init__.py92
-rw-r--r--src/oguri/__main__.py5
2 files changed, 97 insertions, 0 deletions
diff --git a/src/oguri/__init__.py b/src/oguri/__init__.py
new file mode 100644
index 0000000..3720668
--- /dev/null
+++ b/src/oguri/__init__.py
@@ -0,0 +1,92 @@
+from anilist_client import Client
+from anilist_client.custom_fields import (
+ AiringScheduleFields,
+ MediaFields,
+ MediaTitleFields,
+ PageFields,
+)
+from anilist_client.custom_queries import Query
+from datetime import datetime
+
+
+async def main() -> int:
+ client = Client(url="https://graphql.anilist.co")
+ airing_schedules_query = Query.page().fields(
+ PageFields.airing_schedules().fields(
+ AiringScheduleFields.airing_at,
+ AiringScheduleFields.episode,
+ AiringScheduleFields.media().fields(
+ MediaFields.title().fields(
+ MediaTitleFields.english(),
+ MediaTitleFields.romaji(),
+ MediaTitleFields.native(),
+ )
+ ),
+ )
+ )
+
+ try:
+ response = await client.query(
+ airing_schedules_query, operation_name="get_airing_schedules"
+ )
+
+ if response:
+ page = response.get("Page")
+
+ if page:
+ airing_schedules = page.get("airingSchedules")
+
+ if airing_schedules:
+ for schedule in airing_schedules:
+ airing_at = schedule.get("airingAt")
+ episode = schedule.get("episode")
+ titles = schedule.get("media").get("title")
+ title = (
+ titles.get("english")
+ or titles.get("romaji")
+ or titles.get("native")
+ )
+
+ if airing_at:
+ airing_at_date = datetime.fromtimestamp(airing_at)
+ relative_airing_at = relative_time(airing_at_date)
+ to_print = f"{title} Ep. {episode} "
+
+ if datetime.now() > airing_at_date:
+ to_print += f"has already aired {relative_airing_at}"
+ else:
+ to_print += f"is airing at {airing_at_date}"
+
+ print(to_print)
+ except Exception as exception:
+ print(exception)
+
+ return 1
+
+ return 0
+
+
+def relative_time(date):
+ now = datetime.now()
+ delta = now - date
+
+ if delta.days > 365:
+ return f"{delta.days // 365} years ago"
+ elif delta.days > 30:
+ return f"{delta.days // 30} months ago"
+ elif delta.days > 7:
+ return f"{delta.days // 7} weeks ago"
+ elif delta.days > 1:
+ return f"{delta.days} days ago"
+ elif delta.seconds > 3600:
+ return f"{delta.seconds // 3600} hours ago"
+ elif delta.seconds > 60:
+ return f"{delta.seconds // 60} minutes ago"
+ else:
+ return f"{delta.seconds} seconds ago"
+
+
+def main_script():
+ import asyncio
+
+ asyncio.run(main())
diff --git a/src/oguri/__main__.py b/src/oguri/__main__.py
new file mode 100644
index 0000000..7b4d22f
--- /dev/null
+++ b/src/oguri/__main__.py
@@ -0,0 +1,5 @@
+import oguri
+import sys
+import asyncio
+
+sys.exit(asyncio.run(oguri.main()))