-
-
Save joshwand/5402126 to your computer and use it in GitHub Desktop.
| require 'tumblr_client' | |
| require 'mechanize' | |
| require 'date' | |
| require 'yaml' | |
| require 'uri' | |
| Tumblr.configure do |config| | |
| config.consumer_key = "consumer_key" | |
| config.consumer_secret = "consumer_secret" | |
| config.oauth_token = "oath_token" | |
| config.oauth_token_secret = "token_secret" | |
| end | |
| THREADPOOL_SIZE = 4 | |
| SEGMENT_SIZE = 25 | |
| HISTORY_FILE = File.join(File.dirname(__FILE__), "previous.yml") | |
| previous_dled_ids = YAML.load(File.open(HISTORY_FILE)) rescue [] | |
| directory = "tumblr-likes" | |
| client = Tumblr::Client.new | |
| likes = client.likes | |
| liked_count = likes["liked_count"] | |
| puts liked_count | |
| likes = [] | |
| (0...liked_count).each do |i| | |
| if i==0 or i%SEGMENT_SIZE==0 | |
| p "getting #{SEGMENT_SIZE} more likes starting at #{i}: #{likes.count} thus far" | |
| client.likes({:limit => SEGMENT_SIZE, :offset => i})["liked_posts"].each do |like| | |
| likes << like if like['type'] == 'photo' and !previous_dled_ids.include?(like['id']) | |
| end | |
| end | |
| end | |
| if likes.empty? | |
| p "no new likes!" | |
| exit 0 | |
| end | |
| puts "#{likes.count} new likes!" | |
| # some of this code comes from https://github.com/jamiew/tumblr-photo-downloader | |
| already_had = 0 | |
| threads = [] | |
| likes.each_slice(likes.count / THREADPOOL_SIZE ).each do |group| | |
| threads << Thread.new { | |
| begin | |
| p "launching thread #{threads.size + 1}" | |
| group.each do |like| | |
| i = 0 | |
| like["photos"].each do |photo| | |
| url = photo["original_size"]["url"] | |
| filename = "#{like["blog_name"]}-#{like["slug"]}-" | |
| filename += "#{i}-" if i > 0 | |
| filename += File.basename(URI.parse(url).path.split('?')[0]) | |
| if File.exists?("#{directory}/#{filename}") | |
| puts "Already have #{url}" | |
| already_had += 1 | |
| else | |
| begin | |
| puts "Saving photo #{url}" | |
| file = Mechanize.new.get(url) | |
| file.save_as("#{directory}/#{filename}") | |
| rescue Mechanize::ResponseCodeError => e | |
| puts "Error #{e.response_code} getting file for #{url}" | |
| end | |
| end | |
| i += 1 | |
| previous_dled_ids << like['id'] | |
| end | |
| end | |
| rescue Exception => e | |
| puts "unhandled exception:, #{$!}" | |
| end | |
| p "closing thread" | |
| } | |
| end | |
| threads.each{|t| t.join } | |
| YAML.dump(previous_dled_ids, File.open(HISTORY_FILE, "w")) | |
You can get all your likes (that tumblr still knows about) by using the 'after' request parameter https://www.tumblr.com/docs/en/api/v2#blog-likes, you can store how far you've gone back so far by inspecting the 'liked_timestamp' fields in the return object. I made a working hack as a fork.
I get the error:
tumblr-likes-downloader.rb:32:in `<main>': bad value for range (ArgumentError)
Does anybody know how to solve this?
Hello sir, I get an error.
///
C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/specification.rb:2283:in raise_if_conflicts': Unable to activate mechanize-2.7.3, because mime-types-3.0 conflicts with mime-types (~> 2.0) (Gem::ConflictError) from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/specification.rb:1406:inactivate'
from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems.rb:195:in rescue in try_activate' from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems.rb:192:intry_activate'
from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:124:in rescue in require' from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:inrequire'
from tumblr-likes-downloader.rb:2:in `
///
Okay, so i deleted mimetypes 3.0 and installed 2.0
Now i get this :
///
C:/Ruby22/lib/ruby/2.2.0/net/http.rb:923:in connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (Faraday::SSLError) from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:923:inblock in connect'
from C:/Ruby22/lib/ruby/2.2.0/timeout.rb:73:in timeout' from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:923:inconnect'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:863:in do_start' from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:852:instart'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1375:in request' from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1133:inget'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:80:in perform_request' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:40:inblock in call'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:87:in with_net_http_connection' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:32:incall'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday_middleware-0.9.2/lib/faraday_middleware/response_middleware.rb:30:in call' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/request/url_encoded.rb:15:incall'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/request/multipart.rb:14:in call' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday_middleware-0.9.2/lib/faraday_middleware/request/oauth.rb:42:incall'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/rack_builder.rb:139:in build_response' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/connection.rb:377:inrun_request'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/faraday-0.9.2/lib/faraday/connection.rb:140:in get' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/tumblr_client-0.8.5/lib/tumblr/request.rb:8:inget_response'
from C:/Ruby22/lib/ruby/gems/2.2.0/gems/tumblr_client-0.8.5/lib/tumblr/request.rb:26:in get' from C:/Ruby22/lib/ruby/gems/2.2.0/gems/tumblr_client-0.8.5/lib/tumblr/user.rb:16:inlikes'
from tumblr-likes-downloader.rb:25:in `
///
please help, i've been trying to get it to work for the last 3 days.
This is my first experience with ruby and programming,
Not getting much out of it so far.
Kudos for using Ruby
@pfoax as far as I can tell it's because tumblr no longer support SSLv3 (which is normal, since it was definitively dropped and replaced by TLS) and tumblr_client still try to use it.
I created a javascript version of this and it's called tumblr-lks-downldr.You can use it as an NPM module (https://www.npmjs.com/package/tumblr-lks-downldr) or as a CLI tool (https://www.npmjs.com/package/tumblr-lks-downldr-cli). I would suggest the second one if you just one to download the liked posts without writing any code.
Please let me know if that works.
hello geeks,
i am don't know nothing about ruby and programming in windows. could anybody please help me with step by step instructions to get my liked photos
i have downloaded ruby and notepate++ and saved this above script . as ruby format and run from admin cmd console .. after i get this error message
c:>"Users\xxxxx\Desktop\tumblr-likes-downloader.rb"
C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' : cannot load such file -- tumblr_client (LoadError) from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55 :inrequire'
from C:/Users/xxxxxx/Desktop/tumblr-likes-downloader.rb:1:in `
Many thanks ..
Not pretending to have any major knowledge about ruby or programming in general. However, some questions above are pretty basic so i’ll write down the steps i took to make this work on my mac. I used the fork zbas made since i had more than 1000 likes to download.
- Register a tumblr app to get the consumer_key and the consumer_secret.
You can do this here: www.tumblr.com/oauth/apps - Use the in browser tumblr_api console tumblr provides to get the oauth_token and oath_token_secret for my tumblr account.
This can be had here: https://api.tumblr.com/console/ - Paste all of the above in the script fork of zbas.
- install the latest version of ruby using homebrew
Command in terminal in iMac: brew install ruby - Clone the git repository for the required gem tumblr_client to get the before functionality since this is only contained in the master version.
Command in terminal on iMac: git clone https://github.com/tumblr/tumblr_client.git - Build the tumblr_client gem from the cloned repository.
Command in terminal on iMac(in the repository directory): gem build tumblr_client.gemspec - Install both the generated tumblr_client gem and the required mechanize gem.
Commands in terminal on iMac(in the repository directory to pick the correct client):
gem install tumblr_client-0.8.5.gem
gem install mechanize - run the ruby script in terminal using the command:
ruby tumblr-likes-downloader.rb
Many thanks to all who contributed and mbas for his fork.
I am getting this error (Mac OS Sierra):
tumblr-likes-downloader.rb:37:in <main>': undefined method each' for nil:NilClass (NoMethodError)
Any advice?
If you are not able to run this, here I made one as well:
If any one like node.js, I made one too https://github.com/gonejack/tumblr-likes-downloader
I don't have any idea at all about anything. i just installed ruby now what do i do to get this working