我正在尝试将 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);