Subversion Repositories cheapmusic

Rev

Blame | Last modification | View Log | RSS feed

<?php
include_once('php/constants.php');

error_reporting(E_ALL);  // Turn on all errors, warnings and notices for easier debugging

// Get eBay listings
function get_ebay($query, $searchType) {
// API request variables
$endpoint = 'http://svcs.ebay.com/services/search/FindingService/v1';
$version = '1.13.0';
$appid = 'UweJacob-MusicCDs-PRD-0eaa5c961-9b7ca596';
$trackingId = '5338527412'; // EPN Campaign Id
$globalid = 'EBAY-US';
$safequery = urlencode($query);  // Make the query URL-friendly
$numResults = 20; // Maximum Number of Search Results

// Create a PHP array of the item filters you want to use in your request
$filterarray =
  array(
    array(
    'name' => 'Condition',
    'value' => ($searchType == 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
$apicall = "$endpoint?";
$apicall .= "OPERATION-NAME=findItemsAdvanced";
$apicall .= "&SERVICE-VERSION=$version";
$apicall .= "&SECURITY-APPNAME=$appid";
$apicall .= "&GLOBAL-ID=$globalid";
$apicall .= "&REST-PAYLOAD";
$apicall .= "&affiliate.networkId=9";
$apicall .= "&affiliate.trackingId=$trackingId";
$apicall .= "&affiliate.customId=findCheapMusic";
$apicall .= "&paginationInput.entriesPerPage=$numResults";
$apicall .= "&sortOrder=PricePlusShippingLowest";
if (isset($_SESSION['buyerZip'])) {
    $apicall .= "&buyerPostalCode=" . $_SESSION['buyerZip'];
}
$apicall .= "&outputSelector=SellerInfo";
$apicall .= "&keywords=$safequery";
if ($_SESSION["filterMediaTypeCD"] && $_SESSION["filterMediaTypeRecord"]) {
    $apicall .= "&categoryId(0)=176985"; // Music Records
    $apicall .= "&categoryId(1)=176984"; // Music CDs
} else if ($_SESSION["filterMediaTypeCD"]) {
    $apicall .= "&categoryId=176984"; // Music CDs
} else if ($_SESSION["filterMediaTypeRecord"]) {
    $apicall .= "&categoryId=176985"; // Music Records
}
$apicall .= "$urlfilter";

// Load the call and capture the document returned by eBay API
$resp = simplexml_load_file($apicall);

$arr = array();

// Check to see if the request was successful, else print an error
if ($resp->ack == "Success") {
  // If the response was loaded, parse it and store in array
  foreach($resp->searchResult->item as $item) {
    $title = $item->title;
    $pic = str_replace('http://', 'https://', $item->galleryURL);
    $url = str_replace('http://', 'https://', $item->viewItemURL);
    $category = $item->primaryCategory->categoryName;
    if ($category == "CDs") {$category = "CD";}
    if ($category == "CDs & DVDs") {$category = "CD";}
    if ($category == "Records") {$category = "Record";}
    $condition = $item->condition->conditionDisplayName;
    $country = $item->country;
    $bestOffer = $item->listingInfo->bestOfferEnabled;
    if ($item->listingInfo->buyItNowAvailable == "true") {
      $price = $item->listingInfo->convertedBuyItNowPrice;
      $currency = $item->listingInfo->convertedBuyItNowPrice['currencyId'];
    } else {
      $price = $item->sellingStatus->currentPrice;
      $currency = $item->sellingStatus->currentPrice['currencyId'];
    }
    $price = number_format(floatval($price), 2, '.', '');
    $timeLeft = $item->sellingStatus->timeLeft;
    $listingType = $item->listingInfo->listingType;
    $location = $item->location;
    $zip = $item->postalCode;
    $feedbackScore = $item->sellerInfo->feedbackScore;
    $feedbackPercent = $item->sellerInfo->positiveFeedbackPercent;
    $sellerName = $item->sellerInfo->sellerUserName;
    $handlingTime = $item->shippingInfo->handlingTime;
    $shippingCost = number_format(floatval($item->shippingInfo->shippingServiceCost), 2, '.', '');
    $shippingCurrency = $item->shippingInfo->shippingServiceCost['currencyId'];

    // skip items without gallery image
    if ($pic == "") {
        continue;
    }

    $arr[] = array(
      "Merchant"=>"eBay",
      "Type"=>($searchType == constant("NEW") ? 'New' : 'Used'),
      "Title"=>"$title",
      "Image"=>"$pic",
      "URL"=>"$url",
      "Category"=>"$category",
      "Condition"=>"$condition",
      "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"
      );
    }

  return($arr);
}
// If the response does not indicate 'Success,' log an error
else {
  foreach($resp->errorMessage->error as $error) {
    error_log($apicall);
    error_log("Severity: $error->severity; Category: $error->category; Domain: $error->domain; ErrorId: $error->errorId; Message: $error->message");
  }
  return([]);
}
}

// Generates an indexed URL snippet from the array of item filters
function buildURLArray ($filterarray) {
  $filter = '';
  $i = '0';  // Initialize the item filter index to 0
  
  // Iterate through each filter in the array
  foreach($filterarray as $itemfilter) {
    // Iterate through each key in the filter
    foreach ($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";
}