2012-07-04

[ruby]http通信周りで使えそうなコード類

とあるコードを書いてたときに思わずアレ?ってなったので実装方法をメモしておく あまりいいコードでは無いが、参考用

1.スレッドを起こして処理を待ち合わせする
# スレッドを生成する
thread = Thread.new do
    # 通信など時間のかかる処理
end
# スレッド終了を待つ
thread.join
※スレッドに引数を設定するときはThreas.new("param1","param2") do |param1,param2|のようにする ※スレッドを終了させる場合はThread.kill(thread)とすればよい

2.http通信を行う 例えば、wikiの日本語ページに接続する場合は以下のようなコードを使用する
require 'net/http'
require 'uri'

hostname = http://ja.wikipedia.org
page = /wiki/%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88
proxy_addr = nil
proxy_port = nil

url = URI.parse(hostName)
proxyHttpClass = Net::HTTP.Proxy(proxy_addr,proxy_port)
res = proxyHttpClass.start(url.host) {|http|
     resp = http.get(page)
     body = resp.body
}
※プロキシを使用する場合、proxy_addrとproxy_portを文字列と数値で設定する(使用しない場合、nilでよい) ※接続が確立できているかどうかはrespのオブジェクトが何ものであるかもしくは、respのHTTPステータスコードで確認する

3.文字コード変換 以下のコードで「テスト」という文字をSJISに変換できる
require "nkf"
puts NKF::nkf('-s', "テスト")
※基本的にnkfで使用可能なオプションを第一引数に設定してやればよい

4.置換処理 Ruby 1.9で追加となった内容で知らなかった内容。(上記3つよりも個人的のこちらのほうが感心してた) ・パターンの中で(?<名前>パターン)という形でカッコに名前を付けられる ・第2引数の中では、\k<名前>という書式でそのカッコに当てはまる部分を埋め込むことができる
test = "AA BB, CC DD, EE FF"
puts test.gsub(/(?\w+)\s+(?\w+)/, '\k \k')
=>BB AA,DD CC,FF EE


以上。。。

0 件のコメント:

コメントを投稿

Blogger Syntax Highliter