|
- """
- ニコニコのニジカ動画取得モヂュール
- """
-
- from typing import TypedDict
-
- import requests
- from bs4 import BeautifulSoup
- from requests.exceptions import Timeout
-
-
- class VideoInfo (TypedDict):
- contentId: str
- title: str
- tags: list[str]
- description: str
-
-
- def get_latest_deerjika (
- ) -> VideoInfo | None:
- tag = '伊地知ニジカ OR ぼざろクリーチャーシリーズ'
- url = f"https://www.nicovideo.jp/tag/{ tag }"
-
- params = { 'sort': 'f',
- 'order': 'd' }
-
- video_info = { }
-
- bs = get_bs_from_url (url, params)
- if bs is None:
- return None
-
- try:
- video = (bs.find_all ('ul', class_ = 'videoListInner')[1]
- .find ('li', class_ = 'item'))
-
- video_info['contentId'] = video['data-video-id']
- except Exception:
- return None
-
- bs = get_bs_from_url ('https://www.nicovideo.jp/watch/'
- + video_info['contentId'])
- if bs is None:
- return None
-
- try:
- video_info['title'] = '-'.join (bs.find ('title').text.split ('-')[:(-1)])[:(-1)]
-
- tags = bs.find ('meta', attrs = { 'name': 'keywords' }).get ('content')
- video_info['tags'] = tags.split (',')
-
- video_info['description'] = bs.find ('meta', attrs = { 'name': 'description' }).get ('content')
- except Exception:
- return None
-
- return video_info
-
-
- def get_bs_from_url (
- url: str,
- params: dict = { },
- ) -> BeautifulSoup | None:
- """
- URL から BeautifulSoup インスタンス生成
-
- Parameters
- ----------
- url: str
- 捜査する URL
- params: dict
- パラメータ
-
- Return
- ------
- BeautifulSoup | None
- BeautifulSoup オブゼクト(失敗したら None)
- """
-
- try:
- req = requests.get (url, params = params, timeout = 60)
- except Timeout:
- return None
-
- if req.status_code != 200:
- return None
-
- req.encoding = req.apparent_encoding
-
- return BeautifulSoup (req.text, 'html.parser')
|