質問: rubyでDBに保存しているURLをもとに、順番に50件ずつ配列にして、ループではてなのAPIを叩き、それぞれのURLのはてぶ数を取得するコードを書いたのですが、どうしても途中で URI::InvalidURIError: bad URI(is not URI?) がでて処理が止まってしまいます。指定しているURLに問題があるのはわかりますが、原因がつかめません。配列で一気に取得せずに、順番にひとつずつAPIを叩いていけばエラーがでず、問題なく処理できるのですが、配列にすると上記のようなエラーがでてきてしまいます。 原因がなにかわかる方いらっしゃいましたら回答の方宜しくお願いします。
回答: 具体的なコードが無い状態なので推測でしかないですが、「同一IPからのアクセスは1秒間に1回まで」というような制限が有るようです。 【【はてな】はてなブログのURL一覧とはてブ数を取得する方法【API】 - 文系プログラマによるTIPSブログ】 【はてなブックマーク件数取得API - Hatena Developer Center】 また、日本語を含むURI、ホスト名にアンダースコアがある、URI文字列の前後に空白文字がある場合URLのパースに失敗することが有るようです。 【Rubyで日本語のURI(URL)をパーズするなら Addressable::URI を使おう - Qiita】 【URI#split, URI#parseでエラー? - わさっき】 【タムタムの日記 - RubyのURIがホスト名にアンダースコアがあるとparseできない件】