Rubyのラーメン"Ruby on 松江ラーメン"
マイペースにGoogle急上昇ワードを取得してもらった!
RubyでGoogle急上昇ワードを取得するに書いてあるスクリプトをいじってみた。REXMLに詳しいかはわからないけど、XPath大好きなので、XPathを使って書き直した。
わーい、コード書いてもらったよ!社会ネタを書くと詳しい人が色々教えてくれたことはあるけど、技術ネタでは初のレスポンスかもしれない。発言力無いからなぁこのブログ。
doc = REXML::Document.new(ret)
doc.get_elements('/rtt/item').each{|node|
puts node.elements['query'].text()
}
これ!これです!知りたかったのは!なるほど、get_elementsってメソッドを使えばいいのか。そういえばdoc.rootでその次にXPathを指定するメソッドで取れなくて、まぁいいやとりあえず動くメソッドで・・・ということがあったような気がします。そういえば/rttを書いてなかったかも。
ところでXML取得するだけならopen-uriの方がいいんじゃないかと思えてきた。
#!/usr/bin/env ruby require 'rexml/document' require 'open-uri' url = 'http://www.google.co.jp/m/services/trends/get' doc = REXML::Document.new(open(url).read) doc.get_elements('/rtt/item').each {|node| puts node.elements['query'].text() }
というわけで、更に書き直してみた。なんかスッキリした。id:d-kamiさん感謝です。
RubyでGoogle急上昇ワードを取得する
Google急上昇ワードとか今更感がしますが、Rubyで取得するコードを書いてみました。
#!/usr/bin/env ruby require 'rexml/document' require 'net/http' url = 'www.google.co.jp' ret = Net::HTTP.start(url, 80) { |http| http.get('/m/services/trends/get').body } doc = REXML::Document.new(ret) doc.root.each_element do |element| next unless element.has_elements? puts element.get_text('query').to_s end
気持ち悪いのはこれよりベストプラクティスな方法があるんではないか?ということ。REXMLのドキュメントを読みながら書いたんですが、REXMLを一通り理解するのはそれなりの時間がかかるのかなーと直感で判断し、これでいいかという感じになっています。詳しい人だったらどう書くんだろ。
Rubygemsをアンインストールできない。
gem uninstall ruby-aaws でエラーが発生。見つからないようだけど、gem listでは表示される・・・なんだこれ?と思いちょっとぐぐったら以下のエントリーを発見。
インストール時のPathが違っていた。homeディレクトリ下の.gemに入ってしまっていた。
gemが入っているpathを指定すれば、uninstallできる。
$ gem uninstall -i ~/.gem/ruby/1.8/ growlnotifier
全く同じ状況だった。これ、環境書いてないけどMacですよね?そういえばMacを買ったばかりの頃は全部sudo付けてたっけ。うーん、なんか面倒だなこれ。
追記
gems1.3.3あたりでこのバグは改善されたようです。
SinatraをさくらインターネットでCGIスクリプトとして動かす
ちょっと出遅れ感がするけど、Sinatraいい!
http://www.sinatrarb.com/:image:large
require 'rubygems' require 'sinatra' get '/' do "Hello World!" end
トップページのこのコードを見て触りたくなった!軽量フレームワークと言うだけあって、シンプル過ぎる!これはイケメンフレームワークですね。
動作確認
以下の内容でtest.rbを作成。
require 'rubygems' require 'sinatra' get '/' do "Hello World!" end
$ ruby test.rb
これでウェブサーバが立ち上がるので、localhost:4567にアクセスすると結果を確認できます。このままコードを編集すれば即座に変更内容が反映される。素敵。
サンプルコード(さくらインターネット用)
なんだか使えそうだぞ、となってくるとCGIスクリプトとして動かしたくなる。僕はさくらインターネットのスタンダードプランでサーバを借りているので、ググった結果を参考に以下のスクリプトで動作確認しました。
#!/home/YOUR_ID/local/ruby/bin/ruby # ↑Rubyをローカルに入れているのでこんなパスになってる $LOAD_PATH.unshift '/home/YOUR_ID/local/ruby/lib' ENV['GEM_HOME'] = '/home/YOUR_ID/local/lib/ruby/gem' require 'rubygems' require 'sinatra' set :run, false # HTTPサーバを立ち上げないならfalse set :environment, :cgi get '/' do 'hello!!' end Rack::Handler::CGI.run Sinatra::Application
これだとスクリプト名がURLに含まれてしまうのだけど、今のところこれでいいかと思っている。これが気に食わないのなら.htaccessを編集すればどうとでもなります。
よし、ドキュメントを読んでみるか。
Rubyを学ぶ為に、僕が読んだ4冊
プログラミングRuby 第2版 言語編
- 作者: Dave Thomas,Chad Fowler,Andy Hunt,田和勝,まつもとゆきひろ
- 出版社/メーカー: オーム社
- 発売日: 2006/08/26
- メディア: 大型本
- 購入: 6人 クリック: 254回
- この商品を含むブログ (156件) を見る
最初に買ったのがこれ。Rubyの仕様が網羅されており、実装がどうなっているかまで書いてある。今からRubyをやってみるかという人は最初に買わなくてもいいんじゃないかと思う。
プログラミングRuby 第2版 ライブラリ編
- 作者: Dave Thomas,Chad Fowler,Andy Hunt,田和勝,まつもとゆきひろ
- 出版社/メーカー: オーム社
- 発売日: 2006/08/26
- メディア: 大型本
- 購入: 2人 クリック: 61回
- この商品を含むブログ (72件) を見る
タイトル通りのライブラリのリファレンス。これ買った時は便利だと思ったなぁ。ただ、ちょっとだけRubyのバージョンが古いし、Rubyリファレンスマニュアル刷新計画が充実してきたらいらなくなるかもしれない。
Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術
Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術
- 作者: Brian Marick,菅野良二
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2008/02/23
- メディア: 単行本
- 購入: 7人 クリック: 207回
- この商品を含むブログ (40件) を見る
Rubyによるテスト技法が充実している一冊・・・では無く、なんとテスターがRubyを使えるようにと書いたニッチな技術書だった。しかし著者は途中からプログラマも読めるように書き直したので、プログラマが買っても面白いです。「プログラミングRuby 第2版」では気付かなかった事とかもあって、たまたま目についたから買った本にしては良かったと思う。