Twitterの発言をブログに載せる

Twitter検索の検索結果を宜しく整形するRubyスクリプト。要Ruby & Hpricot。

require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'cgi'

if ARGV.empty?
  puts "Usage: #{$0} <keyword>"
  exit 1
end
keyword = ARGV.join(" ")

stream = OpenURI.open_uri("http://twitter.1x1.jp/search/?source=&keyword=#{CGI.escape keyword}")

doc = Hpricot( stream.read )

out = $stdout


class Formatter
  def initialize(out)
    @out = out
    @out << <<END
<table>
END
  end

  def <<(t)
    @out << <<END
<tr>
  <td style="width:52px;"><a href="#{t[:website]}"><img src="#{t[:img_src]}" alt="#{t[:img_alt]}" title="#{t[:nick]}" width="48" height="48" /></a></td>
  <td>#{t[:message]}</td>
  <td>#{t[:day]}</td>
</tr>
END
  end

  def flush
    @out << <<END
</table>
END
    @out.flush
  end
end


formatter = Formatter.new(out)

(doc/"table.list"/:tr).each {|entry|
  img, name, message, website, twitter, agent, day, trash = *(entry/:td)
  params = {
    :img_src   => (img/:img).first[:src],
    :img_alt   => (img/:img).first[:alt],
    :img_link  => (img/:a).first[:href],
    :full_name => name.children.first.inner_text.strip,
    :nick      => (name/:a).inner_text.strip,
    :message   => message.inner_html.strip,
    :website   => (website/:a).first['href'],
    :day       => day.inner_text.strip,
  }
  formatter << params
}

formatter.flush


使い方:

ruby twitter-format.rb 検索式

Mac OS Xな人は↓

ruby twitter-format.rb 検索式 | pbcopy


↓そのままはてなに貼れる。

はてな記法ってだいたいのHTMLは書けるんだ。知らなかった。 2008-08-02 14:33:26+09
Twitter APIから取得して整形するより、Twitter検索を自分の名前で検索した結果をスクレイピングした方が速そうだな。 2008-08-02 14:04:02+09
TwitterWassrにつぶやいたテキストを整形してくれるツールがあるといいな。Twitterはてな記法とか。それがあれば毎日ブログを書くのも苦じゃない。そのツールをcronで回せばいい。粒度は1日ごとくらいがいいか。 2008-08-02 14:00:25+09
自分の記事の話だけど、紆余曲折が一切省かれた完全HowTo記事になっていて、そこにたどり着くまでの長さを考えると、もうちょっといろいろ書いてみたくなる → http://d.hatena.ne.jp/viver/20080720/p2 2008-08-02 13:50:00+09
@hyoshiok うーん…勉強会の主催って大変そうです。プログラミングの合間合間に勉強会。Ustreamならできるかな。Partty!.org + 音声録音 でもできるかもしれない。 2008-08-02 13:44:19+09
YLUG (Yokohama Linux Users Group), Kernel Code Reading party (カーネル読書会) @frsyuki 勉強会を主催するというライフハックがあるよ。 2008-08-02 13:41:44+09
というわけで、うまい具合に話を聞いてくれる自動相づちシステムがあるといいなーと思った。何という未来。 2008-08-02 13:38:41+09
ただ画面に向かって1人しゃべり続けるのはツライので、相手が欲しくなる。だけど、人の話をじっくり聞いてくれる && 技術用語が分かる && 報酬が要らないほどヒマ なんて人がたくさんいるとは思えない。 2008-08-02 13:37:54+09
初心者向け言語を作るとか、Webサービスを立ち上げるとかもいいんだけども、カッコイイ紆余曲折を書くというのも、技術者の社会的地位を向上させるという意味で、割と重要なんじゃないかなーと思った。 2008-08-02 13:33:40+09
同じ技術系でも、対談記事とか、あるいは勉強会とかカンファレンスが面白いのは、紆余曲折が聞けるところがミソなんじゃないか。原因不明のバグを抑え付け、起動しないカーネルを手なずけ、遅すぎるパフォーマンスを何とかチューニングする、とか。 2008-08-02 13:31:28+09
YLUG (Yokohama Linux Users Group), Kernel Code Reading party (カーネル読書会) @frsyuki 紆余曲折を書いてみた。 http://tinyurl.com/5enyfg 2008-08-02 13:31:03+09
技術系のブログ記事って、導入部分と結果だけしか示されていなくて、その間にあるハズである「紆余曲折」が書かれていない。当たり前だけど読み物としては全然面白くない。 2008-08-02 13:28:44+09
Objective-C++の処理系 == gcc は成り立つ? だとしたらgcc拡張使い放題でオイシイな。それで問題ない気がしてきた。 2008-08-01 21:31:13+09
そういえばObjective-C++をサポートしたコンパイラgcc以外に知らない。存在するんだろうか? 2008-08-01 21:30:04+09
gcc拡張をもろに使ってもいいだろうか。そうするとちょっとだけマシになる。あまり変わらないけど。 2008-08-01 21:28:02+09
コード生成部分の実装がキツイ。これは誰かにやって欲しいところだぁー 2008-08-01 21:27:19+09
Ruby+Objective-C++版Packrat Parser進捗:コード生成に突入。現状のMetalにRuby+Objective-C++コードジェネレータを付けるのが先か、最初からRuby+Objective-C++にコードジェネレータを実装するか。後者だと1回自 ... 2008-07-31 22:55:13+09
Objective-Cで クラスメソッドの探索 + 動的メソッド置き換え + dlopen()でカテゴリ追加 できた。できることはできるけど、もっと簡単にできて欲しい。ラッパが必要。 2008-07-31 22:02:59+09
Objective-Cのカテゴリを実装した共有ライブラリをdlopen()してロードしてみた。普通に動きすぎて逆に面白くない。 2008-07-31 20:49:13+09
modelineでset以外ができたらセキュリティーホールだ。:!sl とか書かれていたらたまったもんじゃない。 2008-07-31 15:12:42+09
もしやmodelineではset以外できないのか 2008-07-31 15:05:16+09
vimのmodelineでsyntax match ....と書いたら、:set syntax (Unknown option: match)と 解釈されてしまったー。うげげ。勝手にsetを付けないで欲しい… 2008-07-31 15:03:32+09
port install -d wine した。夏なのに。 2008-07-30 21:34:30+09
UTF-8の構造って意外と単純なんだなー。もっとぐちゃぐちゃなのかと思ってたw 2008-07-30 13:14:14+09
UTF-8のシーケンシャルアクセスはWikipedia:UTF-8を見れば実装できるかな:http://ja.wikipedia.org/wiki/UTF-8 2008-07-30 13:10:48+09
少し気になるのは、がっつり文字コードを変換してしまうコスト+メモリを確保するコストと、バックトラック時に発生するイテレータの移動にかかるコストの総量の、どちらが大きくなるのかという点。うーむ…前者かな 2008-07-30 12:44:34+09
univ. student in Japan. majoring in Physics, interested in Computer Graphics. @frsyuki 文字数インデックスで保持する必要はなくて実はシーケンシャルイテレータ保持しとけば良いケースかなーと思ったのでした 2008-07-30 12:41:28+09
となると入力をUTF-8に固定してしまえば、mmapだけでいいから省メモリで、文字コード変換も要らない。Shift_JISとかEUC-JPとかがきたらUTF-8に変換。 2008-07-30 12:40:57+09
@nyaxt おおそうだ。ファイルサイズ分はシーケンシャルで、バックトラック分だけがランダム。何文字バックトラックする距離は文法定義に依存するけど、先頭から見ていくよりは後ろから数えた方が速そう。 2008-07-30 12:37:56+09
univ. student in Japan. majoring in Physics, interested in Computer Graphics. @frsyuki 最初のファイルサイズ回というのはランダムアクセスなのですか?バックトラック分も指定ポインタから何文字後ろとかではない? 2008-07-30 12:35:48+09