feat: タグと関係なしに追跡する動画リスト追加 (#16)

#15 タグ関係なく追跡する動画リスト

Co-authored-by: miteruzo <miteruzo@naver.com>
Reviewed-on: #16
このコミットはPull リクエスト #16 でマージされました.
このコミットが含まれているのは:
2026-01-01 14:00:11 +09:00
コミット a3d9d0bfd7
3個のファイルの変更40行の追加11行の削除
+7
ファイルの表示
@@ -58,6 +58,13 @@ class Tag (Model):
return self.has_many (VideoTag)
class TrackedVideo (Model):
id: int
code: str
__timestamps__ = False
class User (Model):
id: int
code: str
+2
ファイルの表示
@@ -0,0 +1,2 @@
CREATE TABLE `nizika_nico`.`tracked_videos` (`id` BIGINT NOT NULL AUTO_INCREMENT , `code` VARCHAR(16) NOT NULL COMMENT '動画コード' , PRIMARY KEY (`id`)) ENGINE = InnoDB COMMENT = '追跡対象動画';
ALTER TABLE `tracked_videos` ADD UNIQUE(`code`);
+31 -11
ファイルの表示
@@ -21,7 +21,13 @@ import requests
from eloquent import DatabaseManager, Model
from db.config import DB
from db.models import Comment, Tag, User, Video, VideoHistory, VideoTag
from db.models import (Comment,
Tag,
TrackedVideo,
User,
Video,
VideoHistory,
VideoTag)
def main (
@@ -115,9 +121,9 @@ def update_tables (
video.save ()
def fetch_comments (
def fetch_video_data (
video_code: str,
) -> list[CommentResult]:
) -> dict[str, Any]:
time.sleep (1.2)
headers = { 'X-Frontend-Id': '6',
@@ -132,10 +138,14 @@ def fetch_comments (
url = (f"https://www.nicovideo.jp/api/watch/v3_guest/{ video_code }"
+ f"?actionTrackId={ action_track_id }")
res = requests.post (url, headers = headers, timeout = 60).json ()
return requests.post (url, headers = headers, timeout = 60).json ()
def fetch_comments (
video_code: str,
) -> list[CommentResult]:
try:
nv_comment = res['data']['comment']['nvComment']
nv_comment = fetch_video_data (video_code)['data']['comment']['nvComment']
except KeyError:
return []
if nv_comment is None:
@@ -162,12 +172,6 @@ def fetch_comments (
return []
def search_nico_by_tag (
tag: str,
) -> list[VideoResult]:
return search_nico_by_tags ([tag])
def search_nico_by_tags (
tags: list[str],
) -> list[VideoResult]:
@@ -209,6 +213,22 @@ def search_nico_by_tags (
pass
to = until + timedelta (days = 1)
for video in TrackedVideo.get ():
if video.code in map (lambda v: v['contentId'], result_data):
continue
try:
video_data = fetch_video_data (video.code)['data']
result_data.append ({
'contentId': video.code,
'title': video_data['video']['title'],
'tags': ' '.join (map (lambda t: t['name'],
video_data['tag']['items'])),
'description': video_data['video']['description'],
'viewCounter': video_data['video']['count']['view'],
'startTime': video_data['video']['registeredAt'] })
except Exception:
pass
return result_data