ニコ動スクレイピングしたら楽しそうだなーと思ってやってみたら、 2回ほどコケたのでメモ。
homebrewで入れたopensslの証明書でコケる
opensslのバージョンが古かったので、homebrewでopenssl入れたら ruby2.0.0で証明書エラーでました。
http://qiita.com/items/12457815d5cee3723b97
こちらを参考に、証明書を入れて無事解決。
$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/usr/local/etc/openssl/cert.pem"
$ brew install curl-ca-bundle
$ brew list curl-ca-bundle
/usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt
$ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
追記(2013/05/01)
WindowsでRubyInstallerを使ってRubyをインストールした場合、下記で対応します。
$ wget http://curl.haxx.se/ca/cacert.pem
$ cp cacert.pem /c/Ruby193/
$ export SSL_CERT_FILE=/c/Ruby193/cacert.pem
参考:Root certificates? · Issue #148 · oneclick/rubyinstaller
SSLバージョンでコケる
さて、Mechanizeを使ってみましょー。
ニコニコ動画にアクセスしてログインしてみます。
require 'mechanize' LOGIN = 'https://secure.nicovideo.jp/secure/login?site=niconico' agent = Mechanize.new agent.post(LOGIN, 'mail' => mail, 'password' => pass)
が、ここで怒られます。
Errno::ECONNRESET: Connection reset by peer - SSL_connect
from /Users/upinetree/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/net/http.rb:917:in `connect'
どうも、ニコ動はSSLv3じゃないとダメっぽいです。
http://stackoverflow.com/questions/11855324/ruby-mechanize-https-error
ここを参考に。
agent = Mechanize.new agent.ssl_version = 'SSLv3' agent.post(URL::LOGIN, 'mail' => mail, 'password' => pass)
これでOK!
追記(2013/05/01)
SSLv3は脆弱性が発見されたので、TLSv1以上にしましょう。
agent.ssl_version = 'TLSv1'