風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

Twitter メディアダウンローダ:ユーザータイムラインの原寸画像や動画をまとめてダウンロードするユーザースクリプト(PC用Google Chrome・Firefox等対応)

Web 版公式 Twitter上で、あるユーザーの画像(メディアタイムライン上の画像)を原寸*1でまとめて(ZIP)保存することが出来るようになるユーザースクリプト/Chrome拡張機能/Firefox Quantum用アドオンです。
0.1.0.701より、動画もダウンロード可能となりました。



インストール

Chrome 拡張機能版(Google Chrome対応)

chrome.google.com

より追加。
Twitter メディアダウンローダ - Chrome ウェブストアのページ上に表示されている [+CHROME に追加] ボタンを押してインストール。

Firefox Quantum アドオン版(WebExtensions)

https://addons.mozilla.org/ja/firefox/addon/tw-media-downloader/addons.mozilla.org

より追加。
ページ上に表示されている [+ Firefox へ追加] ボタンを押してインストール。

ユーザースクリプト(Gresemonkey / Tampermonkey)版(Firefox/Google Chrome対応)

Firefox+Gresemonkey、Google Chrome+Tampermonkeyの環境で、

Twitter メディアダウンローダ・ユーザースクリプト版(twMediaDownloader.user.js)

GitHub - furyutei/twMediaDownloader: Twitter メディアダウンローダ

をクリックし、指示に従ってインストール。

使い方

基本的な使用方法

インストール後には、Web 版公式 Twitter上で、ユーザータイムライン()を表示時に、「メディア」の横に下向きの矢印が表示されるようになります。
0.1.0.901より、検索タイムライン上でも「メディア ⇩」リンクが表示されるようになりました。
0.1.1.1701より、「いいね」タイムラインにも対応しました。ユーザータイムライン表示時に、「いいね⇩」リンクが表示され、まとめてダウンロードできます(なお、「いいね」タイムラインでは、日時範囲指定のみとなります)。
0.1.1.3001より、「通知」タイムライン上・「@ツイート」横に 「⇩」リンクが表示されるようになりました(@ツイートをまとめてダウンロードできます)。


f:id:furyu-tei:20160725180612p:plain

これをクリックするとダイアログが表示されるので、[開始]ボタンをクリックすると、原寸画像/動画の ZIP 化が開始されます。
ZIP 化の進捗は、下部にログ出力されます。

f:id:furyu-tei:20160723224527j:plain
f:id:furyu-tei:20171029090641p:plain

ZIP 化が完了するか、もしくは[停止]を押すと、対象となる画像/動画ファイルをまとめた ZIP ファイルがダウンロードされます。
このとき、ログの内容も ZIP の中に保存されています。

オプションの指定

制限数は、ダウンロード対象となるツイート数の上限です(デフォルトは現状 100 件にしてあります)。
これを超えた分のツイートはダウンロードされません。
大きい値を指定すると、その分メモリを消費してしまい、ブラウザがフリーズする等の不具合が発生する可能性がありますので、ご注意ください。

ダイアログの保存対象 Tweet ID 範囲に、具体的な Tweet ID(ツイートの URL の数値部分・例えば https://twitter.com/furyutei/status/743443761980596224ならば、"743443761980596224")を指定してやることで、その範囲にあるツイートの画像/動画のみをダウンロードすることができます。

■以前にダウンロードしたものよりも後の画像/動画をダウンロードする
以前にダウンロードしたときのログファイルが、

[Complete] 101392230006267904 - 756891141912481792 ( Tweet: 333 / Media: 398 )

のような形で終わっている場合には、下限(左の入力欄)として "756891141912481792" を指定してやることで、これより後に更新された画像/動画をまとめてダウンロードすることができます。

■以前にダウンロードしたものよりも前の画像/動画をダウンロード

[Complete(limited)] 582865505758748672 - 680344335049601024 ( Tweet: 100 / Media: 120 )

この例だと、100件制限によって、"582865505758748672" より前のものが含まれていませんが、この場合は上限(右の入力欄)として "582865505758748672" を指定してやることで、これ以前に更新された画像/動画をダウンロードできます。

0.1.0.701 からはアニメーションGIF(MP4に変換されたもの)と動画も対象となりました。
必要に応じて、対応するチェックボックスにチェックを入れてダウンロードしてください。

0.1.1.101 からは、個別ツイートに動画用のダウンロードリンク(MP4)が付くようになりました。
また、0.1.1.201 からは、個別ツイートに画像用のダウンロードリンクも付くようになりました(ZIPでダウンロードされます)。
Chrome拡張機能版の場合、オプション画面でこの機能を無効化できます。

ID欄には、日時も指定可能
範囲指定したいけれど、IDを探すのが面倒……という場合、実はID欄に日時を入れると、IDに変換してくれます(ただし、2010/11/05以降のみ)。
例)日時:2018/07/21 19:25:00 → ID:1020615617541046272
日時のフォーマットは、JavaScript の new Date(~) で指定可能な形式なら大丈夫なはずです。

なお、ID欄の範囲指定では、指定した値そのものは含まないことに注意。
[A]<ID<[B]であれば、「IDがAよりも大きく、Bよりも小さい」という条件になります。

例えば、ID欄の左に [2018/07/21 00:00:00]と入れた場合("1020322435691446272"に変換される)、「"2018/07/21 00:00:00"よりも後」になります。
厳密に、"2018/07/21 00:00:00" も含めたい場合、"1020322435691446271"(変換された値-1)を入れて下さい。
同様に、ID欄の右に[2018/07/21 18:00:00]と入れた場合("1021319002321846272"に変換される)、「"2018/07/21 18:00:00"よりも前」になります。
厳密に、"2018/07/21 18:00:00" も含めたい場合、"1021319002321846273"(変換された値+1)を入れて下さい。
まぁ、そこまで厳密なタイミングが必要なのか?というのは、さておき。

注意・制限など

免責事項

ご利用の際には全て自己責任でお願いします。
不具合があったり、使用した結果等により万一何らかの損害を被ったりした場合でも、作者は一切関知いたしませんので、悪しからず。

ダウンロードファイルについて

ダウンロードしたファイルの扱いは、(自分に権利があるものを除き)私的利用の範囲にとどめるよう注意してください。
また、違法に公開されている動画や音楽については、それとわかっていながらダウンロードする行為も違法となります(特に、有償で提供されているものについては、刑事罰の対象となります)

ダウンロード対象ツイートの制限について
  • ダウンロードできるのは、Web 版公式 Twitter上のメディアタイムラインで遡れるところまでに限られますので、悪しからず。
    800ツイートくらいかな?
  • [2016/07/24追記]ダウンロードできるのは、Web 版公式 Twitter上のメディアタイムラインおよび検索タイムラインで取得できるもののみです。
    メディアタイムラインでは最大で800ツイートくらいまで(対象外のツイートも含むため、実際はもっと少なくなる)しか取得できないため、それよりも前は検索タイムラインで取得します。ただし、検索タイムラインでは取得もれが発生することも多いため、全ての画像/動画付きツイートがダウンロードできるわけではありませんので、悪しからず。
[Complete] や [Stop] と表示されているのに、ダウンロードされない

合計ファイルサイズが大きい場合(~1GB以上?)[Complete]や[Stop]状態になっても、ZIPがダウンロードされずにだんまりとなる場合があるようです。
特に動画を含む場合は容量が膨れ上がるので注意。動画ばかりのタイムラインだと、100件ずつくらいにしておいた方が無難かも知れません。

Firefox で「このファイルを開くのは危険です」という警告が表示される

Firefoxでは、ZIPファイルをダウンロードすると、「このファイルを開くのは危険です」という警告が表示される場合があります(危険なファイルなんて含んでいないんですが……)。
現状、対処方法が見つかっておりません……悪しからず。
一応、about:preferences#privacy(「≡」→「オプション」→「プライバシーとセキュリティ」)→「セキュリティ」→「フィッシング防護」→「☑不要な危険ソフトウェアを警告する」のチェックを外すと警告は出なくなりますが、その分他のサイトで危険が増すのでお勧めはできません。

動画がダウンロードされない(エラーが出る)

動画をダウンロードするには、アプリ(twMediaDownloader)のアカウントに対する利用許可が必要になります。
最初にダウンロードしようとしたとき、
f:id:furyu-tei:20180721200651p:plain
のような画面が(別タブで)開くようになっていますが、このときにブラウザのポップアップブロックが設定されていると、
f:id:furyu-tei:20180721201101p:plain ← Chrome の場合
f:id:furyu-tei:20180721201115p:plain ← Firefox の場合
利用許可設定に失敗(→結果として、動画のダウンロード不可)となります。

この場合は、ブラウザの設定で twitter.com からのポップアップ許可を設定後、Twitter のページをリロードしてからお試しください。

ポップアップブロックの解除(Twitterでのポップアップの許可)方法
■ Google Chrome
右上の「≡」→「設定」(chrome://settings/)→「詳細設定」→「プライバシーとセキュリティ」
にある、「コンテンツの設定」をクリック→「ポップアップ」をクリック。
「許可」欄の「追加」をクリックして、サイト欄に、"https://twitter.com:443" を入れ、[追加]

■ Firefox
右上の「≡」→「オプション」→「プライバシーとセキュリティ」(about:preferences#privacy)→「許可設定」
にて、
☑ ポップアップウィンドウをブロックする(B)
の右にある、[許可サイト]をクリック。
ウェブサイトのアドレス(D)欄に、"https://twitter.com" を入れ、[許可(A)]→[変更を保存(S)]

開発経緯

Twitter 原寸びゅーのおかげで、日常的な用途では原寸画像の表示や保存が随分楽にできるようになりましたが、たまたま発見したイラストレーターや写真家の方々等の画像/写真に魅了された際に、ひとつずつダウンロードするのはさすがに手間だなぁ……と思ったので、まとめてダウンロードできるように、スクリプトを試作してみた次第です。

独り言

動画(アニメーションGIF含む)とかまでダウンロードできるとさらに嬉しいので、だれか作ってくれないでしょうか……(丸投げ)。
ちなみに自分は、ちょっと調べている内に結構面倒だということがわかったために、保留中。

0.1.0.701 からは、アニメーションGIFと動画(一部)にも対応してみました。
Vine等や、YouTube等の外部サイトの動画については未対応。

[2016/07/27追記]
というか、例によって作ってから探したところ、普通に
shimarisu.webcrow.jp
shimarisu.webcrow.jp
という高機能なアプリが見つかったので、これをインストールするのが吉かと思います。
いや、自分自身はまだ入れていないのだけれども……というか、インストール(解凍)するだけはしたものの、最初に若干設定をしないといけないっぽくて面倒になって放置中だったり……(汗)。

*1:URL末尾に『:orig』が付いた画像を便宜上こう呼んでいますが、『原寸』といっても実際にはTwitter側でサイズ変換や圧縮がかかっています