Rewrite downloader

This commit is contained in:
taizan-hokuto
2020-01-26 08:03:18 +09:00
parent 22b3ec2994
commit cc8bba8f63
3 changed files with 313 additions and 269 deletions

View File

@@ -0,0 +1,58 @@
import json
from .. import config
from .. exceptions import (
ResponseContextError,
NoContentsException,
NoContinuationsException )
logger = config.logger(__name__)
def parse(jsn):
"""
Parse replay chat data.
Parameter:
----------
jsn : dict
JSON of replay chat data.
Returns:
------
continuation : str
actions : list
"""
if jsn is None:
raise ValueError("parameter JSON is None")
if jsn['response']['responseContext'].get('errors'):
raise ResponseContextError('動画に接続できません。'
'動画IDが間違っているか、動画が削除非公開の可能性があります。')
contents=jsn['response'].get('continuationContents')
#配信が終了した場合、もしくはチャットデータが取得できない場合
if contents is None:
raise NoContentsException('チャットデータを取得できませんでした。')
cont = contents['liveChatContinuation']['continuations'][0]
if cont is None:
raise NoContinuationsException('Continuationがありません。')
metadata = cont.get('liveChatReplayContinuationData')
if metadata:
continuation = metadata.get("continuation")
actions = contents['liveChatContinuation'].get('actions')
return continuation, actions
return None, []
# if actions is None:
# return {"continuation":None,"chatdata":[]}
def get_offset(item):
return int(item['replayChatItemAction']["videoOffsetTimeMsec"])
def get_id(item):
#return list((list(item['replayChatItemAction']["actions"][0].values())[0])['item'].values())[0]['id']
return list(item['replayChatItemAction']['actions'][0]['addChatItemAction']['item'].values())[0]['id']
def get_type(item):
return list(item['replayChatItemAction']["actions"][0]['addChatItemAction']['item'].keys())[0]