ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    スポンサーサイト

    このエントリーを含むはてなブックマーク はてなブックマーク - スポンサーサイト あとで読む
    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    はてなブックマークのRSSをPHPで取得する方法

    このエントリーを含むはてなブックマーク はてなブックマーク - はてなブックマークのRSSをPHPで取得する方法 あとで読む
    はてなブックマークのRSSデータをPHPで取得していましたが、正常に取得できなくなっていたので、仕組みを調査しました。
    結論から言うと、はてな側が、ユーザーエージェントでアクセス制限していたようです。
    ユーザーエージェントを指定してアクセスする方法に変更したら、RSSデータを取得できるようになりました。

    (参考)
    はてなブックマークの RSS を Ruby で取得していたのですが、この頃 503 エラーが出るようになってしまい正しく取得出来ません。 - 人力検索はてな

    どなたか原因をご存知の方、あるいは RSS を取得出来る方法をご存知の方はいらっしゃいますか?

    User Agent をチェックしてるみたいです。
    偽装したら取得できました。



    PHP simplexml_load_fileはUAを送信していない(UA偽装してXMLを取得・解析)

    simplexml_load_file は UserAgentを送信してないため、 Shift_JIS のレスポンスヘッダを受け取ってエラーになっている。
    対処法はUA偽装したstream_context_createでXMLの文字列を取得した後SimpleXMLElementオブジェクトに格納してXML解析?

    $context = stream_context_create(array('http' => array(
    'method' => 'GET',
    'header' => 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
    )));
    $url = "http://hain.jp";
    $data = file_get_contents($url, false, $context);



    simplexml_load_file()で特定サイトのrssが取れない | For Want Of A Better Word

    $agent = stream_context_create(array('http'=>array('user_agent'=>'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)'))); //IE9
    $data = file_get_contents("ロードしたいURL", false, $agent);
    $tmp = "./tmpdata";
    file_put_contents($tmp, $data); //ファイル作成
    $rss = simplexml_load_file($tmp);
    unlink ($tmp);


    ↑テキストファイル($tmp)を1回作るのが冗長ですね?
    ユーザーエージェントの指定部分($agent)だけ参考にしてみます。


    単純にPHPのsimplexml_load_file()関数で、RSSを取得しようとすると、ユーザーエージェントのデータを送っていないので、ユーザーエージェントの判別処理か何かで、アクセスをはじかれているようです。
    (面倒くさいので、サーバーログを見ていないw)

    サンプルコードにあった、ユーザーエージェントのデータを送る方式にしたら、うまくRSSを取得できるようになりました。
    =修正成功!

    (例) こんなかんじです。
    <?php
    $tag = "google";
    $users = 100;
    $rss = "http://b.hatena.ne.jp/search/tag?mode=rss&users=".$users."&q=".urlencode($tag);

    //before
    //$xml = simplexml_load_file($rss);

    //after
    $agent = stream_context_create(array('http'=>array('user_agent'=>'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)'))); //IE9
    $str = file_get_contents($rss, false, $agent);
    $xml = simplexml_load_string($str);
    ?>



    ~短期集中講座~ 土日でわかる PHPプログラミング教室 環境づくりからWebアプリが動くまでの2日間コース
    フロイデ株式会社 吉谷 愛
    SBクリエイティブ
    2015-11-26
    ¥ 2,452



    PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
    鈴木 憲治 / 山田 直明 / 山本 義之 / 浅野 仁 / 櫻井 雄大 / 安藤 建一
    翔泳社
    2013-10-22
    ¥ 3,024


    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/1315-73c4f217

    FC2Ad

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。