- ブラウザで画像を保存したいモーメントのページを開きます。
- 開発者向けツールを開いてネットワークタブへ移動し、絞り込みをXHRにします。
- ページをリロードすると(モーメントのURLの末尾の数列).jsonというものが降ってきているのがわかります。これを右クリックしてcURLとしてコピーします。
- ターミナルを開いて貼り付けます。パイプなどを使って適当なファイルに保存してください。
- このスクリプト(笑)を
ruby Twitter_momentMediaDownloader.rb (今保存したjsonのパス)
として実行します。 - ダウンロードされた画像は
/tmp/TwMoment-(ランダムな数列)/
以下に保存されています。変えたい時は28行目のパスを変更しておいてください。/tmp
がtmpfsな人は忘れずにNVMに保存しましょう - 画像ファイルはモーメントで表示した際に上から順に頭に番号がついているのでPDFにしたい時も楽です。
Created
January 26, 2021 00:11
-
-
Save motorailgun/b93d57c1df66a271bfe3157d1e05f922 to your computer and use it in GitHub Desktop.
Twitterのモーメントにある画像を保存するやつ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "json" | |
raw_json = JSON[File.open(ARGV[0]){|file| file.read}] | |
tweets_list = raw_json["globalObjects"]["tweets"] | |
# tweets_orderはツイートIDのArray | |
tweets_order = raw_json["timeline"]["instructions"][0]["addEntries"]["entries"][1..].reduce(Array.new){|orderd_list, item| | |
if item["content"].has_key?("item") and item["content"]["item"]["content"].has_key?("tweet") then | |
orderd_list << (item["content"]["item"]["content"]["tweet"]["id"]) | |
else | |
orderd_list | |
end | |
} | |
# id_imgURL_pairは | |
# {ツイートID1: [メディアのファイル名1, メディアのファイル名2...], ツイートID2: [メディアのファイル名...]... } | |
# というハッシュになる(メディアの含まれないものは返さない) | |
id_imgname_pair = tweets_list.transform_values{|tweet| | |
if tweet["entities"].has_key?("media") then | |
tweet["entities"]["media"].reduce(Array.new){|media_urls, media_object| | |
media_urls << media_object["media_url_https"].match(/([^\/]+\.[^\/]+?\Z)/i).to_s | |
} | |
elsif | |
nil | |
end | |
}.reject{|key, value| true unless value} | |
randdir = "/tmp/TwMoment-#{rand(65536)}" | |
Dir.mkdir(randdir) | |
Dir.chdir(randdir) | |
imgfiles = tweets_order.reduce(Array.new){|files, id| files.push(id_imgname_pair[id])}.flatten.compact | |
imgfiles.each_with_index{|filename, index| system("curl https://pbs.twimg.com/media/#{filename}?name=orig -o #{index}-#{filename}"); sleep 2} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment