100 件しか検索できなぃ問題修正

このコミットが含まれているのは:
2024-10-07 01:49:37 +09:00
コミット 9261d0c68d
+26 -13
ファイルの表示
@@ -1,16 +1,17 @@
from __future__ import annotations
import json import json
import os import os
import random import random
import string import string
import time import time
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime, timedelta
from typing import TypedDict, cast from typing import TypedDict, cast
import mysql.connector import mysql.connector
import requests import requests
DbNull = (None,) DbNull = (None,)
DbNullType = tuple[None] DbNullType = tuple[None]
@@ -69,7 +70,7 @@ def update_tables (
video = VideoDto (code = datum['contentId'], video = VideoDto (code = datum['contentId'],
title = datum['title'], title = datum['title'],
description = datum['description'], description = datum['description'],
uploaded_at = datum['startTime']) uploaded_at = datetime.fromisoformat (datum['startTime']))
video_dao.upsert (video, False) video_dao.upsert (video, False)
if video.id_ is not None: if video.id_ is not None:
video_history = VideoHistoryDto (video_id = video.id_, video_history = VideoHistoryDto (video_id = video.id_,
@@ -160,30 +161,42 @@ def search_nico_by_tag (
def search_nico_by_tags ( def search_nico_by_tags (
tags: list[str], tags: list[str],
) -> list[VideoResult]: ) -> list[VideoResult]:
today = datetime.now ()
url = ('https://snapshot.search.nicovideo.jp' url = ('https://snapshot.search.nicovideo.jp'
+ '/api/v2/snapshot/video/contents/search') + '/api/v2/snapshot/video/contents/search')
# TODO: 年月日の設定ができてゐなぃのと,100 件までしか取得できなぃので何とかすること result_data: list[VideoResult] = []
to = datetime (2022, 12, 3)
while to <= today:
time.sleep (1.2)
until = to + timedelta (days = 14)
query_filter = json.dumps ({ 'type': 'or', query_filter = json.dumps ({ 'type': 'or',
'filters': [ 'filters': [
{ 'type': 'range', { 'type': 'range',
'field': 'startTime', 'field': 'startTime',
'from': f"{year}-{start}T00:00:00+09:00", 'from': '%04d-%02d-%02dT00:00:00+09:00' % (to.year, to.month, to.day),
'to': f"{year}-{end}T23:59:59+09:00", 'to': '%04d-%02d-%02dT23:59:59+09:00' % (until.year, until.month, until.day),
'include_lower': True }] }) 'include_lower': True }] })
params: VideoSearchParam = { 'q': ' OR '.join (tags),
params: VideoSearchParam
params = { 'q': ' OR '.join (tags),
'targets': 'tagsExact', 'targets': 'tagsExact',
'_sort': '-viewCounter', '_sort': '-viewCounter',
'fields': 'contentId,title,tags,description,viewCounter,startTime', 'fields': ('contentId,'
'title,'
'tags,'
'description,'
'viewCounter,'
'startTime'),
'_limit': 100, '_limit': 100,
'jsonFilter': query_filter } 'jsonFilter': query_filter }
res = requests.get (url, params = cast (dict[str, int | str], params), timeout = 60).json () res = requests.get (url, params = cast (dict[str, int | str], params), timeout = 60).json ()
try:
result_data += res['data']
except KeyError:
pass
to = until + timedelta (days = 1)
return res['data'] return result_data
class VideoDao: class VideoDao: