ぼざろクリーチャーシリーズ DB 兼 API(自分用)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

70 lines
2.0 KiB

  1. # pylint: disable = missing-class-docstring
  2. # pylint: disable = missing-function-docstring
  3. """
  4. 全動画の情報を取得し,JSON 形式で出力する.
  5. """
  6. from __future__ import annotations
  7. import json
  8. import os
  9. from datetime import date, datetime
  10. from typing import TypedDict
  11. from eloquent import DatabaseManager, Model
  12. from db.models import Video
  13. def main (
  14. ) -> None:
  15. config: dict[str, DbConfig] = { 'mysql': { 'driver': 'mysql',
  16. 'host': 'localhost',
  17. 'database': 'nizika_nico',
  18. 'user': os.environ['MYSQL_USER'],
  19. 'password': os.environ['MYSQL_PASS'],
  20. 'prefix': '' } }
  21. db = DatabaseManager (config)
  22. Model.set_connection_resolver (db)
  23. videos: list[VideoDict] = []
  24. for row in Video.all ():
  25. deleted_at = row.deleted_at.date () if row.deleted_at else None
  26. video: VideoDict = { 'id': row.id,
  27. 'code': row.code,
  28. 'title': row.title,
  29. 'description': row.description,
  30. 'tags': [],
  31. 'uploaded_at': row.uploaded_at,
  32. 'deleted_at': deleted_at }
  33. for video_tag in row.video_tags:
  34. if video_tag.untagged_at is None:
  35. video['tags'].append (video_tag.tag.name)
  36. videos.append(video)
  37. print (json.dumps (videos, default = str))
  38. class DbConfig (TypedDict):
  39. driver: str
  40. host: str
  41. database: str
  42. user: str
  43. password: str
  44. prefix: str
  45. class VideoDict (TypedDict):
  46. id: int
  47. code: str
  48. title: str
  49. description: str
  50. tags: list[str]
  51. uploaded_at: datetime
  52. deleted_at: date | None
  53. if __name__ == '__main__':
  54. main ()