👾

Twitterで任意の画像を一括ダウンロードするのに苦労した話

2020/10/14に公開

概要

諸事情で、ある有名人の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つを試しました。

  1. Twitter Search API
  2. google-images-download

Twitter Search API

Twitterの画像をDLするなら、TwitterのAPIを使おうというところで、「Twitter Search API」を使うことにしました。

Twitter開発者登録し、APIキー等を発行する

自分の場合は、数年前に開発者登録をしてテスト用のAPIキーを発行していたので、そのAPIキーを使いました。
初めてTwitter開発者登録をされる方はここら辺を見るとよいかもしれません。

https://qiita.com/kngsym2018/items/2524d21455aac111cdee

OAuth認証して、APIを叩く

コードはGitHubにあげておきます。READMEを見ればすぐに使うことができます。
https://github.com/ntask19/collect_twitter_image

APIの制限に引っかかる

しかしながら、無料で検索できる範囲が過去7日間ということが判明し、Twitter Search APIでは要件を満たすツールが作れないことが判明しました…。

スクリーンショット 2019-12-09 18.16.32.jpg

https://developer.twitter.com/en/docs/tweets/search/overview

google-images-download

そこで、機械学習の画像集めに使われる「google-images-download」を使うことにしました。

詳細はこの記事を見るのが早いです。

https://qiita.com/Ikko_Kojima/items/4d943c60ff5e886a0544

google-image-downloadのインストール

pip install google_images_download

chromedriverのダウンロード

画像を1000枚以上一括DLするにはchromedriverが必要になるので、こちらからDLします。現在使っているGoogle Chromeとバージョンが合わないと正常に作動しないので注意が必要です。

ダウンロード後は、zipファイルを解凍してコマンドを実行するディレクトリの直下に置きます。

スクリーンショット 2019-12-13 23.17.20.jpg

コマンドを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