天天看點

淘寶客python SDK 3.X更新

最近看到淘寶客相關的東西,感覺有點搞頭,于是想要自己弄了試試。

這裡稍微介紹下:淘寶客大概就是幫商家進行推廣的群體稱謂,其中商家會在商品價格中支出一部分給推廣者作為傭金,相比以前商家花錢雇人刷單的方式,商家把刷單的開銷分攤為淘寶客的傭金和買家的優惠,算一種三赢的方式吧。

在阿裡背景裡看到了有python的 API SDK可以使用,很是開心,立馬下載下傳來了開始用,結果sample根本跑不起來。

一看錯誤……這貌似是2.X的文法,再去看說明:支援python 2.7以上。媽蛋,3.X也是2.7以上,但是卻不支援,還以為自己下載下傳錯了,工單咨詢後确認不支援3.X。于是隻能自己來更新了。

1、在3中,用int替代了long,是以:

P_TIMESTAMP: str(int(time.time() * 1000)),
           

2、用items替代iteritems:

for key, value in application_parameter.items():
           

3、查閱資料,發現有人說到dict methods dict.keys(), dict.items() and dict.values() return “views” instead of lists.這樣就顯而易見知道怎麼改了:

keys = sorted(keys)
           

4、英文意思很明确,unicode對象在哈希之前必須進行編碼轉換,想起之前又看到過中文字元在python中是以unicode存在的,是以:

sign = hashlib.md5(parameters.encode("utf-8")).hexdigest().upper()
           

5、這是花費時間最長的一個錯誤。首先,直接看最後,錯誤在soket.py裡,心涼了半截,難道這裡的調用都不一樣了,再網上看又是python 3.X的http子產品,去百度了半天也沒有發現類似的錯誤,隻能自己硬着頭皮去看子產品,功夫不負有心人,其實也很簡單,在類HTTPConnection的初始化函數是這樣定義的:

connection = httplib.HTTPConnection(self.__domain, self.__port, timeout)
           

比較下參數發現,python 2比3多了一個參數,去掉即可:

這個錯誤主要是是報錯的地方和修改的地方不在一起,是以很難插出原因。

6、官方文檔是這樣解釋的:urllib has been split up in Python 3. The urllib.urlencode() function is now urllib.parse.urlencode(), and the urllib.urlopen() function is now urllib.request.urlopen()

url = N_REST + "?" + urllib.parse.urlencode(sys_parameters)
           

7、這個錯誤是在API調用出異常的時候暴露出來的。原因前面已經提到了,稍微查了下替代的方法:

if "error_response" in jsonobj:
           

到此為止,SDK的python 3.X更新就算告一段落了,看注釋這個SDK是2012年寫的,年代久遠。3替代2是必然的,是以我這樣的新手直接從3開始學,通過這次也學到了不少2的文法,雖然用不到,但是相信加深了對python的了解。

以上!