2016-04-13 4 views
1

Lange Zeit lauern erste Buchung, ich bin ratlos!In Kategorien auf eBay mit XML API ziehen

Ich habe versucht, eine dynamische Kategorie Liste auf meinem Arbeitgeber eBay-Shop für eine Weile jetzt, ich habe eine Menge Zeit für die Suche nach Antworten oder vor-geschriebenen Code, aber kam zu dem Schluss, wenn ich es will getan Ich werde es selbst tun müssen (völlig in Ordnung, aber zeitaufwendig).

Mit dem eBay Dev API Testgelände habe ich es geschafft, die Kategorien, die ich möchte, herunter zu ziehen. Was ich schwierig finde, ist, wie man dann die Ergebnisse stylen und organisieren kann.

Dies wäre einfacher, wenn ich die Tags, die die XML mit CSS ausgibt, aber ich kann nicht, wie sie nicht Standard sind.

Das ist, was ich bisher geschrieben habe, die ‚Stil Farbe: rot‘ war einfach das div zu testen arbeitete und alle erforderlichen Anmeldeinformationen in der ‚keys.php‘ Datei gespeichert sind:

<?php 
/* © 2013 eBay Inc., All Rights Reserved */ 
/* Licensed under CDDL 1.0 - http://opensource.org/licenses/cddl1.php */ 
require_once('keys.php') ?> 
<?php require_once('eBaySession.php') ?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<TITLE>GetCatagories</TITLE> 

<style type="text/css"> 
#child { 
    color:red; 
} 
</style> 
</HEAD> 
<BODY> 

<?php  
    //SiteID must also be set in the Request's XML 
    //SiteID = 3 (US) - UK = 3, Canada = 2, Australia = 15, .... 
    //SiteID Indicates the eBay site to associate the call with 
    $siteID = 3; 
    //the call being made: 
    $verb = 'GetStore'; 
    //Level/amount of data for the call to return (default = 0) 
    $detailLevel = 0; 


    ///Build the request Xml string 
    $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>'; 
    $requestXmlBody .= '<GetStoreRequest xmlns="urn:ebay:apis:eBLBaseComponents">'; 
    $requestXmlBody .= "<RequesterCredentials><eBayAuthToken>$userToken</eBayAuthToken></RequesterCredentials>"; 
    $requestXmlBody .= '</GetStoreRequest>'; 

    //Create a new eBay session with all details pulled in from included keys.php 
    $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb); 
    //send the request and get response 
    $responseXml = $session->sendHttpRequest($requestXmlBody); 
    if(stristr($responseXml, 'HTTP 404') || $responseXml == '') 
     die('<P>Error sending request'); 

    //Xml string is parsed and creates a DOM Document object 
    $responseDoc = new DomDocument(); 
    $responseDoc->loadXML($responseXml); 


    //get any error nodes 
    $errors = $responseDoc->getElementsByTagName('Errors'); 

    //if there are error nodes 
    if($errors->length > 0) 
    { 
     echo '<P><B>eBay returned the following error(s):</B>'; 
     //display each error 
     //Get error code, ShortMesaage and LongMessage 
     $code = $errors->item(0)->getElementsByTagName('ErrorCode'); 
     $shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage'); 
     $longMsg = $errors->item(0)->getElementsByTagName('LongMessage'); 
     //Display code and shortmessage 
     echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", "&gt;", str_replace("<", "&lt;", $shortMsg->item(0)->nodeValue)); 
     //if there is a long message (ie ErrorLevel=1), display it 
     if(count($longMsg) > 0) 
      echo '<BR>', str_replace(">", "&gt;", str_replace("<", "&lt;", $longMsg->item(0)->nodeValue)); 

    } 
    else //no errors 
    { 
     $i = 2; 
     while ($i <= 188) { 
       echo '<div id="catagories">'; 
       echo $responseDoc->getElementsByTagName("Name")->item($i++)-  >textContent; 
       echo '<BR>'; 
       echo '</div>'; 
      } 
     }   
?> 

</BODY> 
</HTML> 

Der Großteil des oben genannten Codes ist die Überprüfung der Anmeldeinformationen und das Fehlermanagement, es sind wirklich die letzten 12 oder so viele Codezeilen, die schwer arbeiten.

Derzeit hat es alle meine Kategorien und die entsprechenden Kindkategorien in einer langen vertikalen Liste ausgegeben, idealerweise möchte ich die Kinder einrücken und ihnen eine kleinere Schriftgröße geben, die einfachste Art (meiner Meinung nach) wurden sie aus und gelten CSS div aber ich fange an zu denken, ist ein einfacher Weg, irgendwelche Vorschläge oder Kommentare zu diesem Zeitpunkt sind willkommen,

Ihnen im Voraus für jede Hilfe danken

Antwort

1

Wenn Sie glücklich sind Um Composer in Ihrem Projekt zu verwenden, habe ich eine SDK for PHP entwickelt, die die Verwendung der API vereinfacht. Im folgenden Beispiel werden die Geschäftskategorien in der richtigen Reihenfolge angezeigt und eine einfache Struktur mit verschachtelten <ol> Elementen ausgegeben, bei denen es sich um Stile mit CSS handeln kann.

<?php 
require __DIR__.'/vendor/autoload.php'; 

use \DTS\eBaySDK\Constants; 
use \DTS\eBaySDK\Trading\Services; 
use \DTS\eBaySDK\Trading\Types; 
use \DTS\eBaySDK\Trading\Enums; 

$service = new Services\TradingService([ 
    'credentials' => [ 
     'appId' => $appID, 
     'devId' => $devID, 
     'certId' => $certID 
    ], 
    'authToken' => $userToken, 
    'siteId'  => Constants\SiteIds::GB 
]); 

$request = new Types\GetStoreRequestType(); 
$request->CategoryStructureOnly = true; 

$response = $service->getStore($request); 

$html = ''; 

if (isset($response->Errors)) { 
    $html .= '<p>eBay returned the following error(s):<br/>'; 
    foreach ($response->Errors as $error) { 
     $html .= sprintf(
      "%s: %s<br/>%s<br/>", 
      $error->SeverityCode === Enums\SeverityCodeType::C_ERROR ? 'Error' : 'Warning', 
      htmlentities($error->ShortMessage), 
      htmlentities($error->LongMessage) 
     ); 
    } 
    $html .= '</p>'; 
} 

if ($response->Ack !== 'Failure') { 
    $categories = iterator_to_array($response->Store->CustomCategories->CustomCategory); 
    usort($categories, 'sortCategories'); 
    foreach ($categories as $category) { 
     $html .= '<ol>'.buildCategory($category).'</ol>'; 
    } 
} 

function buildCategory($category) 
{ 
    $html = '<li>'; 
    $html .= htmlentities($category->Name); 
    $children = iterator_to_array($category->ChildCategory); 
    usort($children, 'sortCategories'); 
    foreach ($children as $child) { 
     $html .= '<ol>'.buildCategory($child).'</ol>'; 
    } 
    $html .= '</li>'; 

    return $html; 
} 

function sortCategories($a, $b) 
{ 
    if ($a->Order === $b->Order) { 
     return 0; 
    } 

    return ($a->Order < $b->Order) ? -1 : 1; 
} 

echo <<< EOF_HTML 
    <!doctype html> 
    <html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Example</title> 
     <style> 
     ol { 
      list-style-type: none; 
     } 
     </style> 
    </head> 
    <body> 
     $html 
    </body> 
    </html> 
EOF_HTML; 
+0

Dies funktionierte ein Leckerbissen, vielen Dank !!! – RobinB

Verwandte Themen