diff options
| author | Fuwn <[email protected]> | 2025-06-29 07:25:16 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-29 07:25:16 -0700 |
| commit | 0469c2da8e6ff3acdcd70c8f01157bf3f15a2282 (patch) | |
| tree | cf65b2cc7a9f0b7309f5971e095e65bce0f4c6ee /src | |
| download | oguri-0469c2da8e6ff3acdcd70c8f01157bf3f15a2282.tar.xz oguri-0469c2da8e6ff3acdcd70c8f01157bf3f15a2282.zip | |
feat: Initial commit
Diffstat (limited to 'src')
| -rw-r--r-- | src/oguri/__init__.py | 92 | ||||
| -rw-r--r-- | src/oguri/__main__.py | 5 |
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())) |