2011年11月29日火曜日

チェックボックスにプログラム(Ruby)で指定のものにチェックしてそのデータを取り出す方法ー後編

前回、チェックボックスにプログラムで指定のものにチェックしてそのデータを取り出す方法と書きながら全然載っていないじゃんと思ったあなた!
正しい。

さて、今回は本当にやります。ただ前回書いたようなライブラリがうまく導入されていないと動きませんので、
い、意味がないわけじゃないんだよ、引っかかったら前の投稿見て環境整えてちょ(はあと)

というわけで、

今日は後編です。

気を取り直して簡単な例で実装してみましょう。

サンプルプログラムを作って見ました。
以下のサイトにこんなアンケートを作ってみましたので、実行してみてください。
あなたの答えたアンケート結果は反映されましたでしょうか?
ちょっとむっとする答えが帰って来たら正解です。

さて、これをプログラムでやっちゃいましょう。

まず、ちゃんとデータを取ってこられるか確認しましょう。

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new

# サンプルクエッション
agent.get('http://maoringo.secret.jp/questionnaire.html')

p agent.page.body


いかがですか、面倒な感じのソースがダダダッと取得できましたでしょうか。
さて、本題チェックボックスに入れてみましょう。
では次に以下のプログラムを実行してみてください。

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new

#サンプルクエッション
agent.get('http://maoringo.secret.jp/questionnaire.html')
#上のhtmlのソースを見て 
のformを:name=>の中に入力 agent.page.form_with(:name => 'form1' ){|f| f.checkbox_with(:value => 'Apple').check # これもソース中ののvalueを入力 # f.checkbox_with(:text => /チェックボックス2/).uncheck # ちなみにuncheckも出来ます f.click_button#submitをクリック } p agent.page.body
どうです?結果がソースの形で表示されましたでしょうか?
本文中に解説は書いてしまいましたが、
お目当てのurlをagent.getに入れてお目当てのサイトのソースからformの名前を入れ
valueにチェックしたい項目の名前を入れるだけです。
(日本語に対応させたい場合は以下のサイトを参考にiconvをお入れ下さい)
詳しくはここに書きませんが、もちろん、:valueに他のものを入れることも出来ますし、
rubyのプログラムなので自分の持っているファイルから
当てはまるものをファイルから任意の文字列を取ってきてvalueに入れて
チェックすることも出来ます。
また、今回はチェックボックスを使用しましたが、目的のデータを取得するsearch
やファイルのアップロードや、リンク先をクリックしてページを遷移した先のデータを取得することも
可能です。
以下のサイトが詳しいっす。
http://w.livedoor.jp/ruby_mechanize/
質問、わかりにくい点ありましたら、お気軽にコメントオア@maoringoまでお尋ね下さい:-)

というわけで久々にプログラムっぽいこと書いたわけですが参考になれば幸いです。
他の言語だともっとあっさり出来たかも~と後から思ったけど、ま、いっか(・。・;

0 件のコメント:

コメントを投稿