Twitterで任意の画像を一括ダウンロードするのに苦労した話
概要
諸事情で、ある有名人のTwitter上にあるファンアートを集めることになりました。
環境
- macOS Mojave 10.14.6
- PHP 7.3.12
- pip 19.3.1
- python 3.7
要件
- ある有名人のTwitter上にあるファンアートを集める
- Twitterで特定のワードで検索したときに表示される画像を集める
- 期間は2年以上前から現在まで
名前を出すことができないので、仮に「ハリネズミ」の画像を集めることとします。
集めるべき画像は、Twitterで「ハリネズミ」「Hedgehog」と検索したときに表示される画像です。
結論
google-images-downloadで「Twitterから『ハリネズミ』と検索したとき」に表示される画像を一括DLする。
googleimagesdownload -ri -cd "./chromedriver" -l 1000 -k "site:twitter.com ハリネズミ"
試したこと
以下の2つを試しました。
- Twitter Search API
- google-images-download
Twitter Search API
Twitterの画像をDLするなら、TwitterのAPIを使おうというところで、「Twitter Search API」を使うことにしました。
Twitter開発者登録し、APIキー等を発行する
自分の場合は、数年前に開発者登録をしてテスト用のAPIキーを発行していたので、そのAPIキーを使いました。
初めてTwitter開発者登録をされる方はここら辺を見るとよいかもしれません。
OAuth認証して、APIを叩く
コードはGitHubにあげておきます。READMEを見ればすぐに使うことができます。
APIの制限に引っかかる
しかしながら、無料で検索できる範囲が過去7日間ということが判明し、Twitter Search APIでは要件を満たすツールが作れないことが判明しました…。
google-images-download
そこで、機械学習の画像集めに使われる「google-images-download」を使うことにしました。
詳細はこの記事を見るのが早いです。
google-image-downloadのインストール
pip install google_images_download
chromedriverのダウンロード
画像を1000枚以上一括DLするにはchromedriverが必要になるので、こちらからDLします。現在使っているGoogle Chromeとバージョンが合わないと正常に作動しないので注意が必要です。
ダウンロード後は、zipファイルを解凍してコマンドを実行するディレクトリの直下に置きます。
コマンドをtmpディレクトリ上で行う場合の設置例。
google-image-downloadの実行
google-image-downloadの使い方は簡単で、以下のコマンドを実行すると、Googleで「ハリネズミ」と検索したときの画像を1000枚ダウンロードしてくれます。
googleimagesdownload -ri -cd "./chromedriver" -l 1000 -k "ハリネズミ"
普通に検索すると、Twitter以外の画像もDLしてしまうので、高度な検索をつかって、Twitterに投稿された画像のみをDLするようにしています。
googleimagesdownload -ri -cd "./chromedriver" -l 1000 -k "site:twitter.com ハリネズミ"
最後に
Twitter Search APIの実装に結構時間を喰った結果、使えないことが分かったので、もっと早くgoogle-image-downloadの存在に気づけばよかった…。
Discussion