fumiaki-yoshida / ytdlp-json2csv

convert yt-dlp's json to csv.
MIT License
0 stars 0 forks source link

変換後のcsvファイルに一番最初にあるはずのデータが取れていない。 #10

Open fumiaki-yoshida opened 3 months ago

fumiaki-yoshida commented 3 months ago

取れていないJSONのコードであり、無視するべきではない。この形式のJSONを変換できるようにコードを書き換える。

{"clickTrackingParams": "CAEQl98BIhMInseQlJqGgwMV32EPAh2-aQm1", "replayChatItemAction": {"actions": [{"clickTrackingParams": "CAEQl98BIhMInseQlJqGgwMV32EPAh2-aQm1", "addChatItemAction": {"item": {"liveChatTextMessageRenderer": {"message": {"runs": [{"emoji": {"emojiId": "🍆", "shortcuts": [":eggplant:"], "searchTerms": ["eggplant"], "image": {"thumbnails": [{"url": "https://www.youtube.com/s/gaming/emoji/0f0cae22/emoji_u1f346.svg"}], "accessibility": {"accessibilityData": {"label": "🍆"}}}}}]}, "authorName": {"simpleText": "遼東半島"}, "authorPhoto": {"thumbnails": [{"url": "https://yt4.ggpht.com/ytc/APkrFKYlG6ECTqU-PpUmvdKiFJdxrDBod0d1n_T9UA=s32-c-k-c0x00ffffff-no-rj", "width": 32, "height": 32}, {"url": "https://yt4.ggpht.com/ytc/APkrFKYlG6ECTqU-PpUmvdKiFJdxrDBod0d1n_T9UA=s64-c-k-c0x00ffffff-no-rj", "width": 64, "height": 64}]}, "contextMenuEndpoint": {"clickTrackingParams": "CAEQl98BIhMInseQlJqGgwMV32EPAh2-aQm1", "commandMetadata": {"webCommandMetadata": {"ignoreNavigation": true}}, "liveChatItemContextMenuEndpoint": {"params": "Q2g0S0hBb2FRMDB0VDNCUFNFYzRPVzlEUmxWWGFHZG5iMlJ5U2tWRFRrRWFLU29uQ2hoVlEwbGtSVWxJY0ZNd1ZHUnJjVkpyU0V3MVQydE1kRUVTQzBobWNrWmZORGxUVkZadklBRW9BVElhQ2hoVlExcE5haTFSVTAxblNUQlROMDR4T0ZCUVZHNXdPRkU0QWtnQlVBRSUzRA=="}}, "id": "ChwKGkNNLU9wT0hHODlvQ0ZVV2hnZ29kckpFQ05B", "timestampUsec": "1525694457251663", "authorExternalChannelId": "UCZMj-QSMgI0S7N18PPTnp8Q", "contextMenuAccessibility": {"accessibilityData": {"label": "Chat actions"}}, "timestampText": {"simpleText": "0:26"}, "trackingParams": "CAEQl98BIhMInseQlJqGgwMV32EPAh2-aQm1"}}, "clientId": "CM-OpOHG89oCFUWhggodrJECNA"}}], "videoOffsetTimeMsec": "26197"}}

すでに取れている情報は以下の形式のjsonファイルです。

{"replayChatItemAction": {"actions": [{"addChatItemAction": {"item": {"liveChatTextMessageRenderer": {"message": {"runs": [{"text": "おはようございナース"}, {"emoji": {"emojiId": "🍆", "shortcuts": [":eggplant:"], "searchTerms": ["eggplant"], "image": {"thumbnails": [{"url": "https://www.youtube.com/s/gaming/emoji/0f0cae22/emoji_u1f346.svg"}], "accessibility": {"accessibilityData": {"label": "🍆"}}}}}]}, "authorName": {"simpleText": "シュウ・ウィッチ"}, "authorPhoto": {"thumbnails": [{"url": "https://yt4.ggpht.com/ytc/APkrFKbdM8nE7SFHZBbYW06bq-HNa8zbmaEXpV4pluZfdw=s32-c-k-c0x00ffffff-no-rj", "width": 32, "height": 32}, {"url": "https://yt4.ggpht.com/ytc/APkrFKbdM8nE7SFHZBbYW06bq-HNa8zbmaEXpV4pluZfdw=s64-c-k-c0x00ffffff-no-rj", "width": 64, "height": 64}]}, "contextMenuEndpoint": {"commandMetadata": {"webCommandMetadata": {"ignoreNavigation": true}}, "liveChatItemContextMenuEndpoint": {"params": "Q2g0S0hBb2FRMDF5YTNCMVNFYzRPVzlEUmxKYVptZDNiMlJXTkRCTWNIY2FLU29uQ2hoVlEwbGtSVWxJY0ZNd1ZHUnJjVkpyU0V3MVQydE1kRUVTQzBobWNrWmZORGxUVkZadklBRW9BVElhQ2hoVlExSlFSbUZFTkdoQ2NtWTRUbUZYVGs1WlRYcGlUMUU0QWtnQlVBRSUzRA=="}}, "id": "ChwKGkNNcmtwdUhHODlvQ0ZSWmZnd29kVjQwTHB3", "timestampUsec": "1525694457295434", "authorExternalChannelId": "UCRPFaD4hBrf8NaWNNYMzbOQ", "contextMenuAccessibility": {"accessibilityData": {"label": "Chat actions"}}, "timestampText": {"simpleText": "0:26"}}}, "clientId": "CMrkpuHG89oCFRZfgwodV40Lpw"}}], "videoOffsetTimeMsec": "26241"}}

clickTrackingParams からキーが始まるタイプのjsonを読み取れるように書き換える。

fumiaki-yoshida commented 3 months ago

理由を調べる必要がある。バグの温床になる可能性がある。

fumiaki-yoshida commented 3 months ago

json2csv.py の条件分岐のところに問題がある。 関数のsplit_comment_and_clickTrackingParamsで問題となっている取れていない条件と、現状使っており取れている条件を分けている。取れていない条件は現状ではその後の処理に使用していない。

dat = json.load(lines[0) 
dat["replayChatItemAction"]["actions"][0]["addLiveChatTickerItemAction"]

という形式のデータに対応していないため、clickTrackingParamsの条件のものは取れていない

fumiaki-yoshida commented 2 months ago

理想的なコードは以下のようになるはず。

if _has_chat_item(dat):
    make_dict_for_chat_item(dat,message_dict)
elif _has_addLiveChatTickerItemAction(dat):
   make_dict_for_LiveChatTicker(dat,message_dict)
else:
   continue
YukiInoueNakata commented 2 months ago

現在取得できていないclickTrackingParamsは現在取れているreplayChatItemActionと構造は同じで,並列として存在していた