php 如何将Amazon API JSON响应保存为JSON文件?

jgovgodb  于 2023-02-28  发布在  PHP
关注(0)|答案(1)|浏览(137)

我尝试将一个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,它是一个Object,您必须用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);
jfewjypa

jfewjypa1#

如果你创建的文件是空的,那么$response变量也是空的,对响应进行一些调试,看看你得到了什么,如果文件显示在它应该显示的地方,但是是空的,那么它就取决于你试图存储在里面的东西,在这里是$response的情况。
所以这样做:

var_dump( $response );

那就回来告诉我们你看到了什么。
附言:我会把这个作为一个评论(因为我知道这不是一个很好的答案),但我没有代表。

相关问题