はてなブックマークのお気に入りを新着の古い順に並べたい実装(途中経過1)
以下に現時点でのソースを上げておきます。参考にした個所については解説のあったURLをコメントに記載しています。
(ちなみにGitHubのアカウントを取ったにもかかわらず持て余しているのはこの場を借りて白状しておきますか)
# encoding: utf-8 # URLにアクセスするためのライブラリの読み込み require 'open-uri' # Nokogiriライブラリの読み込み require 'nokogiri' require 'rss/1.0' require 'rss/dublincore' # スクレイピング先のURL url = 'http://b.hatena.ne.jp/kenjiro_n/favorite' # http://inobo52.hatenablog.com/entry/2014/09/04/Ruby%E3%81%A7HTML%E8%A7%A3%E6%9E%90%E3%81%8C%E8%B6%85%E4%BD%99%E8%A3%95%E3%81%AA%E3%82%93%E3%81%A7%E3%81%99 opt = {} opt['User-Agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5' charset = nil html = open(url,opt) do |f| charset = f.charset # 文字種別を取得 f.read # htmlを読み込んで変数htmlに渡す end # 出力用のハッシュ users = {} # htmlをパース(解析)してオブジェクトを生成 doc = Nokogiri::HTML.parse(html, nil, charset) doc.xpath('//*[@id="hatena-body"]/div[2]/div[1]/div[2]/ul/li').each do |node| # タイトルを表示 fr = node.css('a').attribute('href').value fr = fr.tr("/",'') fr_uri = 'http://b.hatena.ne.jp/' + fr + '/rss' # p fr_uri open(fr_uri, opt) do |httpr| response = httpr.read result = RSS::Parser.parse(response, false) result.items.each_with_index do |item,i| #puts item.title users[fr] = item.dc_date #puts fr + "\t" + item.dc_date.to_s + " break # 最新のアイテムだけ取得する end end end # http://qiita.com/mnishiguchi/items/9095ac989ed7d51fe395 # !!! dc:dateタグに入っている日付の昇順で取得したいけどうまくいかない!!! Hash[ users.sort_by{ |_, v| v } ] # http://uxmilk.jp/22615 File.open("sample1.txt", "w") do |f| users.each{|key, value| f.puts key + "\t" + value.to_s } end