はてなハイクのタイムラインを読む
日付変わっちゃったけど、罪滅ぼしに簡単Rubyではてなハイクのタイムラインを読みます。Rubyは簡単にBasic認証できて嬉しいですね。Basic認証のパスワードには投稿用アドレスを使用します。詳しくははてなハイクAPIで。
haiku.rb
require 'open-uri' require 'rexml/document' ID = "はてなID" PASSWORD = "投稿用アドレス" # はてなハイクAPI参照 TIMELINE_URI = "http://h.hatena.ne.jp/api/statuses/user_timeline.xml" PUBLIC_URI = "http://h.hatena.ne.jp/api/statuses/public_timeline.xml" ######################### # Haiku ######################### class Haiku def initialize @auth_info = [ID, PASSWORD] end # Basic認証してXMLを取得 def basic_get(uri) xml_source = open( uri, {:http_basic_authentication => @auth_info} ).read return xml_source end # XMLを解析し、表示も担う def parse(doc, show_user) doc.elements.each("*/status") do |status| texts = status.elements["text"].text.split(/=/) print "【" + texts[0] + "】" + "\n" + "=>" + texts[1] # はてなスターの表示 star = status.elements["favorited"].text.to_i star.times{ print "*" } puts star print "Posted by " + status.elements["user/name"].text + "\n" if show_user puts "---------------------------------------------------------" end end # 自分のタイムライン詳細を表示 def show_timeline doc = REXML::Document.new( basic_get(TIMELINE_URI) ) parse(doc, false) end # パブリックタイムラインを表示 def show_public_timeline doc = REXML::Document.new( open(PUBLIC_URI) ) parse(doc, true) end def post end end ######################### # main ######################### command = ARGV.shift case command # タイムラインモード when "t" puts "Time line mode..." haiku = Haiku.new haiku.show_timeline # パブリックタイムラインモード when "p" puts "Public time line mode..." haiku = Haiku.new haiku.show_public_timeline # コマンドエラー else puts "There is no such command." end
使用方法
タイムラインモードとパブリックタイムラインモードがあります。タイムラインモードでは自分のタイムラインが表示され投稿者名は表示されません。一応、スターを付けたユーザー数も表示しています。
haiku.rb t
- -
【文末に「会社で。」をつけてテンションを下げる】
=>気がついてたら寝てた。会社で。******6
- -
出力例にスターが多い投稿を持ってくる辺りが自分のあざとさを感じる……。さあ次は投稿だと思ったらopen-uriはGETのみなのね。open-uriでPOSTしようなんて考えたことないから知らなかった。ちょいとした罪滅ぼしコードなので、書き直すのも面倒なのでここで止め。
NET::HTTPを拡張してPOSTも出来るようにしている人もいる。
open-uriをPOST対応させる - urekatのスカンク日記3