eBay API:ステップ2

こんにちは、habravchane。



この出版物は、この記事「eBay API:First Steps」に触発されており、理論的にはその続きである可能性があります。 これは、eBay APIの使用を開始しようとした人、何をすべきかを尋ねる場所を見つけられなかった人、およびこのレッスンを吐き出した人に役立ちます。 または尋ねた、答えを待たずに、とにかく彼はとにかく吐いた。



私はいかなる場合でも真実を装うことはありません。私たちが克服できなかったバグを克服するためのアドバイスを喜んで受け入れます。







まず第一に、eBay APIをすぐに使い始めるため -うまくいきません。 ドキュメントの致命的な量の省略と矛盾、APIメカニズム自体の欠陥とバグ、クエリ条件の組み合わせの暗黙的で曖昧な使用により、各ステップを個別にテストする必要があります。 そして、繰り返しテストするために、昨日は問題なく機能していましたが、今日はエラーを返し、明日は何も起こらなかったように機能し続けます。



しかし、評判の良い会社を非難しないために、前の段落を忘れて、私がただ愚かで、愚かで、未発達であるという事実にすべてを書き残しましょう。 そして、実際のプログラマーははるかに速く、より正確に成功するでしょう。



したがって、Ebayページを解析するための動作メカニズムがある場合は、データを受信する文明的な方法に切り替える価値があるか、eBayの絶えず変化するデザインに合わせてパーサーを調整し続ける価値があるかをもう一度考えてください。 さらに、バイヤーの観点からは、根本的に新しいデータを受け取ることはありませんが、たとえば、現在の割引や「ロットが腐った、再インストールする」イベントの処理に関する情報が失われます。



ただし、少なくとも数千の製品を監視し、定期的に価格を確認する必要がある場合は、APIが必要です。 私の小さなプロジェクトでは、価格を更新して新しい製品を追加するための自動化が切実に必要でした.2014年にeBayの設計変更が頻繁に行われるようになったため、喫煙をやめ、解析をやめ 、eBay APIを操作するためのライブラリの基本を書き、同時に古い年齢でプログラミングを学び始めることにしました。



プロジェクトエンジンはPHPで記述されているため、選択の余地はありませんでした。



findItemsAdvanced関数から始めましょう。これは、「キーワードで多くの製品を検索し、米国外の居住者にはまったく役に立たない結果をもたらす」ことを意味します。 次に、(おそらく次の記事ですでに)役に立たない答えを役に立つものに変える他の関数を検討します。



ここに記載さているように、すでにアプリケーションキーを受け取っています 。 Production KeysからAppIDを取得します-SandboxとProductionのバグは異なるため、すぐに「戦闘」バージョンで作業します-ヘッダーの適切な場所で置き換えます。 後で見るように、eBay APIのヘッダーは多くの異なる形式を取ることができるため、それぞれの場合に個別に提供します。



<?php /*        store //      , partnumber  itemID //       */ function findItemsAdvanced($request) { $headers = array( 'X-EBAY-SOA-SERVICE-NAME:FindingService', 'X-EBAY-SOA-OPERATION-NAME:findItemsAdvanced', 'X-EBAY-SOA-SERVICE-VERSION:1.12.0', 'X-EBAY-SOA-GLOBAL-ID:EBAY-US', 'X-EBAY-SOA-SECURITY-APPNAME:_AppID', // AppID    "X-EBAY-API-REQUEST-ENCODING: XML", 'Content-Type: text/xml;charset=utf-8', ); $endpoint = 'http://svcs.ebay.com/services/search/FindingService/v1?';
      
      





残りのヘッダー値は単純にコピーでき、すべてのユーザーで同じです。



リクエストしてください。

私の問い合わせはすべて「オートバイ用スペアパーツ」カテゴリに属し、eBay USAのテーマセクション「EBAY-MOTORS」に焦点を当てています。 ここで自分に適したセクションのリスト、 ここでカテゴリのリストを見つけ、クエリでそれらを置き換えることを忘れないでください。



  $xmlRequest = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; $xmlRequest .= "<findItemsAdvancedRequest xmlns='http://www.ebay.com/marketplace/search/v1/services'>"; $xmlRequest .= "<categoryId>10063</categoryId>"; // 10063 -    // 6028 -     $xmlRequest .= "<descriptionSearch>false</descriptionSearch>"; //     ,  $xmlRequest .= "<keywords>".$request."</keywords>"; //  :    $xmlRequest .= "<itemFilter><name>Condition</name><value>New</value></itemFilter>"; //  : , /    $xmlRequest .= "<itemFilter><name>FeedbackScoreMin</name><value>3000</value></itemFilter>"; //   $xmlRequest .= "<itemFilter><name>ListingType</name><value>FixedPrice</value></itemFilter>"; //    $xmlRequest .= "<itemFilter><name>AvailableTo</name><value>RU</value></itemFilter>"; //        ,         .      ,          .    . $xmlRequest .= "<itemFilter><name>PaymentMethod</name><value>PayPal</value></itemFilter>"; //        Paypal.      ,     -,    Paypal.  eBay    . $xmlRequest .= "<itemFilter><name>HideDuplicateItems</name><value>true</value></itemFilter>"; //       ?  . //$xmlRequest .= "<itemFilter><name>ExcludeSeller</name><value>storename</value></itemFilter>"; //   :         .       . $xmlRequest .= "<outputSelector>SellerInfo</outputSelector> //        
      
      







ここでは、descriptionSearchパラメーターについて詳しく説明します。

説明-これは、一番下にあるロットの説明領域です-写真の下、配達計算など。 理論的には、売り手は私たちの結果に該当し、私たちの要求に対応しないナンセンスをそこに書くことができます。



たとえば、象を探していて、特定の売り手が猫を売っています。タイトルには猫、写真には猫がいますが、説明には「これは巨大な猫、本当の象です!」 この製品は弊社のディストリビューションに含まれますが、実際には象は含まれません。 そして、それの価格は適切です:猫のように。



リクエストの準備を完了します。

  $session = curl_init($endpoint); curl_setopt($session, CURLOPT_POST, true); curl_setopt($session, CURLOPT_POSTFIELDS, $xmlRequest); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); curl_setopt($session, CURLOPT_HTTPHEADER, $headers); $responseXML = curl_exec($session); curl_close($session); ?>
      
      







リクエストを送信する時です...

 <?php header('X-Accel-Buffering: no'); ob_get_flush(); $responseXML = Ebay_shopping::findItemsAdvanced('cobra exhaust c90t'); // "cobra exhaust c90t" —   "  Cobra   Suzuku Boulevard C90T".      "iPhone",          :     <categoryId>9355</categoryId>. $responseXML = simplexml_load_string($responseXML); print_r($responseXML); ?>
      
      





...そして答えを得る:

彼は長いです...
 SimpleXMLElement Object ( [ack] => Success [version] => 1.13.0 [timestamp] => 2014-11-24T18:01:37.836Z [searchResult] => SimpleXMLElement Object ( [@attributes] => Array ( [count] => 11 //   11 ,    ) [item] => Array ( [0] => SimpleXMLElement Object ( [itemId] => 360763537259 //  ,   .         eBay      ,   eBay. [title] => Cobra Speedster Exhaust with Powerport Long 2005 Suzuki C90T Boulevard //  .     $request. [globalId] => EBAY-MOTOR //  eBay,      [primaryCategory] => SimpleXMLElement Object ( [categoryId] => 178001 [categoryName] => Other Exhaust Parts ) [galleryURL] => http://thumbs4.ebaystatic.com/m/mbTIInAkeUhM9YV7mV7GtcQ/140.jpg //      .      . [viewItemURL] => http://www.ebay.com/itm/Cobra-Speedster-Exhaust-Powerport-Long-2005-Suzuki-C90T-Boulevard-/360763537259?pt=Motorcycles_Parts_Accessories //          ebay [paymentMethod] => Array ( [0] => PayPal [1] => VisaMC [2] => AmEx [3] => Discover ) [autoPay] => false [postalCode] => 46528 [location] => Goshen,IN,USA [country] => US [sellerInfo] => SimpleXMLElement Object ( [sellerUserName] => motored_e [feedbackScore] => 11025 //    ,   FeedbackScoreMin  3000 [positiveFeedbackPercent] => 99.1 // ...       .      [feedbackRatingStar] => YellowShooting [topRatedSeller] => false ) [shippingInfo] => SimpleXMLElement Object ( [shippingServiceCost] => 0.0 [shippingType] => FlatDomesticCalculatedInternational [shipToLocations] => Worldwide [expeditedShipping] => true [oneDayShippingAvailable] => false [handlingTime] => 1 ) [sellingStatus] => SimpleXMLElement Object ( [currentPrice] => 521.51 [convertedCurrentPrice] => 521.51 [sellingState] => Active [timeLeft] => P11DT9H1M57S ) [listingInfo] => SimpleXMLElement Object ( [bestOfferEnabled] => false [buyItNowAvailable] => false [startTime] => 2013-10-12T02:58:34.000Z [endTime] => 2014-12-06T03:03:34.000Z [listingType] => FixedPrice [gift] => false ) [returnsAccepted] => true [condition] => SimpleXMLElement Object ( [conditionId] => 1000 //      "1000"  "New"...  ,   [conditionDisplayName] => New ) [isMultiVariationListing] => false [topRatedListing] => false ) ) ) [paginationOutput] => SimpleXMLElement Object ( [pageNumber] => 1 [entriesPerPage] => 100 [totalPages] => 1 [totalEntries] => 11 ) [itemSearchURL] => http://www.ebay.com/sch/10063/i.html?_sasl=riderswarehouse&payment=PayPal&_fss=1&LH_SpecificSeller=1&LH_PayPal=1&_nkw=cobra+exhaust+c90t&LH_BIN=1&LH_ItemCondition=1&_saslop=2&LH_AvailTo=1&_fblo=3000&_fbsc=1&_fls=1&_incaucbin=0&_ipg=100&_os=S%7CD&_pgn=1&_saact=168&_sop=15 //      ,      $request   ebay )
      
      









答えのいくつかの点を詳しく述べたいと思います。

[shipToLocations] =>世界中

この流出は実際には何も意味しません。 販売者があなたの国をブラックリストに手動で入力し、そこに商品を送金するつもりがない場合、ワールドワイドは回答の同じ場所で誇示します。



[convertedCurrentPrice] => 521.51

EBay APIは、販売者が設定した通貨で価格を提供できます。 実際には、すべての価格をドルにする方がより正確であり、この行はこれを扱います。



[timeLeft] => P11DT9H1M57S

この時間が経過すると、ロットは不良になり、再表示されます(アイテムが再リストされます)。 しばらくすると、itemIDで見つけることができなくなります。



[entriesPerPage] => 100

[totalPages] => 1

eBay APIには、ページあたり100ロットのグローバル制限があります。 リクエストでさらに見つかった場合は、いくつかのリクエストを作成し、回答をつなぎ合わせる必要があります。 eBay APIにはそのような関数はありません。後で記述します。



答えがあれば、あなたはすでに何かをすることができます。 この記事がタカの読者にとって興味深いものである場合は、次に、私がどのように処理し、何が起こるかを分析します。



また、eBay APIのいくつかの機能を「ライフから」組み合わせて、1つの機能の結果を別の入力に入力し、いくつかのフィルターを適用して、データベースに書き込むに値する出力を取得するアルゴリズムを検討します。

がんばって。



All Articles