В списке продуктов Amazon, которые я получаю, анализируя базу данных WordPress, у меня есть этот код, который позволяет мне получать по продуктам информацию об Amazon:
function get_product_infos(asin, ext){
$.post(window.location.href, {
activate: 'get-product-informations',
asin: asin,
ext: ext
}, function(data){
//var json = JSON.parse(data);
console.log(data);
/*if(json.response === 'alright'){
var current_asin = json.current_asin;
current_asin = $('#'+current_asin);
var next_asin = current_asin.next().attr('id');
var next_ext = current_asin.next().attr('data-domain-ext');
current_asin.find('td').first().find('.progress').text('ok');
if(typeof next_asin !== typeof undefined && next_asin !== false){
get_product_infos(next_asin, next_ext);
}
}*/
});
}
Файл, вызванный с помощью $ .post () для получения информации о продукте из Amazon:
<?php
$autorisation = isset($_POST['activate']) ? $_POST['activate'] : '';
$current_asin = isset($_POST['asin']) ? $_POST['asin'] : '';
$current_ext = isset($_POST['ext']) ? $_POST['ext'] : '';
if($autorisation !== 'get-product-informations'){
return;
}
use pa\src\com\amazon\paapi5\v1\api\DefaultApi;
use pa\src\ApiException;
use pa\src\Configuration;
use pa\src\com\amazon\paapi5\v1\GetItemsRequest;
use pa\src\com\amazon\paapi5\v1\GetItemsResource;
use pa\src\com\amazon\paapi5\v1\PartnerType;
use pa\src\com\amazon\paapi5\v1\ProductAdvertisingAPIClientException;
require_once(plugin_dir_url( __FILE__ . '/bundles/admin-pages/tool/crawling-system/pa/vendor/autoload.php' ));
function parseResponse($items){
$mappedResponse = array();
foreach ($items as $item) {
$mappedResponse[$item->getASIN()] = $item;
}
return $mappedResponse;
}
function getItems(){
global $wpdb;
$prefix_table = $wpdb->prefix;
$table_name = $prefix_table.'azon_lc';
$result = ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) ? $wpdb->get_results("SELECT * FROM $table_name") : '';
$access_key = ($result !== '') ? $result[0]->access_key : '';
$secret_key = ($result !== '') ? $result[0]->secret_key : '';
$associate_tag = ($result !== '') ? $result[0]->associate_tag : '';
$config = new Configuration();
/*
* Add your credentials
* Please add your access key here
*/
$config->setAccessKey($access_key);
# Please add your secret key here
$config->setSecretKey($secret_key);
# Please add your partner tag (store/tracking id) here
$partnerTag = $associate_tag;
/*
* PAAPI host and region to which you want to send request
* For more details refer: https://webservices.amazon.com/paapi5/documentation/common-request-parameters.html#host-and-region
*/
$config->setHost('webservices.amazon.'.$current_ext);
$config->setRegion('us-east-1');
$apiInstance = new DefaultApi(
/*
* If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
* This is optional, `GuzzleHttp\Client` will be used as default.
*/
new pa\vendor\GuzzleHttp\guzzle\src\Client(), $config);
# Choose item id(s)
$itemIds = array($current_asin);
/*
* Choose resources you want from GetItemsResource enum
* For more details, refer: https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter
*/
$resources = array(
GetItemsResource::ITEM_INFOTITLE,
GetItemsResource::OFFERSLISTINGSPRICE);
# Forming the request
$getItemsRequest = new GetItemsRequest();
$getItemsRequest->setItemIds($itemIds);
$getItemsRequest->setPartnerTag($partnerTag);
$getItemsRequest->setPartnerType(PartnerType::ASSOCIATES);
$getItemsRequest->setResources($resources);
# Validating request
$invalidPropertyList = $getItemsRequest->listInvalidProperties();
$length = count($invalidPropertyList);
if ($length > 0) {
echo "Error forming the request", PHP_EOL;
foreach ($invalidPropertyList as $invalidProperty) {
echo $invalidProperty, PHP_EOL;
}
return;
}
# Sending the request
try {
$getItemsResponse = $apiInstance->getItems($getItemsRequest);
echo 'API called successfully', PHP_EOL;
echo 'Complete Response: ', $getItemsResponse, PHP_EOL;
# Parsing the response
if ($getItemsResponse->getItemsResult() != null) {
echo 'Printing all item information in ItemsResult:', PHP_EOL;
if ($getItemsResponse->getItemsResult()->getItems() != null) {
$responseList = parseResponse($getItemsResponse->getItemsResult()->getItems());
foreach ($itemIds as $itemId) {
echo 'Printing information about the itemId: ', $itemId, PHP_EOL;
$item = $responseList[$itemId];
if ($item != null) {
if ($item->getASIN()) {
echo 'ASIN: ', $item->getASIN(), PHP_EOL;
}
if ($item->getItemInfo() != null and $item->getItemInfo()->getTitle() != null
and $item->getItemInfo()->getTitle()->getDisplayValue() != null) {
echo 'Title: ', $item->getItemInfo()->getTitle()->getDisplayValue(), PHP_EOL;
}
if ($item->getDetailPageURL() != null) {
echo 'Detail Page URL: ', $item->getDetailPageURL(), PHP_EOL;
}
if ($item->getOffers() != null and
$item->getOffers()->getListings() != null
and $item->getOffers()->getListings()[0]->getPrice() != null
and $item->getOffers()->getListings()[0]->getPrice()->getDisplayAmount() != null) {
echo 'Buying price: ', $item->getOffers()->getListings()[0]->getPrice()
->getDisplayAmount(), PHP_EOL;
}
} else {
echo "Item not found, check errors", PHP_EOL;
}
}
}
}
if ($getItemsResponse->getErrors() != null) {
echo PHP_EOL, 'Printing Errors:', PHP_EOL, 'Printing first error object from list of errors', PHP_EOL;
echo 'Error code: ', $getItemsResponse->getErrors()[0]->getCode(), PHP_EOL;
echo 'Error message: ', $getItemsResponse->getErrors()[0]->getMessage(), PHP_EOL;
}
} catch (ApiException $exception) {
echo "Error calling PA-API 5.0!", PHP_EOL;
echo "HTTP Status Code: ", $exception->getCode(), PHP_EOL;
echo "Error Message: ", $exception->getMessage(), PHP_EOL;
if ($exception->getResponseObject() instanceof ProductAdvertisingAPIClientException) {
$errors = $exception->getResponseObject()->getErrors();
foreach ($errors as $error) {
echo "Error Type: ", $error->getCode(), PHP_EOL;
echo "Error Message: ", $error->getMessage(), PHP_EOL;
}
} else {
echo "Error response body: ", $exception->getResponseBody(), PHP_EOL;
}
} catch (Exception $exception) {
echo "Error Message: ", $exception->getMessage(), PHP_EOL;
}
}
getItems();
exit;?>
Я протестировал файл несколькими способами, чтобы понять, когдапроизошла ошибка, и я решил, что при попытке использовать этот код происходит сбой:
$config = new Configuration();
Я хотел бы определить, почему при вызове возвращается ошибка 500? Очевидно, что я чего-то не понимаю.