5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ふぁぼったツイートの画像を手元に保存するRubyスクリプト

Last updated at Posted at 2018-01-24

動機

「このツイートの画像、いいな!」と思ってお気に入り登録したツイートの添付画像を、一括でダウンロードしたい!・・・その一心で作りました。

ソースコード

twitterのgemを利用します。コンシューマキーなどは、自分のものを利用してください。
Twitterクライアントのfavoritesメソッドでお気に入りに登録されているツイートを取得していきながら、画像をダウンロードしていきます。favoritesメソッドを呼ぶときに、pageを指定すると、過去にお気に入り登録したツイートを取得できます。指定するpageの値を大きくしていきながら、お気に入りのツイートを遡っていきます。

twitter_client.rb
require 'twitter'

class TwitterClient
  def initialize
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key = ""
      config.consumer_secret = ""
      config.access_token = ""
      config.access_token_secret = ""
    end
  end

  def favorite(num=20,page=1)
    # pageを指定すると、より過去のお気に入りツイートが見れる
    begin
      @client.favorites({count: num, page: page})
    rescue Twitter::Error::TooManyRequests => error
      STDERR.puts "Twitter::Error::TooManyRequests while getting favorite tweets."
      sleep error.rate_limit.reset_in # APIの規制が解除されるまでsleep
      retry
    end
  end
end
get_favorite_tweet_picture.rb
#!/usr/bin/env ruby

require './twitter_client.rb'
require 'open-uri'

def fetch(url)
  p url
  html = open(url)
  body = html.read
  mime = html.content_type
  return body, mime
end

client = TwitterClient.new
picture_counter = 1 #画像の名前をつけるための、暫定的なカウンター
page = 1
until (favorites = client.favorite(20,page)).nil? do
  favorites.each do |tweet|
    p tweet.text
    unless tweet.media.empty?
      picture_dir = 'favorite_picture/'
      Dir.mkdir(picture_dir) unless File.exist?(picture_dir)
      media_urls = tweet.media.map{|media| media.media_url.to_s}
      media_urls.each do |url|
        img,mime = fetch url
        next if mime.nil? or img.nil?
        ext = ''
        if mime.include?('jpeg')
          ext = '.jpg'
        elsif mime.include?('png')
          ext = '.png'
        elsif mime.include?('gif')
          ext = '.gif'
        else
          next
        end
        result_file_name = picture_dir + picture_counter.to_s + ext
        picture_counter += 1
        File.open(result_file_name, 'w') do |file|
          file.puts(img)
        end
      end
    end
  end
  page += 1
end
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?