rubyによるサイトの取得

rubyを主導で実行すると、某テニスサイトの結果が取得できたんで

まずは、RubyOnRailsでなくて、CGIとして実行してここで取得できるか

試したが、”Permission denied - connect(2)  for "www.hogehoge.net" port 443 "とでて、駄目だった....

 

何が原因か分からないが、先は長そうだ。ふぅ~。

原因が分かるか、それとも別の方法を考えないといけないか。。。。う~ん、、、ここまでうまくいっていたのになんてこった。

 

リクエスト結果を絞る

read_bodyから1行1行読むことができたので、

次は必要な情報は何かを判断。

これは、ソース書く前に、1例でも結果を見てそうするかを考える。

某テニスサイトは、結構法則的に、エントリを出しているので

法則を決めて、結果を絞れそうなところまで分かってきました。

 

read_bodyの続き

ライブラリにも書いてある、サンプル的なソース

ーーーー

http.request_get(url.path) {|res|
  res.read_body do |segment|
    print segment
  end
}

-----

ここでいじってみて分かったのは、read_bodyで読み込む

segmentは、1行じゃなかった。。。。

resを1行1行みて、情報を絞りたい場合はもっと条件が必要。

https.request_get(url.path) {|res|
  res.read_body do |segment|
    segment.each_line do |line|

     #

     #  ここで、情報を絞ったりなんかしたり。。。。

     #

      print line
    end
  end
}

ググッ手もこんな例は出てこない。

まぁたいてい、APIたたいてJSON形式でレスポンスがあって

そこから処理っていう例が多い。

自分みたいなことをしたいってのは、レアなのかな。。。

 

 

called twiceが解決

NGなソース

ーーーーーーー

url = URI.parse('http://www.sample.com/')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}

res.read_body do |segment|
  print segment
end

ーーーーーーー

 

OKなソース

ーーーーーーー

url = URI.parse('http://www.asahi.com/')
http = Net::HTTP.new(url.host)

http.request_get(url.path) {|res|
  res.read_body do |segment|
    print segment
  end
}

ーーーーーーー

駄目なソースで、http.request()をした時点でbodyを読むcallをしてい

たのかなという想像。その後に、read_bodyで再度callしているので、

called twiceといわれて、ioerrorみたいですね。。。

どこかちゃんとドキュメントを読むと、記述されてるのかな。

 

ruby の http read_body

read_bodyを見つけて、http get したものを全部見て

必要なものだけ表示したいと思った。

しかし、read_bodyがそもそもうまく動いていない。

called twice (IOError)とかいわれて、エラーとなる。

methodが古いのか、、、深追いするか、別の方法を考えるか。。。

 

rubyとhttp get

ruby -ropen-uri -e 'open(ARGV[0]){|f| puts f.read }' http://www.asahi.com/

これと

curl http://www.asahi.com/

これは同じ結果。

 

ただし、次みたいにrubyをかいて実行した結果は、上と同じにならない。

ーーーーー

#!/usr/bin/ruby
require 'net/http'

result = Net::HTTP.get('www.asahi.com', '/')

p result

ーーーーー

ちょっと、ここを調べていこう。

すでにどこかには、解が出ている気がするけど。。。

virtualbox と centos6 と ruby on rails

本日の作業メモ

 

自分の趣味のテニスで、某有名なオフサービスが、痒いところに手が

届かないので、自分でできるところをやってみようと作業を始めました。

まずは、railsのサーバで自分が見たいところのみを表示するようにして

ゆくゆくはスマホで簡単にアクセスできるようにしたいなと思ってるが、

どこまでできるかは、自分のスキルと時間次第かな....

 

自分的なメモを記録していくところです。

 

virtualbox

windows7virtualboxをインストール

https://www.virtualbox.org/

[Downloads]-> [VirtualBox 5.0.16 for Windows hosts] でダウンロード

してインストール

 

●centos6.7

virtualboxに、centos6.7をインストール

日本のミラーサイトからisoイメージをダウンロード

http://ftp.riken.jp/Linux/centos/6.7/

その後、ぐぐって、インストール。

sshで接続できないなと、windows7のfirewallの設定や自分で

インストールしているzonealarmの設定を確認。

結局、デフォルトではsshdが起動していないというオチに。。。。

/etc/init.d/sshdを指定してstartさせれば、すんなり接続できた。

(puttyでの接続を確認)

余談だが、インストールしたcentos6.7はrunlevelが5だったが、不要なので

3にしてサーバ用にメモリを節約。

NetworkManagerが結構慣れない動きをするので、offにして

/etc/sysconfig/network-scripts/ifcfg-eth0

を編集。デフォルトではこのファイルがないので、自分で編集。

また、resolve.confを編集してもDNSの名前解決ができないので

こちらにDNS1=hogehogeとして、設定を追加。

GATEWAYもこちらに追加。

 

 

ruby on rails

rubyは、ぐぐって出てきた所を参考にインストール。

http://qiita.com/murachi1208/items/f3f15b41d6651cc57368

gemやrailsもググッて出てきたようにインストール。

rails serverとすると、エラーしたので対処したのは以下。

vi Gemfile
これで、以下のコメントアウトをはずす。
# gem 'therubyracer', platforms: :ruby
そして、"bundle install"を実施。
その後、rails s -b xxx.xxx.xxx.xxxでアクセスできることが
確認できた。