Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Initial commit: Works for me, your mileage may vary, etc, etc |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | descendants | origin/master | trunk |
Files: | files | file ages | folders |
SHA3-256: |
6beb1d0a21a3d916001598c14e6df6bd |
User & Date: | atomicules@lavabit.com 2013-02-17 23:02:47 |
Context
2013-02-17
| ||
23:08 | Typical, spot something I missed as soon as I push check-in: d45e2bb088 user: atomicules@lavabit.com tags: origin/master, trunk | |
23:02 | Initial commit: Works for me, your mileage may vary, etc, etc check-in: 6beb1d0a21 user: atomicules@lavabit.com tags: origin/master, trunk | |
Changes
Added README.markdown.
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #StackExchange Favourites to Pinboard Import all your StackExchange site (Stackoverflow, Super User, Cross Validated, etc) favourites to Pinboard. Because amazingly no-one else seems to have done this. And yes, this is how I write Ruby code, tabs as well - if you think this is bad style you should see my Haskell. ##To Use Run `ruby /path/to/stackexchange-favs-to-pinboard.rb -i StackExchangeID -t PinboardAPIToken` You can get your Pinboard API token on your password tab of the settings page. Your StackExchange ID, is what you get when logged in to stackexchange.com itself - this is probably different from your Stackoverflow ID, etc. Since it does not overwrite existing bookmarks you can safely run it every so often to bring in new ones. ##Requirements Nowt beyond Ruby. I am aware there are Gems for StackExchange, but most of them seem to assume you are targeting just one site (Stackoverflow), not any/all StackExchange sites you may use. There is also at least one really good Gem for Pinboard, but it just seemed overkill for the one API function I wanted to use, plus I don't think it rate limits. |
Added stackexchange-favs-to-pinboard.rb.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #StackExchange Favs to Pinboard require 'open-uri' require 'json' require 'optparse' require 'cgi' optparse = OptionParser.new do |opts| opts.on('-i', '--id ID', "Stackexchange ID") { |i| StackID = i } opts.on('-t', '--token TOKEN', "Pinboard API Token") { |t| Token = t } end optparse.parse! def get_sites(id) response = open("https://api.stackexchange.com/2.1/users/#{id}/associated") parsed = parse(response) end def parse(response) #From: Garth, http://stackoverflow.com/a/1366187/208793 gz = Zlib::GzipReader.new(StringIO.new(response.string)) parsed = JSON.parse(gz.read) end def get_favs(site, id) response = open("https://api.stackexchange.com/2.1/users/#{id}/favorites?order=desc&sort=activity&site=#{site}") parsed = parse(response) end def pinboard_add(auth_token, url, description, replace, tags) attempts = 1 posted = false until ($rate_limit > 60) | (attempts > 3) | posted response = open(URI.encode("https://api.pinboard.in/v1/posts/add?auth_token=#{auth_token}&url=#{url}&description=#{description}&replace=#{replace}&tags=#{tags}").gsub("'", "%27")) #Bit of a hacky kludge. For some reason URI.encode doesn't catch apostrophes. if (response.status[0] == "200") & response.string.include?("done") puts "Added #{url}" posted = true elsif (response.status[0] == "200") & response.string.include?("exists") puts "Skipping #{url}, already exists" posted = true elsif response.status[0] == "429" # 429 Too Many Requests, increase rate limit $rate_limit *= 2 puts "Rate Limit increased to #{$rate_limit} seconds" end attempts += 1 #Rate limit as per Pinboard API requirements sleep $rate_limit end if $rate_limit > 60 puts "Rate limit has exceeded 60 secs, let's try again another time" quit elsif attempts > 3 puts "Failed 3 times to save #{url}, bombing out" end end if defined?(StackID) and defined?(Token) $rate_limit = 3 parsed = get_sites(StackID) parsed["items"].each do |site| favs = get_favs(site["site_url"].sub("http://", "").sub(".stackexchange", "").sub(".com", ""), site["user_id"]) favs["items"].each do |fav| title = fav["title"] tags = fav["tags"] link = fav["link"] pinboard_add(Token, link, CGI.unescape_html(title), "no", tags.join(", ")+", stackexchangefavs") #Need to unescape so can URI encode end end end |