絵師さんのTweetをRTするbotについて(6) - ベータ版

ファイル構成

実行コード.py
既読履歴.json
フォロー一覧.json
絵付きTweetリスト.json
ログ.json

 

仕様

1.フォロー一覧の更新

  • フォロー一覧.jsonを読込
  • 現在の自分のフォローと対照して更新
  • 上書保存

2.最新のTLから絵付きTweetリストを抽出

  • 既読履歴.jsonを読込
  • 最新既読のTweetまで最大1000件のRT以外のTweetを自分のタイムラインから取得しながら
  • 絵付きTweetであり、かつ、自分がRT済でないもののリストを抽出
  • IDの配列とIDに紐付いたRT数、ふぁぼ数、生起時間の辞書を作成
  • 既読履歴.jsonを更新して上書保存
  • 絵付きTweetリスト.jsonから古いIDの配列とその他の情報の辞書を読込
  • たった今抽出した配列および辞書に追加、重複を除去

3.フォローしているユーザーのTLから絵付きTweetリストを抽出

  • フォロー一覧.jsonを読込
  • 既探索回数が少ないものから適当なユーザーを選択
  • 最新既読のTweetまで最大3200件のRT以外のTweetを取得
  • 生存期間が1日未満のものについては、絵付きTweetであり、かつ、自分がRT済でないものを抽出、生存期間が1日以上のものについては、さらに、RT数とふぁぼ数が閾値を超えたものについてリストを抽出
  • IDの配列とIDに紐付いたRT数、ふぁぼ数、生起時間の辞書を作成
  • 2.で更新した配列および辞書に追加、重複を除去

4.絵付きTweetリストから閾値を超えたものをRT

  • 降順に並んだTweetの配列(最新のものから並んでいる)について条件分岐
  1. 既読履歴を参照し、今回自分のTLから新規で追加したTweetか否か
  2. 生存期間1時間未満か否か
  3. 生存期間1時間以上か否か
  • それぞれに関して情報の更新と閾値と比較しての判定を行なう
  1. 情報の更新はなし、甘めの閾値で判定
  2. 甘めの閾値を超えているか判定、超えていない場合は情報を更新し再び判定
  3. 閾値超えているか判定、超えていない場合は情報を更新し再び判定。
  • 判定を通過したものはRTし、配列および辞書から除去
  • 3に関しては判定を通過しなかった場合、生存期間が1日を超えていれば除去
  • RT回数が5回に達するか、情報の更新回数が44回に達した時点でループから離脱
  • 当該Tweetが消えていた場合、既に自分がRT済だった場合、ユーザーからブロックされていた場合、ユーザーがプライベートになった場合、などはTweepyがエラーを吐くので例外として処理
  • 例外発生時は当該IDを配列から除去し、紐付いている辞書要素も除去
  • 1と2の間でTweetの配列をランダムにシャッフルすることで延々と同じ情報を更新する状態を回避

5.終了処理

  • シャッフルした絵付きTweetの配列をソート
  • 4で情報の更新および一部の除去が完了した配列および辞書を絵付きTweetリスト.jsonに保存
  • APIリミットを取得
  • ログファイルの書込

 

API制限

  • home_timeline 15 / 15min
  • user_timeline 180 / 15min
  • RT(update_status)  30 / 15min
  • home_timeline および user_timeline はともに過去への遡及は最大3200Tweetまで

 

他のものもあるが、そちらはあまり問題にならない。