読者です 読者をやめる 読者になる 読者になる

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

RubyではてなブックマークのRSSにアクセスすると503が返ってくる

RubyでNokogiriとopen-uriRSSを読もうと思ったら503が返ってきた。

プログラム的にはこれ。

require 'nokogiri'
require 'open-uri'
require 'uri'

url = "http://b.hatena.ne.jp/search/tag?q=docker&mode=rss"

charset = nil

html = open( url ) do |f|
    charset = f.charset
    f.read
end

xml = Nokogiri::XML html

p xml

 

そして返ってくるエラーは503。

yatta472:~/workspace/lib/tasks $ bundle exec ruby main.rb 
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:359:in `open_http': 503 Service Temporarily Unavailable (OpenURI::HTTPError)
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:210:in `catch'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:210:in `open_loop'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:151:in `open_uri'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:717:in `open'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:35:in `open'
        from main.rb:12:in `<main>'
yatta472:~/workspace/lib/tasks $ 

うーむ。503って・・・・403じゃないのか。

 

User-Agentで弾かれているらしい

ちょっと調べてみたら答えはすぐ出てきた。

q.hatena.ne.jp

User-Agentで弾かれているらしい。

ってことでUser-Agentを偽装すればアクセスできた。

require 'nokogiri'
require 'open-uri'
require 'uri'

url = "http://b.hatena.ne.jp/search/tag?q=docker&mode=rss"

opt = {}
opt['User-Agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5'

charset = nil

html = open( url, opt ) do |f|
    charset = f.charset
    f.read
end

xml = Nokogiri::XML html

p xml

そもそも、User-Agentが何になっているのかがよくわからないなぁ。あと、User-Agentをいろいろと確認して実証した結果を記事にしている方がいらっしゃったきがするんだけど忘れてしまった。

その辺も後日調べよう。

たのしいRuby 第5版

たのしいRuby 第5版

広告を非表示にする
Real Time Web Analytics