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

作成するファイルが空の場合、$response変数は空です。デバッグを行います。var_dump応答し、あなたが得るものを見てください。ファイルが本来あるべき場所に表示されているが空の場合は、ファイルに保存しようとしているものに依存します。この場合は、この場合$responseです。

だからこれを行う:

var_dump( $response );

それからここに戻って、あなたが見ているものを教えてください。

PS:私はこれをコメントとして投稿しますが(私はそれがあまり答えではないことを知っているので)、私には担当者がいません。

于 2012-10-12T11:21:02.657 に答える