google colab利用備忘録 タイムスタンプ取得編
前回からの続きです
youtubeから
「再生リスト」にある動画のコメントを取得して
テキスト(CSVあるいはJSON)形式で取り出してgoogledriveなどに保存しておく必要があります。。
ソースコード
今回のソースコードはこちらです。
前回やったgoogledrive接続のおまじないは別途やっておく必要があります。
import os
import glob
import json
import re
#出力ファイル名
output_file = "/content/drive/MyDrive/AI/youtube_come_T/timestamp_comme.txt"
#特定ディレクトリ配下の対象ファイルを読み込む。
file_list = glob.glob("/content/drive/MyDrive/AI/youtube_come_J/*")
#一ファイルずつ処理する際、ファイル名(fname)だけ保持しておく(後でデータに入れる)
for filepath in file_list:
texts = []
onefile = os.path.basename(filepath)
fname, fext = os.path.splitext(onefile)
#ファイルを読み込んでlinesに落とし込む
with open(filepath,'r') as f:
lines = f.readlines()
# データを1行ずつ処理する(結果、textsに欲しいデータが入る)
for line in lines:
data = json.loads(line)
comes_data = data.get("text")
#タイムスタンプのあるコメントを取り出す(textsに追加する)
if re.search(r'\b\d{1,2}:\d{1,2}:\d{1,2}\b|\b\d{1,2}:\d{1,2}\b', comes_data):
texts.append(comes_data)
# textsの内容を書き込み
with open(output_file, 'a' if os.path.exists(output_file) else 'w') as file:
for text in texts:
#ファイル名を00のタイムスタンプで記載しておく (データ整理用)
file.write("\r\n00:00:00 " + fname + "\r\n")
file.write(text + "\r\n")
今回やりたかったこと
コメントの中で
セトリを記載してくれているコメントを抜き出す。
次は曲名のところを取り出して集計みたいなのにつなげたい、的なことです。
前回、人気順で5番以内のコメントを取り出したのでその中に
セトリコメントがなかったらできないですが、たいていは入ってるだろうという前提で説明します。
前回の取得データ形式
前回取得したデータの形式サンプルは下記のとおり。(前回説明しておけと思いました)
JSONで取り出してた場合。
{"cid": "UgxY24ho9G8b36lFD754AaABAg", "text": "୨୧┈┈┈┈┈本日のセットリスト┈┈┈┈┈ ୨୧\r\n\r\n0:04 オープニングソング(Glory sun)\r\n4:24 配信開始\r\n5:28 カガリビト / millstones\r\n10:35 ~曲間1\r\n10:41 忘れじの言の葉 / 安次嶺希和子\r\n14:36 初めの挨拶\r\n16:54 angelite / narry\r\n21:47 ~曲間2\r\n22:19 ホシキラ / ランカ・リー\r\n26:57 ~トーク1\r\n28:32 心做し / 蝶々P\r\n33:00 終わりの挨拶", "time": "16 hours ago", "author": "@Lunacia0213", "channel": "UCzVWhHJA-2-v6L5aiMvAP-w", "votes": "10", "photo": "https://yt3.ggpht.com/gRp27Jrwhgd74Gqfa9JopK8xe4VEvkrNdhe0JFCQy6czPlmFKNW2DLetFy5ubAYiCknrkLO6v2A=s176-c-k-c0x00ffffff-no-rj", "heart": true, "reply": false, "time_parsed": 1702743997.109574}
細かい解説
"text":~~~
というところだけ取り出したいので キーバリューの get("text")を使いました。
本当はそのためのデータの型(dicとかstrとか)を熟知していないといけないのですが、わからなくても使えてしまうのがよいことなのかどうなのか。
処理の流れとしては、ソースコード内にも記載していますが、以下の通り。
対象ディレクトリ(前回データを取り込んだ箇所)から ファイルを1つずつ読み込む。
その中身のtext に該当する部分を取り出す。
タイムスタンプのついているコメントだけ残す
正直あまりスマートではないとは思いますが、できることを積み重ねるのも大事かと思います。
結果例
投稿直前まで忘れてましたが、投稿前に思い出したのでヨシ!
(前回から陽月るるふさんの再生リストやコメントを利用させていただいております。)
反省点
readlineで取り出しているのに、改行の制御がうまくいかず、力技を出した感じは否めないです。
shellscript で組んだ方が楽と思いつつ、いや google colabというサービスで実現するノウハウを残すことにしました。
この記事が気に入ったらサポートをしてみませんか?