2021年5月5日水曜日

Youtube Data APIが使えない&日本語のコメントのみの抽出に挑戦

 バズッた外国の動画見た時に日本人のコメントあるかなと思っても、
コメントが数100以上とか多いと探す前にあきらめるじゃないですか?
ということでYoutube  Data APIを使って解決できるかに挑戦しました。


久しぶりにAPI使おうと思ったら403エラーが出てAPIが使用できなかったです。
調べた感じだとGoogle Cloud Platformで新しいプロジェクトを作成するのが正解なようです。
(古いプロジェクトで新しいAPIキーを作ってもダメでした。
他のエラーが出力されるケースもあっても新しいプロジェクトで試すのが近道っぽいです。)

なんかAPIを使用量がQueries 10000/日しかないけどなんか今はずいぶんと少なくなっているようですね。
大量のコメントを処理すると簡単に超えてしまいそう。


で、本題の日本語のコメントだけを抽出する方法は

① コメント情報→チャンネル情報から国を判断する
各コメントには書き込んだ人のチャンネルID情報があります。
そこからチャンネル情報をAPIで読み込めば国の情報があるので
JPの人のみのコメントを出力するという案です。
これは出来たにはできたのですけど、国情報を登録してないのか見えない人の方が多かったのでやりたいことができませんでした。
あとAPIの使用量的にはいけていません。

② コメントを「Google Cloud Translation API」に投げて言語を判断する。
有料なのでやめときました。たぶんやろうと思えばできます。

③ 正規表現で判断する。
preg_matchを使用して「ひらがな・カタカナ・漢字が一部でも含まれている」(完全一致ではなく部分一致です。)に該当するコメントだけ出力する。
これがAPI使用しないしコスト的にもいいようです。
例:
    $str = str_replace("\n","\n\t",$data["snippet"]["topLevelComment"]["snippet"]["textDisplay"]);//コメント文字列
    mb_regex_encoding("UTF-8");
    if(preg_match( "/[ぁ-ん]+|[ァ-ヴー]+|[一-龠]/u", $str) ){
            print_r($str);//日本語なので出力する
    }else{
            //出力しない
    }
上記を参考に過去のコメント出力コードの親コメント子コメントの出力部をうまく修正すればよいです。
コメント3000件で一分ちょいぐらい時間がかかりました。
(全コメントをtxt出力した後から正規表現できるエディタかなんかで探した方が早いかも。

検索窓に

[ぁ-ん]+|[ァ-ヴー]+|[一-龠]

これだと親コメントなど前後も残るし。今回はかなり回り道をした。)