Rev 110 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpinclude_once ('php/constants.php');// Get eBay listingsfunction get_ebay($query, $searchCondition, $zipFlag = true) {$vendors = Vendors::getInstance();$config = $vendors->getVendor(Vendors::EBAY);$apicall = '[cached]';$resp = ($zipFlag ? getSearchCache("ebay", $query, $searchCondition) : false);if ($resp === false) {// API request variables$endpoint = 'https://svcs.ebay.com/services/search/FindingService/v1';$version = '1.13.0';$appid = $config['appid'];$trackingId = $config['trackingId'];$globalid = 'EBAY-US';$numResults = $config['numResults'];// Create a PHP array of the item filters you want to use in your request$filterarray = array(array('name' => 'Condition','value' => ($searchCondition == constant("NEW") ? 'New' : 'Used') ,'paramName' => '','paramValue' => '') ,array('name' => 'HideDuplicateItems','value' => 'true','paramName' => '','paramValue' => '') ,array('name' => 'ListingType','value' => array('AuctionWithBIN','FixedPrice','StoreInventory') ,'paramName' => '','paramValue' => '') ,);// Build the indexed item filter URL snippet$urlfilter = buildURLArray($filterarray);// Construct the findItemsByKeywords HTTP GET call$params = [];$params["OPERATION-NAME"] = "findItemsAdvanced";$params["SERVICE-VERSION"] = $version;$params["SECURITY-APPNAME"] = $appid;$params["GLOBAL-ID"] = $globalid;$params["REST-PAYLOAD"] = "";$params["affiliate.networkId"] = "9";$params["affiliate.trackingId"] = $trackingId;$params["affiliate.customId"] = "findCheapMusic";$params["paginationInput.entriesPerPage"] = $numResults;$params["sortOrder"] = "PricePlusShippingLowest";if (!empty($_SESSION["buyer"]["Zip"]) && $zipFlag) {$params["buyerPostalCode"] = $_SESSION["buyer"]["Zip"];}$params["outputSelector"] = "SellerInfo";$params["keywords"] = $query;if ($_SESSION["filterMediaType"]["CD"] && $_SESSION["filterMediaType"]["Record"]) {$params["categoryId(0)"] = "176985"; // Music Records$params["categoryId(1)"] = "176984"; // Music CDs}else if ($_SESSION["filterMediaType"]["CD"]) {$params["categoryId"] = "176984"; // Music CDs}else if ($_SESSION["filterMediaType"]["Record"]) {$params["categoryId"] = "176985"; // Music Records}$params = array_merge($params, $urlfilter);$pairs = array();foreach ($params as $key => $value) {array_push($pairs, rawurlencode($key) . (!empty($value) ? "=" . rawurlencode($value) : ""));}$canonical_query_string = join("&", $pairs);$apicall = $endpoint . "?" . $canonical_query_string;// Load the call and capture the document returned by eBay API$resp = getUrl($apicall);if (empty($resp)) {return ([]);}saveSearchCache("ebay", $query, $searchCondition, $resp);}$resp = simplexml_load_string($resp);$arr = array();// Check to see if the request was successful, else print an errorif ((string)$resp->ack == "Success") {// If the response was loaded, parse it and store in arrayforeach ($resp->searchResult->item as $item) {$title = (string)$item->title;$pic = str_replace('http://', 'https://', (string)$item->galleryURL);$url = str_replace('http://', 'https://', (string)$item->viewItemURL);$mediaType = (string)$item->primaryCategory->categoryName;if ($mediaType == "CDs") {$mediaType = "CD";}else if ($mediaType == "CDs & DVDs") {$mediaType = "CD";}else if ($mediaType == "Records") {$mediaType = "Record";}else if ($mediaType == "Disques") {$mediaType = "Record";}$detailCondition = (string)$item->condition->conditionDisplayName;$country = (string)$item->country;$bestOffer = (string)$item->listingInfo->bestOfferEnabled;if ($item->listingInfo->buyItNowAvailable == "true") {$price = (string)$item->listingInfo->convertedBuyItNowPrice;$currency = (string)$item->listingInfo->convertedBuyItNowPrice['currencyId'];}else {$price = (string)$item->sellingStatus->currentPrice;$currency = (string)$item->sellingStatus->currentPrice['currencyId'];}$price = number_format(floatval($price) , 2, '.', '');$timeLeft = decodeeBayTimeLeft($item->sellingStatus->timeLeft);$listingType = (string)$item->listingInfo->listingType;$location = (string)$item->location;$zip = (string)$item->postalCode;$feedbackScore = (string)$item->sellerInfo->feedbackScore;$feedbackPercent = (string)$item->sellerInfo->positiveFeedbackPercent;$sellerName = (string)$item->sellerInfo->sellerUserName;$handlingTime = (string)$item->shippingInfo->handlingTime;$shippingEstimated = false;$shippingCost = number_format(floatval((string)$item->shippingInfo->shippingServiceCost) , 2, '.', '');$shippingCurrency = (string)$item->shippingInfo->shippingServiceCost['currencyId'];if ($shippingCost <= 0.00 && strpos($item->shippingInfo->shippingType, "Calculated") !== false) {$shippingCost = 3.00;$shippingCurrency = "USD";$shippingEstimated = true;}// skip items without gallery imageif ($pic == "") {continue;}$arr[] = array("Merchant" => "eBay","Condition" => ($searchCondition == constant("NEW") ? 'New' : 'Used') ,"Title" => $title,"Barcode" => "","BarcodeType" => "","Image" => $pic,"URL" => $url,"MediaType" => $mediaType,"DetailCondition" => $detailCondition,"Country" => $country,"BestOffer" => $bestOffer,"TimeLeft" => $timeLeft,"Price" => $price,"Currency" => $currency,"ListingType" => $listingType,"Location" => $location,"Zip" => $zip,"FeedbackScore" => $feedbackScore,"FeedbackPercent" => $feedbackPercent,"SellerName" => $sellerName,"HandlingTime" => $handlingTime,"ShippingCost" => $shippingCost,"ShippingCurrency" => $shippingCurrency,"ShippingEstimated" => $shippingEstimated,"FreeShippingCap" => 0,"Show" => true);}return ($arr);}// If the response does not indicate 'Success,' log an errorelse {foreach ($resp->errorMessage->error as $error) {my_error_log($apicall);my_error_log("Severity: $error->severity; Category: $error->category; Domain: $error->domain; ErrorId: $error->errorId; Message: $error->message");}if ($error->errorId == 18 && $zipFlag) {my_error_log("Retry without zip code");return (get_ebay($query, $searchCondition, false));}}return ([]);}// Generates an indexed URL snippet from the array of item filtersfunction buildURLArray($filterarray) {$filter = [];$i = '0'; // Initialize the item filter index to 0// Iterate through each filter in the arrayforeach ($filterarray as $itemfilter) {// Iterate through each key in the filterforeach ($itemfilter as $key => $value) {if (is_array($value)) {foreach ($value as $j => $content) { // Index the key for each value$filter["itemFilter($i).$key($j)"] = $content;}}else {if ($value != "") {$filter["itemFilter($i).$key"] =$value;}}}$i++;}return $filter;}// convert "P##D##H##M##S" to "## days ## hours ## minutes left"function decodeeBayTimeLeft($t) {preg_match_all('!\d+!', $t, $m);$s = "";if ($m[0][0] > 0) {$s .= $m[0][0] . " days ";}if ($m[0][1] > 0) {$s .= $m[0][1] . " hours ";}if ($m[0][2]) {$s .= $m[0][2] . " minutes left";}return $s;}