A. 幫忙解決 用php 調取淘寶API 介面時候 老提示 無許可權, 請高手指教!
淘寶API訪問級別劃分為:
公開:
表示完全公開性的數據介面,主要是查詢類的API。 例如:taobao.taobaoke.items.get 。 這類API只需傳入appkey+簽名進行api的調用。
須用戶登錄:
表示完全隱私的數據查詢介面以及操作性API。 如:taobao.item.add(操作類API) 或 taobao.item.onsale.get(查詢)。 這類API調用時,必須傳入appkey+sessionkey+簽名進行API的調用。
隱私數據須用戶登錄:
表示部分公開性的數據介面,主要是查詢類的API。如:taobao.user.get這個介面。
部分欄位是隱私的,部分欄位是公開的。當只訪問公開數據時,API調用時,只需要傳入appkey+簽名進行API調用。
當需要訪問隱私數據時,需要傳入appkey+sessionkey+簽名方式來調用。
請檢查是不是訪問級別不對。
B. ASP.NET挪用淘寶API實例詳解
本文和各人具體分享一下納乎如何使用來調用淘寶客API開發的實例講解。
第一步 獲取全部推廣商品實體
需要使用類 ITopClient TOP客戶端類
1using Top.Api.Request;
2
3namespace Top.Api
4 {
5///summary
6/// TOP客戶端。
7////summary
8publicinte***ce ITopClient
9 {
10///summary
11/// 執行TOP公然API請求。
12////summary
13///typeparam name="T"領域對象/typeparam
14///param name="request"具體的TOP API請求/param
15///returns領域對象/returns
16 T ExecuteT(ITopRequestT request) where T : TopResponse;
17
18///summary
19/// 執行TOP隱私API請求。
20////summary
21///typeparam name="T"領域對象/typeparam
22///param name="request"具體的TOP API請求/param
23///param name="session"用戶會話碼/param
24///returns領域衡茄梁對象/returns
25 T ExecuteT(ITopRequestT request, string session) where T : TopResponse;
26 }
27 }
DefaultTopClient 初始化連接(請求地址, Appkey, AppSecret);
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using Top.Api.Parser;
5using Top.Api.Request;
6using Top.Api.Util;
7
8namespace Top.Api
9 {
10///summary
11/// 基於REST的TOP客戶端。咐運
12////summary
13publicclass DefaultTopClient : ITopClient
14 {
15publicconststring APP_KEY ="app_key";
16publicconststring FORMAT ="format";
17publicconststring METHOD ="method";
18publicconststring TIMESTAMP ="timestamp";
19publicconststring VERSION ="v";
20publicconststring SIGN ="sign";
21publicconststring PARTNER_ID ="partner_id";
22publicconststring SESSION ="session";
23publicconststring FORMAT_XML ="xml";
24
25privatestring serverUrl;
26privatestring appKey;
27privatestring appSecret;
28privatestring format = FORMAT_XML;
29
30private WebUtils webUtils;
31
32#region DefaultTopClient Constructors
33
34public DefaultTopClient(string serverUrl, string appKey, string appSecret)
35 {
36this.appKey = appKey;
37this.appSecret = appSecret;
38this.serverUrl = serverUrl;
39this.webUtils =new WebUtils();
40 }
41
42public DefaultTopClient(string serverUrl, string appKey, string appSecret, string format)
43 : this(serverUrl, appKey, appSecret)
44 {
45this.format = format;
46 }
47
48publicvoid SetTimeout(int timeout)
49 {
50 webUtils.Timeout = timeout;
51 }
52
53#endregion
54
55#region ITopClient Members
56
57public T ExecuteT(ITopRequestT request) where T : TopResponse
58 {
59return ExecuteT(request, null);
60 }
61
62public T ExecuteT(ITopRequestT request, string session) where T : TopResponse
63 {
64//添加協議級請求參數
65 TopDictionary txtParams =new TopDictionary(request.GetParameters());
66 txtParams.Add(METHOD, request.GetApiName());
67 txtParams.Add(VERSION, "2.0");
68 txtParams.Add(APP_KEY, appKey);
69 txtParams.Add(FORMAT, format);
70 txtParams.Add(PARTNER_ID, "top-sdk-net-");
71 txtParams.Add(TIMESTAMP, DateTime.Now);
72 txtParams.Add(SESSION, session);
73
74// 添加簽名參數
75 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret));
76
77// 是否需要上傳文件
78string body;
79if (request is ITopUploadRequestT)
80 {
81 ITopUploadRequestT uRequest = (ITopUploadRequestT)request;
82 IDictionarystring, FileItem fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParamet ers());
83 body = webUtils.DoPost(this.serverUrl, txtParams, fileParams);
84 }
85else
86 {
87 body = webUtils.DoPost(this.serverUrl, txtParams);
88 }
89
90 T rsp;
91if (FORMAT_XML.Equals(format))
92 {
93 ITopParserT tp =new TopXmlParserT();
94 rsp = tp.Parse(body);
95 }
96else
97 {
98 ITopParserT tp =new TopJsonParserT();
99 rsp = tp.Parse(body);
100 }
101
102return rsp;
103 }
104
105#endregion
106 }
107 }
TaobaokeItemsGetResponse 信息返回
1using System;
2using System.Xml.Serialization;
3using System.Collections.Generic;
4using Top.Api.Domain;
5
6namespace Top.Api.Response
7 {
8///summary
9/// TaobaokeItemsGetResponse.
10////summary
11publicclass TaobaokeItemsGetResponse : TopResponse
12 {
13///summary
14/// 淘寶客商品對象列表。不返回taobaoke_cat_click_url和keyword_click_url兩個欄位。
15////summary
16 [XmlArray("taobaoke_items")]
17 [XmlArrayItem("taobaoke_item")]
18public ListTaobaokeItem TaobaokeItems { get; set; }
19
20///summary
21/// 搜索到符合條件的結果總數
22////summary
23 [XmlElement("total_results")]
24publiclong TotalResults { get; set; }
25 }
26 }
TaobaokeItemsGetRequest 在請求類中設置相應條件信息。
1using System;
2using System.Collections.Generic;
3using Top.Api.Response;
4
5namespace Top.Api.Request
6 {
7///summary
8/// TOP API: taobao.taobaoke.items.get
9////summary
10publicclass TaobaokeItemsGetRequest :
11 {
12///summary
13/// 商品所在地
14////summary
15publicstring Area { get; set; }
16
17///summary
18/// 是否主動發貨
19////summary
20publicstring AutoSend { get; set; }
21
22///summary
23/// 是否支持抵價券,設置為true表示該商品支持抵價券,設置為false或不設置表示不判定這個屬性
24////summary
25publicstring CashCoupon { get; set; }
26
27///summary
28/// 是否支持貨到付款,設置為true表示該商品是支持貨到付款,設置為false或不設置表示不判定這個屬性
29////summary
30publicstring CashOndelivery { get; set; }
31
32///summary
33/// 商品所屬分類id
34////summary
35public Nullablelong Cid { get; set; }
36
37///summary
38/// 最高累計推廣傭金選項
39////summary
40publicstring EndCommissionNum { get; set; }
4
1
42///summary
43/// 最高傭金比率選項
44////summary
45publicstring EndCommissionRate { get; set; }
46
47///summary
48/// 可選值和start_credit一樣。start_credit的值一定要小於或即是end_credit的值。註:end_credit與start_credit一起使用才生效
49////summary
50publicstring EndCredit { get; set; }
51
52///summary
53/// 最高價格
54////summary
55publicstring EndPrice { get; set; }
56
57///summary
58/// 累計推廣量規模竣事
59////summary
60publicstring EndTotalnum { get; set; }
61
62///summary[nextpage]
63/// 需返回的欄位列表。可選值:num_iid,title,nick,pic_url,price,click_url,commis sion,commission_rate,commission_num,commission_vol u me,shop_click_url,seller_credit_score,item_locatio n ,volume ;欄位之間用","分隔
64////summary
65publicstring Fields { get; set; }
66
67///summary
68/// 是否查詢消保賣家
69////summary
70publicstring Guarantee { get; set; }
71
72///summary
73/// 標識一個應用是否來在無線或者手機應用,假如是true則會使用其他法則加密點擊串。假如不穿值,則默認是false.
74////summary
75public Nullablebool IsMobile { get; set; }
76
77///summary
78/// 商品標題中包含的關鍵字。 留意:查詢時keyword,cid至少選擇其中一個參數
79////summary
80publicstring Keyword { get; set; }
81
82///summary
83/// 是否商城的商品,設置為true表示該商品是屬於淘寶商城的商品,設置為false或不設置表示不判定這個屬性
84////summary
85publicstring MallItem { get; set; }
86
87///summary
88/// 淘寶用戶昵稱,註:指的是淘寶的會員登錄名。假如昵稱錯誤,那麼客戶就收不到傭金。每個淘寶昵稱都對應於一個pid,在這里輸進要結算傭金的淘寶昵稱,當推廣的商品成功後,傭金會打進此輸進的淘寶昵稱的賬戶。具體的信息可以登進阿里媽媽的網站查看。 font color="red"留意nick和pid至少需要傳遞一個,假如2個都傳了,將以pid為准/font
89////summary
90publicstring Nick { get; set; }
91
92///summary
93/// 是否30天維修,設置為true表示該商品是支持30天維修,設置為false或不設置表示不判定這個屬性
94////summary
95publicstring OnemonthRepair { get; set; }
96
97///summary
98/// 自定義輸進串。格式:英文和數字組成;長度不能大於12個字元,區分不同的推廣渠道,如:bbs,表示bbs為推廣渠道;blog,表示blog為推廣渠道。
99////summary
100publicstring OuterCode { get; set; }
101
102///summary
103/// 是否海外商品,設置為true表示該商品是屬於海外商品,默以為false
104////summary
105publicstring OverseasItem { get; set; }
106
107///summary
108/// 結果頁數。1~99
109////summary
110public Nullablelong PageNo { get; set; }
111
112///summary
113/// 每頁返回結果數。最大每頁40
114////summary
115public Nullablelong PageSize { get; set; }
116
117///summary
118/// 用戶的pid,必須是mm_***x_0_0這種格式中間的"***x". font color="red"留意nick和pid至少需要傳遞一個,假如2個都傳了,將以pid為准,且pid的最大長度是20/font
119////summary
120publicstring Pid { get; set; }
121
122///summary
123/// 是否如實描述(即:先行賠付)商品,設置為true表示該商品是如實描述的商品,設置為false或不設置表示不判定這個屬性
124////summary
125publicstring RealDescribe { get; set; }
126
127///summary
128/// 是否支持7天退換,設置為true表示該商品支持7天退換,設置為false或不設置表示不判定這個屬性
129////summary
130publicstring SevendaysReturn { get; set; }
131
132///summary[nextpage]
133/// 默認排序:default price_desc(價格從高到低) price_asc(價格從低到高) credit_desc(信用等級從高到低) commissionRate_desc(傭金比率從高到底) commissionRate_asc(傭金比率從低到高) commissionNum_desc(成交量成高到低) commissionNum_asc(成交量從低到高) commissionVolume_desc(總支出傭金從高到底) commissionVolume_asc(總支出傭金從低到高) delistTime_desc(商品下架時間從高到底) delistTime_asc(商品下架時間從低到高)
134////summary
135publicstring Sort { get; set; }
136
137///summary
138/// 起始累計推廣量傭金。註:返回的數據是30天內累計推廣量,具該欄位要與最高累計推廣量一起使用才生效
139////summary
140publicstring StartCommissionNum { get; set; }
141
142///summary
143/// 起始傭金比率選項,如:1234表示12.34%
144////summary
145publicstring StartCommissionRate { get; set; }
146
147///summary
148/// 賣家信用: 1heart(一心) 2heart (兩心) 3heart(三心) 4heart(四心) 5heart(五心) 1diamond(一鑽) 2diamond(兩鑽) 3diamond(三鑽) 4diamond(四鑽) 5diamond(五鑽) 1crown(一冠) 2crown(兩冠) 3crown(三冠) 4crown(四冠) 5crown(五冠) 1goldencrown(一黃冠) 2goldencrown(二黃冠) 3goldencrown(三黃冠) 4goldencrown(四黃冠) 5goldencrown(五黃冠)
149////summary
150publicstring StartCredit { get; set; }
151
152///summary
153/// 起始價格。傳進價格參數時,需留意起始價格和最高價格必須一起傳進,並且 start_price = end_price
154 ////summary
155publicstring StartPrice { get; set; }
156
157///summary
158/// 累計推廣量規模開始
159////summary
160publicstring StartTotalnum { get; set; }
161
162///summary
163/// 是否支持VIP卡,設置為true表示該商品支持VIP卡,設置為false或不設置表示不判定這個屬性
164////summary
165publicstring VipCard { get; set; }
166
167#region ITopRequest Members
168
169publicstring GetApiName()
170 {
171return"taobao.taobaoke.items.get";
172 }
173
174public IDictionarystring, string GetParameters()
175 {
176 TopDictionary parameters =new TopDictionary();
177 parameters.Add("area", this.Area);
178 parameters.Add("auto_send",
C. thinkphp5怎麼應用淘寶api
淘寶開放平台api的sdk下載到網門tbsdk目錄里,鍵巧在入口文件引入TopSdk.php文件沒問題,在控制稿圓鍵器中用use \TopClient;以腔頃及需要用來的其他類
D. php怎麼調用淘寶api
首先你得熟悉了解你做的那塊。給你個網址參照 http://www.taoapi.com/ 然後下載淘寶API SDK文件導入你的php項目下,然後根據淘寶API使用手冊,看調用你所需要的API需要哪些參數,然後再你得php文件中載入你所要用到的SDK文件 就可以直接使用了 我現在也在做這塊 ,有時間可以交流一下...
E. 一鍵上傳淘寶php源碼
PHP實現採集抓取淘寶網單個商品信息,本文是一種實現思路,使用file_get_contents函數實現,並給出了採集正則,需要的朋友可以參考下
調用淘寶的數據可以使用淘寶提供的api,如果只需調用淘寶商品圖片名稱等公開信息在自己網站上,使用php中的 file_get_contents 函數實現即可。
思路:
file_get_contents(url) 該函數根據 url 如 http://www..com 將該網頁內容(源碼)以字元串形式輸出(一個整字元串),然後配合preg_match,preg_replace等這些正則表達式操作就可以實現獲取該url特定div,img等信息了。當然前題是淘寶在單個商品頁面的結構是固定的,如500圖的img中id就是J_ImgBooth!
具體實現方法:(獲取500圖,名稱,價格,屬性及商品描述)
復制代碼 代碼如下:
$text=file_get_contents("http://item.taobao.com/item.htm?id=2380347279"); //將url地址上頁面內容保存進$text
A.獲取500圖:
復制代碼 代碼如下:
preg_match('/<img[^>]*id="J_ImgBooth"[^r]*rc=\"([^"]*)\"[^>]*>/', $text, $img);
//運用正則抓取img標簽中id為J_ImgBooth的img,$img[0]為該500圖img標簽,$img[1]為500圖的圖片地址;
B. 獲取名稱:
復制代碼 代碼如下:
preg_match('/<title>([^<>]*)<\/title>/', $text, $title);
//因為正文中的商品名稱標簽沒有特殊class或id正則不好抓取,就抓<title>標簽中的內容了,一般來說title中內容就是商品名稱了(實際有些出入),$title[0]整個title標簽 $title[1]標簽中內容;
$title=iconv('GBK','UTF-8',$title);
//如果你的網站是utf8編碼,那麼需要進行一下轉碼(淘寶是gbk編碼)
C.獲取價格:
復制代碼 代碼如下:
preg_match('/<([a-z]+)[^i]*id=\"J_StrPrice\"[^>]*>([^<]*)<\/\\1>/is', $text, $price);
//同理獲取id為J_StrPrice的標簽內容$price[2], $price[0]是整個標簽, $price[1]為strong標簽名;
$price=floatval($price);//放入資料庫估計還有轉一下變數類型
D.獲取屬性:
這之前獲取的內容都是在單標簽中相對只需一個正則就可搞定,然而如果要獲取如
復制代碼 代碼如下:
…
<div id=」xxx」>
…
<ul>
…
</ul>
<div>…
<div>…
</div>
</div>
</div>
…
這樣特定div中有未知n個<>標簽,獲取該特定div將會非常的困難,搜了下網上,最接近的也只是」/<([a-z]+)[^>]*>([^<>]|(?R))*<\/\\1>/」這樣使用遞歸抓取標簽對,但是他不能抓特定標簽,所以想要輕松抓取class=」attributes」的div我是沒法辦到了。但是淘寶網頁有其特殊性,就是它的各個標簽結構基本是固定的…<div>…</div>標簽後面不是</div><div id=」description」>就是</div><div>,所以我們可以採用變通法達到獲取屬性標簽內容的目的。
復制代碼 代碼如下:
preg_match('/<(div)[^c]*class=\"attributes\"[^>]*>.*<\/\\1>/is', $text, $text0);
//這個正則會抓取<div開始到整個頁面最後一個</div>標簽,當然我們屬性標簽就在這個的前面部分。
$text1=preg_replace("/<\/div>[^<]*<(div)[^c]*id=\"description\"[^>]*>.*<\/\\1>/is","",$text0);
//匹配到</div ><div id=」description」>至最後</div>然後用」」代替(就是把匹配的刪除了),所以如果attributes的div後面緊跟的是description那麼我們已經達到目的了。
$attributes=preg_replace("/<\/div>[^<]*<(div)[^c]*class=\"box J_TBox\"[^>]*>.*<\/\\1>/is","",$text1);
//如果attributes後面緊跟box J_Tbox標簽,那麼我們還需要使用以上這步來剔除box J_Tbox標簽,當然如果attributes的div後面緊跟的是description,這一步將不會匹配到任何即什麼都不會做。
E.獲取描述:
通過上面方法你肯定覺得淘寶頁面上任何標簽都可以很簡單獲取了吧(我之前也是這么想的),但是使用這個方法獲取描述時得到的內容將會是「描述載入中」,是的,這個描述內容不是在源碼中的,它是打開頁面載入進一大堆js後,不知道從淘寶的哪個角落中載入進來的。
好吧,那麼我們也可以模仿它放一些js進去。不知道哪些對載入描述有用?沒事,全載入進來肯定沒錯。不知道需要放那些特定div上去有作用?抓一個源碼,刪掉一些div一步步試試看,你會發現「<div id=」detail」> </div>
復制代碼 代碼如下:
<div id="description">
<div id="J_DivItemDesc">描述載入中</div>
</div>
這幾個div是載入描述所必須的,那麼下面就是寫代碼了:
復制代碼 代碼如下:
preg_match_all('/<script[^>]*>[^<]*<\/script>/is', $text, $content);//頁面js腳本
$content=$content[0];
$description='<div id="detail"> </div>
<div id="description">
<div id="J_DivItemDesc">描述載入中</div>
</div>';
foreach ($content as &$v){$description.=iconv('GBK','UTF-8',$v);};
//將這個$description放進頁面,描述就會自動的載入進來了,當然多個商品描述在同一個頁面也會只有一個描述會被載入的。