読者です 読者をやめる 読者になる 読者になる

はてなハイクのタイムラインを読む

日付変わっちゃったけど、罪滅ぼしに簡単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

参考:
[Ruby] Basic 認証 - Haida’s private weblog