Amazon API応答オブジェクトをitems.jsonというファイルに保存しようとしています。応答自体はjsonにありますが、この関数を使用すると、取得するファイルは空になります。unlink()関数はcronジョブですので気にしないでください。
<?php
/**
* Amazon ECS library
*/
if ("cli" !== PHP_SAPI)
{
echo "<pre>";
}
if (is_file('sampleSettings.php'))
{
include 'sampleSettings.php';
}
defined('AWS_API_KEY') or define('AWS_API_KEY', 'API KEY');
defined('AWS_API_SECRET_KEY') or define('AWS_API_SECRET_KEY', 'SECRET KEY');
defined('AWS_ASSOCIATE_TAG') or define('AWS_ASSOCIATE_TAG', 'ASSOCIATE TAG');
require '../lib/AmazonECS.class.php';
try
{
$amazonEcs = new AmazonECS('AWS_API_KEY', 'AWS_API_SECRET_KEY', 'com', 'AWS_ASSOCIATE_TAG');
$amazonEcs->associateTag(AWS_ASSOCIATE_TAG);
$response = $amazonEcs->category('KindleStore')->responseGroup('Small,Images')->search('free ebooks');
//Check if the json file exist
$filename = "/home/myusername/public_html/my/path_to/items.json";
if(file_exists($filename)){
//delete it
unlink($filename);
file_put_contents("items.json", $response);
}else{
file_put_contents("items.json", $response);
}
}
catch(Exception $e)
{
echo $e->getMessage();
}
if ("cli" !== PHP_SAPI)
{
echo "</pre>";
}
これを修正する方法について何か提案はありますか?
編集:$response変数は空ではありません。var_dumpしたときに得られるものは次のとおりです。
["Item"]=>
array(10) {
[0]=>
object(stdClass)#15 (8) {
["ASIN"]=>
string(10) "B004YDSL9Q"
["DetailPageURL"]=>
string(208) "http://www.amazon.com/The-Love-suspense-mystery-ebook/dp/B004YDSL9Q%3F"
["ItemLinks"]=>
object(stdClass)#16 (1) {
["ItemLink"]=>
array(7) {
[0]=>
object(stdClass)#17 (2) {
["Description"]=>
string(17) "Technical Details"
["URL"]=>
string(218) "http://www.amazon.com/The-Love-suspense-mystery-ebook/dp/tech-data/B004YDSL9Q%3F"
}
[1]=>
object(stdClass)#18 (2) {
["Description"]=>
string(20) "Add To Baby Registry"
["URL"]=>
string(215) "http://www.amazon.com/gp/registry/baby/add-item.html"
}
[2]=>
object(stdClass)#19 (2) {
["Description"]=>
string(23) "Add To Wedding Registry"
["URL"]=>
string(218) "http://www.amazon.com/gp/registry/wedding/add-item.html%3Fasin.0%3DB004YDSL9Q%26"
}
[3]=>
object(stdClass)#20 (2) {
["Description"]=>
string(15) "Add To Wishlist"
["URL"]=>
string(219) "http://www.amazon.com/gp/registry/wishlist/add-item.html%3Fasin.0%3DB004YDSL9Q%26"
}
[4]=>
object(stdClass)#21 (2) {
["Description"]=>
string(13) "Tell A Friend"
["URL"]=>
string(184) "http://www.amazon.com/gp/pdp/taf/B004YDSL9Q%3F"
}
[5]=>
object(stdClass)#22 (2) {
["Description"]=>
string(20) "All Customer Reviews"
["URL"]=>
string(188) "http://www.amazon.com/review/product/B004YDSL9Q%3FSubscriptionId%3"
}
[6]=>
object(stdClass)#23 (2) {
["Description"]=>
string(10) "All Offers"
["URL"]=>
string(190) "http://www.amazon.com/gp/offer-listing/B004YDSL9Q%3"
}
}
}
そして他のアイテムも。
私は間違っていました。API応答はJSONではなく、オブジェクトであり、jsonでエンコードする必要があります。
それが私が実際に解決した方法です:
-cut-
$response = $amazonEcs->category('KindleStore')->responseGroup('Small,Images')->search('free ebooks');
//json_encode on $response because the response of the API is not JSON, but it is an object
$data = json_encode($response);
//Using stripslashes function to delete all the slashed that has been added to $data by the encoding process
$data2 = stripslashes($data);
file_put_contents("items.json", $data2);