2017.1.17
2020.1.21

Google Feed APIが使えなくなっていたのでPHPで代替

2017年1月、なんとなしに自分のサイトを確認していたら、Google Feed APIが使えなくなっていたことに気がつきました。

以前(2015年末?)にも廃止されかかったことがあるようで、その時は復活したらしいのですが、今後、どうなるか分からなかったので他の処理で代替することにしました。

代替手段

簡単に代替できる手段がないか調べてみると、jQuery.get()を使った代替手段が見つかりました。ですが、利用していたのがAmazonのRSSで、それだと以下のようなエラーが出てうまくいきません。


XMLHttpRequest cannot load https://www.amazon.co.jp/gp/rss/bestsellers/digital-text/2275256051/ref=zg_bs_2275256051_rsslink?tag=***.
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://***' is therefore not allowed access.

上記の方法で正常に呼び出すにはサーバ側の対応が不可欠なようで、結局、やりたくなかったのですが、PHPで対応することにしました。

以下、そのコードです。

JavaScript


$.get("rss.php", { url: "https://www.amazon.co.jp/gp/rss/bestsellers/digital-text/2275256051/ref=zg_bs_2275256051_rsslink?tag=***" },
    function(data){
        console.log(data);
    }
);

PHP(rss.php)


<?php
$url = $_GET['url'];
$rss_data = simplexml_load_file($url);
$entries = array();
foreach($rss_data->channel->item as $item){
    $entries[] = array(
            'title'=> trim($item->title)
            ,'link' => trim($item->link)
            ,'date' => date('Y.m.d H:i:s', strtotime($item->pubDate))
            ,'description' => trim($item->description)
        );
}
$res = array();
$res += array('link' => trim($rss_data->channel->link));
$res += array('entries' => $entries);

// JSONで返す
header('Content-Type: application/json; charset=utf-8');
echo json_encode($res);
?>

ポイントとしては、他のRSSと違ってAmazonの場合、取得してきたデータをtrim()しないとなぜか正常な値をとれませんでした。

レビュー点数や価格の情報が欲しい場合は、descriptionを検索するしかありませんが、それはGoogle Feed APIでも同様ですね。Google Feed APIの時とは変換パターンが若干違っていましたが、だいたいは同じだったので、それについては、こちらの記事(RSSフィードを読み込んでサイトに表示する方法 - AngularJS)を参考にしてください。

参考リンク

JavaScript】関連記事