{Python}自分のTLの画像を保存する(4)

前回までで、200までの任意の数を指定しツイート情報を取得し、そのなかの画像をDLすることができました。
今回は、

  • 200件以降3200件までのツイートの取得
  • 前回DL以降増えたツイートのみを取得

する機能を追加していこうを思います。

環境等

  • win 10
  • python2.x
  • python lib: これまで登場したもの
  • python lib: ConfigParser

 

前回までのコードまとめ

前回までのコードをまとめると今はこうなっています。

このコードはまるごとコピペすればすぐに動きます。
しかし、これは一回きりのDLしかできないので、実用的ではありません。少し改良する必要がありますね。

200件以降のツイートを取得

ツイッターでは無料のAPIで遡れるツイートは3200件までらしいです。
ただこれは一人のユーザーのツイート(プロフィール画面から見られるやつ)を遡るときであって、検索なら100件7日以内?
自分のフォロイーのツイートが混在するhome timelineについては800件までという噂。
私もよく分かりません(このプログラムでは3200件まで試したことがないので)
とりあえず、最大まで遡る機能を実装してみましょう。
方法は簡単です。
APIを叩いて処理する部分(上のスニペットでは18~66行)をパラメータ’page’の数を増やしながら繰り返せばいいだけです。
200ツイート * 16ページ = 3,200ツイート
なので16ページまで繰り返すようにし、ツイートの取得ができなかった時点で繰り返しを終了します。


前回DL以降増えたツイートのみを取得

これで過去のタイムラインについては取得できる限り取得することができました。
こうして一度DLのプログラムを動かした数日後に、新しく増えた画像だけDLするにはどうすればいいでしょうか。
これをうまく行うためには、プログラムを動かした時点で、次回のために「ここまで取得した」という値を保持しておくのがいいです。
27行目’for i, tweet in enumerate(timeline):’の直後に以下のように加え、1ページ目の1ツイート目(=プログラムを動かした時点の最新ツイート)のIDを$last_idに格納します。

全てのダウンロードが終わった時点で$last_idに保持していた値を外部ファイルに書き込んで記録します。
まず書き込む用として、予めpythonファイルと同じディレクトリに、以下のようなlast_update.iniファイルを作っておいてください。

次に書き込むためのコードです。
68行目”print ‘All tweet media downloaded.'”の直後あたりに以下のように記述します。

このコードで、先ほどのiniファイルのNone部分が最新のツイートIDに上書きされます。
次のDL時は、このツイートIDを読み込み、ツイートを取得する範囲を決めます。
というわけでプログラムの頭に戻って、このIDを読み込むコードを書き足してみましょう。
17行目’url = “https://api.twitter.com/1.1/statuses/home_timeline.json”‘の直後を以下のように書き替えます。
先ほどの書きこみにもConfigParserというライブラリを使用していますので、importを忘れずに。

ツイートIDが保持されているときとされていないときでパラメータを2パターン作りました。
これで、

  • 初回は可能な限り多くのツイートを取得し画像をDL、
  • 2回目以降は、新しく増えたツイートのみを取得し画像をDL

どちらにも対応したプログラムができました!ぱちぱち~
これにて「自分のTLの画像を保存する」は終了です。
保存するツイートの条件やファイル名をうまく定義して、自分の必要な画像が取得できるようにしましょう。
また今度、これを利用して自動でflickrに投稿するプログラムについても書きます。

完成したコードはこちら

Leave a Reply

Your email address will not be published. Required fields are marked *