Tag Archives: Ruby

[Ruby/MySQL]handlersocketライブラリを使ってみる

前回、MySQLのプラグイン「HandlerSocket」のインストールをしたので実際に使ってみる。

前回の最後にRubyのライブラリを入れたので、実際に使ってみるとします。

事前に用意したテーブルは以下のとおり。

CREATE TABLE `user` (
	`user_id` INT(10) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NULL DEFAULT NULL,
	`birthday` DATE NULL DEFAULT NULL,
	`memo` VARCHAR(255) NULL DEFAULT NULL,
	PRIMARY KEY (`user_id`)
)

まずは、Select。

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

# IDが1のものをSelect
p hs.execute_single(1, '=', [1]);
#=>[0, "1", "name", "2011-10-01", "memo"]

# IDが1より大きいのものをlimit=2でSelect
p hs.execute_single(1, '>=', [1], 2);
#=>[0, "1", "name", "2011-10-01", "memo", "2", "name2", "2011-10-28", "memo2"]

hs.close

結果が配列で返ってきます。
複数Selectしたときは、そのまま1つの配列に入って返ってくるので少し使いづらい気も。

一番最初の「0」ってのはリターンコード?っぽい。

続いてmultiなSelect。

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

# クエリ用の配列を用意して、条件を突っ込む
query = []
query << [1, '=', [1], 1, 0]
query << [1, '=', [2], 1, 0]

p hs.execute_multi(query)
#=>[[0, "1", "name", "2011-10-01", "memo"], [0, "2", "name2", "2011-10-28", "memo2"]]

hs.close

こっちのほうがsingleより速いらしい。

続いてInsert

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

p hs.execute_insert(1, [3,"name3","2001-01-01","memo3"])
#=>[0, "0"]

hs.close

Insert時のリターンとしてエラーコードとエラー内容が配列で返ってくる。
試しに一意制約にひっかかるようにしたら、[1, "121"]って返って来ました。

個別に、hs.get_error, hs.get_error_codeでも取得可

UPDATE,DELETEも同じような感じでできる。

注意点としては、トランザクションがないのでAUTO INCREMENTが効かないってところですかね。

RubyでFireFoxを操作

RubyでFFを操作。

firewatirってのを使えば簡単。FF側には「JSSH」というアドオンを入れるだけ。
http://wiki.openqa.org/display/WTR/FireWatir

以下サンプルコード

require 'rubygems'
require 'firewatir'

browser = FireWatir::Firefox.new
# googleへ遷移
browser.goto("http://www.google.co.jp/")
# nameがqのテキストボックスに「you tube」と入力
browser.text_field(:name, "q").set("you tube")
# 一番最初のformをsubmit
browser.form(:index ,1).submit

browser.close

しかもありがたいことにlinuxでも動作する。
これがあれば簡単にjsが動くクローラーを作れる。

もちろんhtmlを抜くことも、ボタンを押すことも可能。


# name属性が「date」なセレクトボックスで「今日」を選択
browser.select_list(:name, "date").select "今日"
# name属性が「check」なチェックボックスでチェック
browser.checkbox(:name, "check").set
# idが「submit」なボタンをクリック
browser.button(:id, "submit").click
# htmlを取得
html = browser.html

これは本当に便利。

Google急上昇ワードをRubyで取得してみる

急上昇ワード取得用URL
http://www.google.co.jp/m/services/trends/get

このURLに[openuri]アクセスしてXMLで取得したレスポンスを[hpricot]でパースするだけ。

XMLのサンプル。
(なぜかこのとき「恥骨」が1位)

<rtt version="1.0"> 
  <update>2010-08-24T22:30:05-07:00</update> 
  <language>ja</language> 
  <country>jp</country> 
  <item> 
    <query>恥骨</query> 
    <rank>1</rank> 
    <score>2157.00</score> 
    <snippet src="http://ja.wikipedia.org/wiki/%E6%81%A5%E9%AA%A8">恥骨(ちこつ)(英名pubis)(羅名pubis、os.pubis)は、四肢動物の腰帯を構成する骨 の一つである。 ...</snippet> 
    <landing_page url="http://www.google.com/search?trndsrc=zeitgeist&amp;trndrnk=1&amp;trndutm=4c74aa5d&amp;trndscr=2157&amp;q=%E6%81%A5%E9%AA%A8&amp;gl=jp&amp;hl=ja&amp;lr=lang_ja"/> 
  </item>
</rtt>

そしてキーワードを取得して、とりあえず配列に突っ込むサンプル

require 'hpricot'
require 'open-uri'

words = Array.new

#APIからすべての内容を取得
all = Hpricot(open("http://www.google.co.jp/m/services/trends/get"))
#ワードのみを取り出す
(all/:query).each do |link|
  word = "#{link.inner_html}"
  words.push(word)
end

TokyoTyrantとRubyAPIのインストール

TokyoTyrantとRubyAPIのインストール

# TokyoTyrant
wget tokyotyrant-1.1.40.tar.gz http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
tar xvzf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40
./configure
make
sudo make install
cd ..

# TokyoTyrant Ruby API
wget tokyotyrant-ruby-1.13.tar.gz http://1978th.net/tokyotyrant/rubypkg/tokyotyrant-ruby-1.13.tar.gz
tar xvzf tokyotyrant-ruby-1.13.tar.gz
cd tokyotyrant-ruby-1.13
sudo ruby install.rb
cd ..

TokyoCabinetとRubyAPIのインストール

TokyoCabinetとRubyAPIのインストール


# TokyoCabinet
wget tokyocabinet-1.4.43.tar.gz http://1978th.net/tokyocabinet/tokyocabinet-1.4.43.tar.gz
tar xvzf tokyocabinet-1.4.43.tar.gz
cd tokyocabinet-1.4.43
./configure 
make
sudo make install
cd ..

# TokyoCabinet Ruby API
wget tokyocabinet-ruby-1.30.tar.gz http://1978th.net/tokyocabinet/rubypkg/tokyocabinet-ruby-1.30.tar.gz
tar xvzf tokyocabinet-ruby-1.30.tar.gz
cd tokyocabinet-ruby-1.30
ruby extconf.rb
make
sudo make install

次回はサンプルコードでも。