写完才搞明白,淘宝API里有两个概念,产品(Product)和商品(item),产品就像一个模板,可以用它来发布商品,比如现在有一个产品叫打火机,然后卖家A利用这个产品发布了一个商品A,定价是15块,卖家B也利用这个产品发布了一个商品B,定价是20块,那商品A和商品B就是两个不同的商品,虽然它们都卖的是产品打火机。。。唉,淘宝太坑了,有用的API就是不给你。
[amazon_link asins=’B00X65PEO8,B013KKCJZK,B072LD9GZM’ template=’CopyOf-ProductGrid’ store=’boyd-23′ marketplace=’CN’ link_id=”]
主要用到的淘宝API有3个:
1.taobao.itemcats.get
http://api.taobao.com/apidoc/api.htm?spm=0.0.0.0.RVqiAT&path=cid:3-apiId:122
该API用于获得所有的产品分类,我们可以利用这个API获取所有分类的ID(CategoryId)
2.taobao.products.search
http://api.taobao.com/apidoc/api.htm?path=cid:4-apiId:5
该API是一个搜索API,根据关键字等信息搜索产品,我们可以用分类Id(CategoryId)来进行搜索,达到查找该分类下产品的目的。
3.taobao.product.get
http://api.taobao.com/apidoc/api.htm?spm=0.0.0.0.PtotF7&path=cid:4-apiId:4
该API用于获取产品的具体信息
下面来说说实现:
由于淘宝推出了SDK,所以这里展示的是.net调用SDK的代码,使用的是MVC 3.0框架,这里只展示关键的Controller代码。
1.获取产品分类,可以通过反复调用该方法遍历3层分类目录,注意其中有一个属性叫做is_parent,该属性表明是否在该分类下还有子分类,若有则为true
public ActionResult GetItemCategorys(long parentCid = 0) { //if parentCid == 0, that means we are in the root of the category map ITopClient client = new DefaultTopClient(envHelper.BaseUrl, envHelper.AppKey, envHelper.AppSecret); ItemcatsGetRequest req = new ItemcatsGetRequest(); req.Fields = "cid,parent_cid,name,is_parent"; req.ParentCid = parentCid; ItemcatsGetResponse response = client.Execute(req); return View(response); }
2.批量获取产品,根据上一步取到的CategoryID,进行搜索,然后取得产品列表,包含了产品的大致信息,包括名称,描述,图片,价格等,注意其中有一个PageSize属性,该属性表明每次取多少个商品,最大值为100。
public ActionResult GetProductsViaCategoryId(long categoryId) { ITopClient client = new DefaultTopClient(envHelper.BaseUrl, envHelper.AppKey, envHelper.AppSecret); ProductsSearchRequest req = new ProductsSearchRequest(); req.Fields = "product_id,name,pic_url,cid,props,price,tsc"; req.Cid = categoryId; req.PageSize = 100; Listresult = new List (); //totally fetch top 1000 products for(int i = 1; i<= 10; i++) { req.PageNo = i; ProductsSearchResponse response = client.Execute(req); result.AddRange(response.Products); if (response.Products.Count < 100) { break; } } return View(result); }
3.获取具体产品信息,产品属性列表请参考:
http://api.taobao.com/apidoc/dataStruct.htm?path=cid:4-dataStructId:6-apiId:4-invokePath:product
public ActionResult GetProductDetailsById(long productId) { ITopClient client = new DefaultTopClient(envHelper.BaseUrl, envHelper.AppKey, envHelper.AppSecret); ProductGetRequest req = new ProductGetRequest(); req.Fields = "created, props, product_imgs, name, price, desc, pic_url, product_prop_imgs"; req.ProductId = productId; ProductGetResponse response = client.Execute(req); return View(response.Product); }
请问,怎么通过商品ID获取产品的名称?
不是API获取,能用抓取网页的方式获得吗?
涉及的两个API都是收费的
这个是1年前写的了。。。现在估计早就改了吧。。。
我已经搞定了,可以在商品页得到类目ID,根据类目ID可以抓取到类目名称,这个也勉强能用。
搞定了就好呀