luv-t-archive
repository
自分がtwitterでfavorite(love)したツイートをspreadsheetに列挙し、画像・動画をdriveに保存します
故にtweet-save-to-love
ちょっと意味が違う
シンプルにluv-t-archiveになりました
ひとまず機能が一通り完成するまでの制作時間15H (Wakatime調べ)
実際は調べ毎の時間だったりがあるので25Hくらい
バグ取りだったりをしてるのでもう+8Hになりそう
利用する為にはTwitterのAPI TokenとGCPのサービスアカウントが必要で導入がめんどくさい
お金は多分かからないけど
Google DriveのAPI limitによく引っかかる
重複しない様にしてるので実行2回目以降は引っかからないけど
ここの判定をspreadsheetに依存してるので間違って消したりエラーが出たら地獄
最初はspreadsheetに書き込むのと並列で処理してたのでエラー吐いた時に思いっきりフォルダ内の状況とスプシの状況がずれたりしてた
Driveにアップしたタイミングで配列に追加してく様にして回避
Drive APIのリミットに引っかかってると思って修正したらSheetのAPIに引っかかってた
GCPは料金とか制限をもっとわかりやすくして欲しい
ドキュメントもなんか古いし
見ながらやって型エラー出たからissue立てたらそのプロパティは古いよって言われた
Firebaseはわかりやすい
GASでも書いたけどそっちはGCPの連携が楽なので導入が楽
もうちょっとコードを公開しやすくして欲しい
元のレポジトリのreadmeを英語にしちゃったので元々のやつを残しておく
luv-t-archive
これは何?
luv-t-archiveは自分がtwitterでfavorite/likeしたツイートをspreadsheetに列挙し、画像・動画をdriveに保存します
このrepositoryをForkし必要なTokenをSettings > Secretsに登録すれば自動で収集する様になっています
Setup
※注意
導入はかなり面倒くさいです
必要なもの
Googleアカウント (GCPアカウント)
Twitterアカウント
開発者申請をする必要がある
準備
1. GCP Service Account を作成します (https://console.cloud.google.com/)
2. Drive API とSheets API を有効化し、JSON タイプのキーを作成し、保存しておきます
1. Drive API とSheets API を有効化します (https://console.cloud.google.com/apis/library)
2. 作成したサービスアカウントを選択肢、JSON タイプのキーを作成し、保存しておきます (https://console.cloud.google.com/iam-admin/serviceaccounts)
3. ファイルリストを保存する為に、Google Spreadsheets に新しいシートを作ります (https://docs.google.com/spreadsheets)
1. そのIDとシートの名前をコピーしておきます
2. そのシートに上記で作成したサービスアカウントに共有設定します
4. ファイルを保存する為に、Google Drive にフォルダを作ります (https://drive.google.com/drive)
1. そのIDをコピーしておきます
2. そのフォルダに上記で作成したサービスアカウントに共有設定します
5. Twitter Developers ページで、任意のアカウントでログインします (https://developer.twitter.com/en/apps/)
1. 新しいApp を作成するために開発者申請をします
2. 新しいApp を作成し、Bearer Token を作成し、それをコピーしておきます
6. 利用したいTwitter Account のID をコピーしておきます
始めるために
1. このrepository をFork します
2. .github/workflows/schedule.yml の環境変数(https://github.com/ivgtr/luv-t-archive/blob/master/.github/workflows/schedule.yml#L24-L31) を編集します:
**TWITTER_ID:** 利用するTwitter のID
**SHEET_NAME:** 利用するSpreadsheets の名前 (Sheet1/シート1)
3. repository のSettings > Secrets へ行きます
4. 以下の環境変数を追加します:
**TWITTER_TOKEN:** 上記で生成された Twitter のBearer Token
**SHEET_NAME:** 利用するSpreadsheets のシートID: https://docs.google.com/spreadsheets/d/**xxxxxxxxxxxxxxxxxxxx**/edit.
**DRIVE_FOLDER_ID:** 利用するDrive のシートID: https://drive.google.com/drive/folders/**xxxxxxxxxxxxxxxxxxxx**.
**SERVICE_CLIENT_EMAIL:** 上記で保存したサービスアカウントのJSON 鍵のclient_email 部分
**SERVICE_PRIVATE_KEY:** 上記で保存したサービスアカウントのJSON 鍵のprivate_key 部分
1. 改行コードが含まれていると上手く動かないので除去し、改行する
2. $ echo "実際のkey" などすると良い感じ出力される
進捗
終わり
ツイートを取得
取得したツイートとスプレッドシートを比較
スプレッドシートにツイートを整形し、保存
ツイートの画像・動画をドライヴに保存
ドライヴに保存中、エラーが起きた際のハンドリング
CIの設定
まだ
CIのエラーハンドリング(何故かエラーでも正常と処理されてる)
仕様
1. 実行につき最新200ツイート分遡ります
2. 重複したツイートをSpreadsheetsを参照し、省き、Driveに保存します
GCPのlimitにより、一回に保存できる件数を90件にしています
古い順に保存されるので、次回の実行までに90ツイート分いいねしなければ漏れはそこまで出ないはず・・・
3. Driveに保存したファイルのリストをSpreadsheetsに保存します
消したりエラーが出ちゃうとDriveに保存するファイルが重複しちゃうので注意が必要です
少なくとも実行の間隔を2分空けてください
Deiveを参照したいがAPIの仕様上、ファイルリストを何回もリクエストする必要があるので現実的では無い・・・
#つくったもの #TypeScript