RubyでWEBAPIをたたこうとおもい
リファレンスから
require 'net/http'
Net::HTTP.version_1_2 # おまじない
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response.body
}
という記述を利用してヤフーのページを取得しようと
動かしたところまったく動作しなかったのでだめもとで例外をとってみたら
begin
Net::HTTP.version_1_2() # おまじない
Net::HTTP.start("http://yahoo.co.jp", 80) {|http|
response = http.get("/index.html");
puts response.body
}
rescue => ex
print ex.class;
print "<hr />";
print ex.message;
print "<hr />";
print ex.backtrace;
end
SocketErrorgetaddrinfo: 記憶域制御ブロックが壊れています。 C:/ruby/lib/ruby/1.8/Net/HTTP.rb:560:in `initialize'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:560:in `open'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:560:in `connect'C:/ruby/lib/ruby/1.8/timeout.rb:53:in `timeout'C:/ruby/lib/ruby/1.8/timeout.rb:101:in `timeout'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:560:in `connect'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:553:in `do_start'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:542:in `start'C:/ruby/lib/ruby/1.8/Net/HTTP.rb:440:in `start'C:/Apache/htdocs/tokui12.rb:11
上記のような例外が取れました。
これは、Rubyの際インストールが必要なのでしょうか?
リファレンスまんまを利用しているので記述間違いとかはないと思うのですが・・・
システム的な問題?と思いPHPでたたいたところ
PHPであれば普通にAPIはたたけました。
対処策はどうしたらいいのでしょうか?
No.1ベストアンサー
- 回答日時:
たぶん、この例外発生原因は次の部分です。
Net::HTTP.start("http://yahoo.co.jp", 80) {|http|
URIではなくアドレス(IPアドレスやFQDN等)を入れる場所なので、こんな感じですね
Net::HTTP.start('www.yahoo.co.jp', 80) {|http|
<おまけ1>
まず、参照するドキュメントを変えましょう。
記載されたマニュアルは既に古い物なので、Ruby1.8.7系であっても次のマニュアルを当たるようにしましょう。
http://doc.ruby-lang.org/ja/1.8.7/doc/index.html
http://doc.ruby-lang.org/ja/1.8.7/library/net=2f …
<おまけ2>
ヤフーのトップページはリダイレクトかかるので、多分今回のサンプルそのまんまだと意図した実験にはならないでしょう。
別のサイトで試すか、マニュアルにも記載のあるリダイレクト対応メソッドを実装しましょう。
以下、枠線内抜粋
--------------------------------------------------------------------------------------------------
リダイレクトに対応する
以下の例の fetch はリダイレクトに対応しています。 limit 回数以上リダイレクトしたらエラーにします。
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess
response
when Net::HTTPRedirection
fetch(response['location'], limit - 1)
else
response.value
end
end
print fetch('http://www.example.org')
--------------------------------------------------------------------------------------------------
このサンプルコードから、最終行を次の内容に変えてみてください
尚、この例だとuriライブラリを読み込んでいるため、ターゲット指定にURIが使えるようになっています。
print fetch('http://www.yahoo.co.jp').body
順を追う意味からはあまり適さないと思うので、別のサイトで試したほうがいいとは思います。
<おまけ3>
他の言語経験から、メソッド呼び出しに()を加えたり、行末に;を付けたりされていると思います。
特別に強いこだわりが無ければ、この辺のコーディングスタイルをRubyっぽい物に合わせるようにしましょう。
規約として有名な所では青木さんや前田さんの物がありますが、
取り敢えずマニュアルで使われているスタイルを参考にしてみてください。
今後マニュアルを読む上でも、標準的なスタイルには慣れておいた方が良いと思います。
ありがとうございます!
なんとかページ取得のができました。
いろいろためいして遊んで見ます。
>他の言語経験から、メソッド呼び出しに()を加えたり、行末に;を付けたりされていると思います。
そうなんです、ついつい癖で;とか()とか書いてしまいます。
個人的にも()や;を書かなくていいのはラクなのですこしずつ ならしていきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
Ruby on railsをrails sで立ち...
-
VBScriptでExcel(2019)上のデー...
-
100万件越えCSVから条件を満た...
-
C言語の入力した文字を反転させ...
-
英数字を含む文字列(0-9,A-Z)...
-
秀丸エディタで、同じ記号で囲...
-
(再質問)エクセルのマクロボ...
-
pandasでsqlite3にテーブル作成...
-
pythonエラー
-
電子書籍作成、epubファイルの...
-
A4 持ち込み
-
前回の質問の続き
-
あせんうぶり言語
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
RubyGems の「GEM」は何の略で...
-
秀丸エディタで、同じ記号で囲...
-
Yahoo知恵袋や教えてgooのよう...
-
プログラミング の専門学校に通...
-
Rubyで画像処理
-
HPビルダーでのルビ振りで不...
-
ルビー、ruby の、初心者向けで...
-
rubyでn進数(16進数以上)の文...
-
小文字wと大文字Wの区別
-
COBOLのIFの入れ子について
-
VB.NETで階乗を求めるプログラ...
-
RubyでNo such file or directo...
-
Ruby / passenger のインストー...
-
web上のhtmlファイルから文字デ...
-
プログラミング言語で大文字と...
-
「大文字・小文字・スペース」...
-
バーコードのチェックデジット...
-
システムエンジニアの適正について
-
アプレットで三次方程式1
-
Ruby interpreter (CUI) 2.2.3 ...
おすすめ情報