読者です 読者をやめる 読者になる 読者になる

風柳メモ

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

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

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



インストール

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

chrome.google.com

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


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

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

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

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

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

使い方

基本的な使用方法

インストール後には、Web 版公式 Twitter上で、ユーザータイムライン()を表示時に、「メディア」の横に下向きの矢印が表示されるようになります。

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


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

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

オプションの指定

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

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

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

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

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

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

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

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

注意・制限など

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

開発経緯

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

独り言

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

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

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

FileZillaでアップロードしたときに、タイムスタンプが維持されないレンタルサーバに困っている

FileZillaを使用してファイルをアップロードした際に、レンタルサーバによっては、タイムスタンプが維持されないことがあり、割と困っていたりする。
具体的には、ファーストサーバのレンタルサーバを使用していると、タイムスタンプが維持されない(少なくとも自分が会社で使用しているマネージド共有・専用サーバーにおいては。Zenlogic等の比較的新しいサービスについては不明)。
当然ながら、転送(T)→転送したファイルのタイムスタンプを維持(P)には、チェックが入っている前提。

回避方法があれば、ご教示ください。
まぁ、FFFTPでは、ファーストサーバにおいてもタイムスタンプが維持されるようなので、そちらを使えばいいという話もあるのだが……ただ FFFTPは、逆にダウンロード時にタイムスタンプが維持されなかったり等の問題があった気がするんだよな……(うろ覚え)。

レンタルサーバの比較

レンタルサーバのサービス元 アップロード時のタイムスタンプの維持 詳細
ファーストサーバ × アップロードした時刻になってしまう
お名前.com(GMO) 秒の単位については0にされてしまう
また、半年以上前のファイルは、FileZillaで見ると日の単位までしかタイムスタンプが表示されない(ダウンロードすると、分の単位までは一致)
さくらインターネット 秒の単位まで維持される

いずれもプレーンなFTPを使用した場合。
FTP over TLSや、SFTPを使用した場合には結果が異なるかもしれないが、現時点では細かくは検証していない(ただ、ファーストサーバ・お名前.comはFTP over TLSで、さくらはSFTPで常用しているが、結果は変わらなかった気がする←これもうろ覚え)。

手動で FTP ログインしたときのサポートコマンド表示

tadtak.jugem.jp
の記事中に、

クライアントは FileZilla。FileZilla は Wikipedia によると、

FTPの場合、サーバがMFMTコマンドをサポートする場合のみ、アップロードされたファイルの日付/タイムスタンプ属性が保持される。
SFTPの場合、FileZilla 3.0.8 以降では同属性が保持される

らしいです。

vsftpd 経由で ftp アップロードするとタイムスタンプを維持してくれない | 日頃の行い

という記述があり、実際、

アップロード

  • FTPモード: サーバがMFMTコマンドをサポートする場合のみ、アップロードされたファイルの日付/タイムスタンプ属性が保持される。
  • SFTPモード: FileZilla Client 3.0.8 以降では同属性が保持される。
FileZilla - Wikipedia

となっている。

そこで、試しに各レンタルサーバに手動でログインしてもみると……いずれもMFMTコマンドはサポートされていない……?
ということは、FileZillaでも、MFMTコマンド以外でタイムスタンプを維持する努力はしているが、ファーストサーバではそれもうまくいっていないということ……?

ファーストサーバ
$ telnet ftp.***.*** ftp
Trying ***.***.***.***...
Connected to ftp.***.***.
Escape character is '^]'.
220 Firstserver FTP Server Ready
user ***
331 Password required for ***
pass ***
230 User *** logged in
help
214-The following commands are recognized (* =>'s unimplemented):
 CWD     XCWD    CDUP    XCUP    SMNT*   QUIT    PORT    PASV
 EPRT    EPSV    ALLO*   RNFR    RNTO    DELE    MDTM    RMD
 XRMD    MKD     XMKD    PWD     XPWD    SIZE    SYST    HELP
 NOOP    FEAT    OPTS    AUTH    CCC*    CONF*   ENC*    MIC*
 PBSZ    PROT    TYPE    STRU    MODE    RETR    STOR    STOU
 APPE    REST    ABOR    USER    PASS    ACCT*   REIN*   LIST
 NLST    STAT    SITE    MLSD    MLST
214 Direct comments to root@***.***.***.***
quit
221 Goodbye.
Connection closed by foreign host.
お名前.com(GMO)
$ telnet ftp.gmoserver.jp ftp
Trying 157.7.144.19...
Connected to ftp.gmoserver.jp.
Escape character is '^]'.
220 ProFTPD 1.3.2d Server (ftp.gmoserver.jp) [157.7.144.19]
user ***@gmoserver.jp
331 Password required for ***@gmoserver.jp
pass ***
230 User ***@gmoserver.jp logged in
help
214-The following commands are recognized (* =>'s unimplemented):
 CWD     XCWD    CDUP    XCUP    SMNT*   QUIT    PORT    PASV
 EPRT    EPSV    ALLO*   RNFR    RNTO    DELE    MDTM    RMD
 XRMD    MKD     XMKD    PWD     XPWD    SIZE    SYST    HELP
 NOOP    FEAT    OPTS    AUTH    CCC*    CONF*   ENC*    MIC*
 PBSZ    PROT    TYPE    STRU    MODE    RETR    STOR    STOU
 APPE    REST    ABOR    USER    PASS    ACCT*   REIN*   LIST
 NLST    STAT    SITE    MLSD
214 Direct comments to root@ftp02-ext.sd.internal-gmo
quit
221 Goodbye.
Connection closed by foreign host.
さくらインターネット
$ telnet ***.sakura.ne.jp ftp
Trying ***.***.***.***...
Connected to ***.sakura.ne.jp.
Escape character is '^]'.
220 ProFTPD 1.3.5a Server (SAKURA Internet FTP Server) [::ffff:***.***.***.***]
user ***
331 Password required for ***
pass ***
230 User *** logged in
help
214-The following commands are recognized (* =>'s unimplemented):
 CWD     XCWD    CDUP    XCUP    SMNT*   QUIT    PORT    PASV
 EPRT    EPSV    ALLO*   RNFR    RNTO    DELE    MDTM    RMD
 XRMD    MKD     XMKD    PWD     XPWD    SIZE    SYST    HELP
 NOOP    FEAT    OPTS    AUTH    CCC*    CONF*   ENC*    MIC*
 PBSZ    PROT    TYPE    STRU    MODE    RETR    STOR    STOU
 APPE    REST    ABOR    USER    PASS    ACCT*   REIN*   LIST
 NLST    STAT    SITE    MLSD    MLST
214 Direct comments to root@www998.sakura.ne.jp
quit
221 Goodbye.
Connection closed by foreign host.

余談

お名前.com(GMO)のレンタルサーバーに関する愚痴

FTPで、ときどきうまく接続できなかったり(詳細は忘れたが、接続数が上限に達した、みたいなエラーが出る)、多数のファイルのアップロード/ダウンロード時に脈絡なく失敗したりと、動作が不安定なのが困る(これらの現象は、FileZillaでもFFFTPでも発生)。
FTPクライアントの設定をいじれば、どうにかなったりするのだろうか……?

あと、SSHをサポートするようになったのはいいのだが、SFTPには対応していないのだろうか?
これは自分が設定をわかっていないだけかもしれないが。

SSHといえば、アカウント(ユーザー名)が「xxx@gmoserver.jp」のように"@"を含んでいるのも、

$ ssh -l xxx@gmoserver.jp ssh.gmoserver.jp

とかしないといけなくて、地味に面倒……。
ホームディレクトリにファイルが置けない(~/.bash_profile等もいじれない)というのも不満。

【覚書】 Windows 7 → 10 アップグレード時に引っかかったところなど(EPSON NJ5700E)

勢いで、メインPCである EPSON NJ5700E を Windows 7 から Windows 10 へとアップグレードしてしまった。
(いくつか問題はあるものの)ひとまず Windows 7 のときとほぼ遜色なく使えるようにはなってきたが、そこに至るまでに引っかかったりつまづいたりした箇所について、覚え書き。



■ アップグレード前

アップグレード抑制のために使っていたアプリケーション

Windows10へ勝手にアップグレードさせないツール「GWX Control Panel」の使い方経由で知った、GWX Control Panelというものを使用していた。
アップグレードするためには、基本、抑制時と逆の操作をして(Informationの"No."を"Yes."になるようにして)、おなじみの Windows 10 アップグレードアイコンを出してやればよい。
なお、これは Windows 10 にアップグレードした際には不要なものであるが、Windows 10 上でも律儀にタスクトレイに常駐してくれるので、アンインストールしておくことを推奨。
Windows 10 上からでもアンインストールは可能だった。

■ アップグレード中

C: ドライブの空き容量に注意

NJ5700E の場合

<Cドライブの残容量が10GBよりも少ない場合>
USBフラッシュメモリーなどのドライブとして認識のできるUSB外付けメディア(16GB以上)が必要です。事前にCドライブの残容量をご確認ください。

[FAQ番号:023135]NJ5700E : Windows 10アップグレード技術情報|FAQ Search|エプソンダイレクト

という注意書きがあった。

結構空き容量がギリギリだったのだが、なんとかやり繰りして約15GB程の空きを確保。

なお、C: ドライブの空き容量不足でも、
少ない空き領域のハード ディスク/ストレージ のパソコンやタブレットを Windows 10 にアップグレードする方法 - Windows - Microsoft
にあるように、大きめの外部ドライブ等があれば、そちらを利用してインストールできる模様。

ただ、むしろ

  • アップグレードで使用した外部ストレージには以前の Windows に戻すために必要なファイルの一部または全部が保存されます。
少ない空き領域のハード ディスク/ストレージ のパソコンやタブレットを Windows 10 にアップグレードする方法 - Windows - Microsoft

ということだったら、空き容量が足りる場合であっても、外部ストレージにこれらの(前の Windows に戻すのに必要な)ファイルを保存したいところなのだが、そういう選択肢が出るかと思っていたら、特に何もなくインストールが進められてしまった。
現在 C: ドライブに、前の Windows に戻さなければ不要なファイルが 24GB 強ほど居座っているので……むしろ、わざと空き容量を確保せずに外部に押し出したほうがよかったのかも……?

プライバシー設定に注意

アップグレード自体、基本的には指示に従っていけばよいのだが、


のように、プライバシー設定に関して気になる方は、インストール途中で「詳細のカスタマイズ」から機能をOFFにしておいたほうがよいかも。
インストール後でも、設定→プライバシー画面から選択可能ではある。

その他、NJ5700E 用ツール等の再インストール

faq.epsondirect.co.jp
を参考に、「インスタントキーユーティリティー + 電源管理」の Windows 8/8.1版をダウンロードして、再インストール。

また、
faq.epsondirect.co.jp
を参考に、「Endeavor 電源プラン設定ツール」の Windows 10 対応版をダウンロードして、再インストール。


■ アップグレード後に発生したが、解決した問題

アップグレード(Windows 10 のインストール)自体は、特に大きな問題もなく終了した。

ここでは、アップグレード後に各種設定やアプリケーションの動作を確認して行く中で、ひっかかったところなどを書いておく。

なにはともあれ、Caps Lock → Ctrl

自宅だけに限れば Realforce91UDK-G を使っているから切り替えスイッチ使えばいい話なのだけれど、ノートPCを単独で使う場合も多いので、Caps Lock → Ctrl 切り替えは必須。
これは、
Windows 10 にちょっとだけ触れてみました。そして[CAPS]キーを[CTRL]キーにするレジストリについて。 | 株式会社バンブーゲートのホームページ
を参考にして、レジストリの編集をするだけで大丈夫だった。

動作しないプログラムが通知された→アンインストールできない……?

Windows 7 のときに WIDCOMM® Bluetooth Windows® Software が入っていたのだが(Bluetoothアダプタ・たぶんLBT-UAN03C2BK8用)、互換性の問題なのか使用できない旨の通知が出ていたので、(占有サイズも大きいことだし)アンインストールしようとしたところ……

このアプリは保護のためにブロックされました。

のようなダイアログが表示され、アンインストールすることができない。

試行錯誤の結果、Administrator でログインすることで、ようやくアンインストールできた。
なお、Administrator アカウントの有効/無効切り替えは、ローカル セキュリティ ポリシーで設定できる(セキュリティの設定→ローカル ポリシー→セキュリティ オプション→アカウント: Administrator アカウントの状態)。

localhost:80 にアクセスできない(404エラー)

PuTTY の SSH トンネル設定にて localhost のポートフォワーディングを設定をしているのだが、他のポートは大丈夫なのに、なぜか 80 番(http://localhost)だけが正常にアクセスできない(404エラーになる)。

これもいろいろ当たってみると、どうやら IIS が干渉していたらしい。
コントロールパネル→プログラムと機能→Windows の機能の有効化または無効化
で確認すると、

■ インターネット インフォメーション サービス
  ■ World Wide Web サービス
    ■ アプリケーション開発機能
      ■ .NET 拡張機能 4.6
    ■ セキュリティ
      ■ 要求のフィルタリング

にチェックが入っていたので、これを外してから試してみると、無事 80 番もアクセス可能となった。

スタートメニューが使いづらい……

自分の場合、Windows 7 ではスタートメニューのアプリケーションをカテゴリごとにフォルダを作って整理することでアクセスしやすくしていたのだが、Windows 10 になると、これがまぁ使いづらいこと……特に、すべてのアプリが頭文字でソートされているのは、アプリを探しづらくて、非常に不便。
名前でソートされても、アプリの名前なんていちいち覚えてないんだってばさ……。

どうにか Windows 7 と同様のスタイルにできないか……と探すと、
weekly.ascii.jp
経由で知ったClassic Shell - Start menu and other Windows enhancementsがよさそうだったので、とりあえず Classic Start Menu のみインストール。
うん、いい感じ。
スタートボタンの[Shift]+左クリック/右クリックで標準の動作も可能なので、使い分けも効く。右クリックで出てくるメニューのほうは、Windows 10 のものが便利そうだし。

なお、同記事で紹介されていたHomepage M. Hoefs - Softwareも入れて、テーマを Aero 7 にしたかったのだが、
f:id:furyu-tei:20160522143859p:plain
のようなエラーが出て、インストールできない。Windows 10 の最新のリビジョンには未対応なのか……残念。
どうでもいいけれど、Windows 10 のアイコンとかフラットデザイン(?)、全般にダサいよね……

Open Hardware Monitor がスタートアップ起動できない

以前、突然電源が落ちてしまう謎の現象が頻発したとき(その後、原因は熱暴走だと判明)に懲りたのもあり、Windows 7 のときはOpen Hardware Monitor - Core temp, fan speed and voltages in a free software gadgetを常駐させてCPU温度を監視していた。
ところが、Windows 10 になってから、スタートアップ時に起動しなくなっていた(手動で起動することは可能)。
Options → Run On Windows Startup で自動起動を設定しようとしても、エラー終了してしまう。
起動に管理者権限が必要なので、単純にスタートアップに入れるというわけにもいかない。

そこで、
pc-karuma.net
を参考に、タスク スケジューラで起動するよう、設定しておくことにした。
セキュリティ オプションで、「☑ 最上位の特権で実行する」にチェックを入れるのを忘れないこと。

空き容量の謎→どうやら Windows Search が原因だった模様



Windows 10 インストール用&Windows 7 復旧用のファイル分、ディスク容量が減ってしまうことを覚悟していたら、なぜか Windows 7 の時よりも空き容量が増えていた、という……なぜ?

→その後、どうやら Windows Search のインデックスが原因だったと判明。


Windows7: PCが重い!SearchIndexer.exe (Windows Search)を停止するには−教えて!HELPDESKを参考にしてWindows Search を無効化したことで、空き容量表示は安定したように思える。
なお、ファイル検索には代わりにEverything Search Engineを使用している。

■ 【助言求む!!】アップグレード後に発生した、未解決問題

Windows10 バックアップと復元 (Windows 7) でエラー

これが今、一番の問題。

バックアップと復元 (Windows 7) を使って、定期的に C: ・ D: 丸ごとのバックアップを取得したかったのだが、

バックアップの設定(S)→バックアップを次に保存(B)
↓
SeagateGoFlex (P:) [推奨] 空き領域 417.03GB 合計サイズ 1.82TB を選択
↓
●自動選択 (推奨)
↓
[設定を保存してバックアップを実行(S)]

とすると、すぐに
f:id:furyu-tei:20160522150705p:plain
というダイアログが表示されてしまい、バックアップの実行ができない現象。

同様の事例が無いか検索してみると、

  • (0x80070002)指定されたファイルが見つかりません

ユーザーフォルダがおかしかったのが原因でした。
Windows7でマイドキュメントなどの場所を別のディレクトリに指定していたのですが、
そのためかWindows10にアップグレード後、見た目マイドキュメントなどのフォルダが2つ存在していました。Σ⊂(>∀< )なんでやねん!
新しく作られてしまったフォルダの方を削除し1つだけある形にしたところ解決しました。

Windows10でバックアップ時にエラーが出たので仲間にした - みなものブログ

という記事が見つかった。
確かに自分も場所を C: → D: に変更していた関係上、ユーザーディレクトリ下にフォルダが2つずつできていたので、重複しているもの(中身が空のもの)を削除してから試してみたが、やはりダメ。

次に、イベント ビューアーで Application ログを調べてみると、

暗号化サービスで、システム ライター オブジェクトで OnIdentity() の呼び出しを処理中にエラーが発生しました。

Details:
AddLegacyDriverFiles: Unable to back up image of binary Microsoft Link-Layer Discovery Protocol.

System Error:
アクセスが拒否されました。
。

というエラー(ソース: CAPI2、イベント ID: 513)が出ていることに気付いたので、再び対処方法を検索。

Error source CAPI2 id 513 - Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object
等を参考にしつつ、

> sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

を試してみると、確かにイベントログのエラーの方は消えることがわかった。

しかし、バックアップを実行しようとした直後のエラーダイアログは変わらず表示され、バックアップができない状況は改善されない……困った。
バックアップする対象を手動で色々変えてみたりもしたが、結果は同じ。
なお、「システム イメージの作成」からのフルバックアップについては特に問題なく取得でき、システム修復ディスクも作成できている。

◆ その他の確認等

やむを得ず、現在は代替として、
www.forest.impress.co.jp
を試用中。

GIMP 2 で wacom のペンタブレットが認識されたりされなかったり

これも謎。

wacom の Intuos (CTL-490/W0)なのだけれど、GIMP2を起動するたびに、
f:id:furyu-tei:20160522155905p:plain
認識されていなかったり(グレーアウト)
f:id:furyu-tei:20160522155915p:plain
問題なく認識されていたり。

いまひとつ、条件がつかめない……。
一度認識されると、その後はログアウトするまでは認識された状態になっているようだが……。
[2016.05.22 追記]うーん、マウスではなく、ペンタブレットを使って GIMP2 を起動した場合には、認識されている確率が高い……?

「タスクバーを自動的に隠す」設定が効かないことがある……?

ときどき、どうやってもタスクバーが出っぱなしになってしまい、隠れないことがある。
タスクバーが自動的に隠れない - マイクロソフト コミュニティ
うーん、通知も無いし、アクティブになりたがっている(通知しようとしている)起動中アプリも無さそうなんだけれど……。
s.jkunblog.com
これ(エクスプローラーの再起動)をやると、確かに隠れるようにはなるのだけれど、タスクトレイに常駐しているアプリがいくつか見えなくなってしまうので、困る。

その後、今度はタスクバーが隠れっぱなしになって、どうやっても出てこない現象も発生した……どうなっているんだ。