@HIKAKIN_SYM の再実装, および稼働を目的としたプロジェクトのリポジトリです.
HIKAKIN_SYM/Bot の挙動をある程度再現しています
このリポジトリのdockerfile
から生成されたDockerイメージにはGCPの認証情報が含まれています。
必ず Container Registry などの非公開でイメージを管理できるサービス上で管理してください。
でなければあなたのGCPプロジェクト上にとんでもない請求が飛んでくるでしょう。
- Youtubeのサムネイルを処理したかどうか判別するために使っているDBをSQLite3からGCPの提供するFirestoreに変更しています
- 実装言語を Python3 から TypeScript に変更しています
- 現状考えてませんが, CloudFunctions などの FaaS に乗せ換えも技術的には可能です
- 現時点では出来る限り並列処理をさせている(つもり)なので, 先代よりも少しは高速かもしれません
- Cloud Vision API
- 顔認識に使用しています
- Youtube Data API
- Youtubeからのサムネイル等, 必要な情報の取得に使用
- Firestore
- Youtubeのサムネイルをシンメトリーにして投稿などしたときに状況を保存する目的で使用しています
- TwitterAPI(Standard v1.1)
- ツイッターへの投稿や, HIKAKIN氏の投稿の取得に使用
-
Google Compute Engine
- Dockerのイメージに固めたアプリケーションを稼働させるのに使用
-
Container Registry
- Dockerイメージを非公開にして管理するのに使用
- GCPのプロジェクトを作成して, 各APIを有効化します
- サービスアカウントを作成する(Firestoreへの書き込み, 読み込みが可能なロールで)
- サービスアカウントの鍵をJSONで発行, ダウンロードしたら
${ProjectRoot}/.envs/serviceAccount.json
の形で格納してください - Youtube Data APIのみサービスアカウントでの取得ができませんので
GCPのコンソール -> APIとサービス -> Youtube Data API v3 -> 認証情報
からAPIキーを発行してください. また, Youtube Data API以外へのアクセスをAPIキー設定から禁止することをお勧めします.
- 発行したYoutube Data API用のAPIキーを
${ProjectRoot}/.envs/env.yaml
に記述して保存してください
- https://developer.twitter.com から開発者申請をしてください Google翻訳使いまくっても問題ないです
- 申請が終わればStandalone Appsからプロジェクトを作成してください. Permission は Read and Write より上で設定してください
- Consumerキーが発行できたら, oAuthするなり管理者のアクセストークンを作るなりで
AccessKey
とAccessSecret
を発行してください ConsumerKey(Secret)
,AccessKey(Secret)
の4つを${ProjectRoot}/.envs/env.yaml
に記述して保存してください
開発環境用の場合に使用するtwitterアカウントは twitterNightlyAPI
に記述し、yarn start:develop
で起動することでスイッチできます
本番デプロイするだけの場合は twitterNightlyAPI
は消していても問題ありません
詳細 -> #34
2つの手段を用意しています、お好きな手段でどうぞ。
ローカル実行(変更が大きい方向け)
GOOGLE_APPLICATION_CREDENTIALS
の環境変数にサービスアカウント鍵のファイルパスを設定する。
$ export GOOGLE_APPLICATION_CREDENTIALS='./.envs/serviceAccount.json'
yarn start:develop
でTSのコンパイルをすっ飛ばして起動できます
dockerコンテナ内での実行(変更小さい方向け)
- 変更対象のファイルを変更する
yarn build
でdockerイメージの構築docker run hikakinsymmetry/nodebot:latest
でイメージを実行
GCPのサービスアカウント以外の情報は ${ProjectRoot}/.envs/env.yaml
に保存することで管理しています
${ProjectRoot}/env.sample.yaml
がサンプルになっているので, これに記述したのちリネームして置くといいでしょう