0

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

1 回答 1

1

如果您创建的文件为空,则$responsevar 为空。做一些调试。var_dump响应,看看你得到了什么。如果文件显示在它应该显示的位置,但它是空的,那么它取决于您尝试在其中存储的内容,在这种情况下是 case $response

所以这样做:

var_dump( $response );

然后回到这里告诉我们你看到了什么。

PS:我会将此作为评论发布(因为我知道这不是一个答案),但我没有代表。

于 2012-10-12T11:21:02.657 回答