
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で質問しましょう!
似たような質問が見つかりました
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- Ruby MacBookAir起動時にRubyソースコードをコマンドラインで実行するには? MacのOS起動時 1 2022/04/18 01:55
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- Mac OS MacOSのLaunchAgentsってなんですか?使い方など教えてください。 前の質問でLaunc 1 2022/04/24 02:06
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- Ruby プログラミング講師はまだ需要ありますでしょうか? 1 2022/11/07 19:43
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(プログラミング・Web制作) HTMLを組み込むことができない言語 3 2022/05/21 10:05
- Ruby Rubyについて質問です 1 2022/05/13 18:20
- 薬剤師・登録販売者・MR ラツーダとグレープフルーツ 3 2023/07/03 09:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ruby 配列
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby loopメソッド 変数(再喝)
-
ruby loopメソッド 変数
-
ビーリアルのユーザー名を変え...
-
英数字を含む文字列(0-9,A-Z)...
-
C言語の入力した文字を反転させ...
-
(再質問)エクセルのマクロボ...
-
ruby while式
-
ruby クラス・オブジェクト・イ...
-
1、Rstudioで回帰直線を求める...
-
rubyでじゃんけんのプログラム...
-
実行時エラー450:引数の数が一...
-
【VBA】複数シートのデータを1...
-
c言語でランタイムエラーの処理...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
秀丸エディタで、同じ記号で囲...
-
RubyGems の「GEM」は何の略で...
-
WEBrick ファイルリストを表示...
-
bashスクリプトの中の rubyプロ...
-
before_filter を普通のクラス...
-
漢字が表示されない
-
ローカルサーバとの相違点について
-
rubyで末尾から文字を検索する
-
Rubyについて
-
Rubyの.soについて
-
chm版のリファレンスマニュアル...
-
ActiveScriptRubyについて
-
プログラミング の専門学校に通...
-
rubyでcgiのセッションを利用し...
-
Beaglebone評価ボードでrubyは...
-
rubyでcontinue 2;
-
Net::HTTP#get関連
-
Ruby:net/httpライブラリで質...
-
Windows上のRubyから、IMAP経由...
-
Rubyで画像処理
おすすめ情報