2072

ワンダーの生配信を通知するbotを作った話

by
たれぱんつ
たれぱんつ
はじめまして
ワンダー部に投稿するのははじめてのたれぱんつです

今回はワンダーの生配信をTwitterで通知するbotを作ったのでその宣伝のための投稿です
アカウントはこちら↓

仕様としては30分おきにyoutubeとOPENRECから配信情報を拾ってツイートする簡単なbotです
こんな感じ↓


配信そもそも知らない、誰が配信してるか知らない、本人がツイートしてもTL流れるという人向け
年末休暇だけど帰省もできずひまひまで(パ チ ン コ打ってたら50k近く負けたので)作りました
使ってくれると泣いて喜びます


























ーーーここから技術的な話(興味のある人向け、それっぽい用語がたくさん出てきます)ーーー

【概要】
工数は3日
開発言語はPython3系、開発環境はWSL2のUbuntu
実行環境はGCP cloud function等
費用はほぼ無料…のはず
構成はこんな感じ↓(miro使って書きました。便利すぎるからみんな使え)


スケジューラー(GCP全体で使えるcronみたいなの)で30分おきにPubsubキック
Pubsubトリガーにcloud functionに立てたクローラーを走らせてます
youtubeとかTwitterの鍵は全部環境変数で管理(KMS(鍵を暗号化して管理できるGCPのサービスの一つ)噛ませるといいんだろうけど外部に公開してないしそこまでする気力はなかった)
コードはGitHub公開しときます。クローンして鍵の申請して検索条件変えれば他のゲームでもbot作れるでよ
リポジトリ



【コード解説】
  • youtube.py
    その名の通りyoutubeを検索するモジュール
    公式APIあるから楽できると思ってたら思った以上に日時と検索の仕様が思ったよりめんどくさかった。youtube君はもうちょっと検索しやすくなって
    配信日時が計算あわねーとTwitterで叫んでいてとりあえず公開したら案の定ずれていました

    調査したところ仕様は以下のような感じだったので大急ぎでサイレント修正しました
    ・search().listの結果に出てくる時間は配信をスケジュールに登録した時刻(開始時刻ではない)
    ・正しい時間を取得するためにはvideos().listを叩く必要がある
    とりあえずliveの仕様わかりにくいのでドキュメントに書いてほしい(issueに書いたら取り上げてくれるかしら)
     
  • openRec.py
    こっちはOPENREC
    ワンダーカテゴリのHTML持ってきてセレクターで要素をゴリゴリに分解して無理やりオブジェクト作ってるだけ

     
  • trimTime.py
    環境変数で管理しているインターバルの時間で配列をぶった切るモジュール
    環境変数になっているのはビルドしなおさなくてええやんという考えだったが、この規模だったらどう考えても引数で渡した方が早いし、理にかなってる模様

     
  • tweet.py
    Twitterに通知するためのモジュール
    youtubeとOPENRECから渡された配列でツイート用の文章を作って、TwitterAPIを叩いております

     
  • main.py
    Pubsubからキックされる大本
    デプロイ環境がUTC時間になるので日本の標準時に合わせてるぐらい
    あと順に呼び出してるだけ
    例外処理とかは無視で完全に正常系のみ

【実行環境解説】
実行環境は全部GCPに乗せてます。ここでは使ってるサービスを紹介
  • cloud fuction
    関数を実行できるやつ。GCEに素でVMマシーン立てるよりも安上がりかつ楽なのでこっちを採用
    runtimeはpython3.8
    トリガーであるPubSubが実行されるとデプロイした上記のコードが動作する
    VMマシーンのインスタンスは最小限の構成で1台かつ256MB(可用性?なんのこったよ)

     
  • PubSub
    リクエストをキューにためておけるやつ(理解が間違ってたらスマン)
    失敗時に再送も可能だが、(使いすぎで一時的に)外部に向けたyoutubeAPIとかTwitterAPIが遮断されると、無限に再試行しちゃう

    なので、お財布事情から一回しかリクエストを送らないようにしてる(下手すると100万円以上請求きちゃう。クラウド破産怖いでしょう・・・)
  • GCP scheduler
    いわゆるcron。定期的にPubSubを実行してくれる
    設定はもともと10:00~21:00を想定していたが、某カ スフレマを思い出し、あれ漏れるな・・・と思ったので10:00~23:00に変更
【感想】
なんか簡単にできました。コードめっちゃ単純。クラウドネイティブ最高
youtubeとかTwitterAPIを叩くようなアプリは初めて作ったので勉強にもなりました
もっとこうして~という要望とかbotに対する感想あったらコメントかツイッターにでも書き込んでください


それでは皆様よいお年&ワンダーライフを~

【参考】

50+ YouTube Search Operators: The Full List Of Advanced YouTube Search Commands
YouTube Data API v3でライブ配信の状態を取得する
https://developers.google.com/youtube/v3/getting-started?hl=ja

Pythonでtwitterのbotを作成する方法(後半)
Python Webスクレイピング テクニック集「取得できない値は無い」JavaScript対応
YouTubeの配信情報をひたすら取得するAPIを整理した










【追記】
大体仕上げて運用テストしてる最中に取り戻しました(´^ω^`)
作成日時:2020/12/30 00:02
カテゴリ
コメント歓迎
コメント( 3 )
董白さん!
董白さん!
2020年12月30日 6時10分

む…む?わかんねーけど作成お疲れさま!

たれぱんつ
日向 修二
日向 修二
2020年12月30日 8時40分

さっそくフォローしましたありがとうございます!

たれぱんつ
たれぱんつ
たれぱんつ
2020年12月30日 13時41分

>>董白さん!さん
すなわちgoogle様は流石だということです
Botの裏ってこんな感じなんだよーという興味を持ってくれると個人的にはすごくうれしいです

>>日向修二さん
フォローありがとうございます
問題とか要望あったらいつでも受付ます

日向 修二
コメントするにはログインが必要です
シェア