Skip to content

利用淘宝API批量获取淘宝产品(不是商品!!!)

taobao

写完才搞明白,淘宝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用于获取产品的具体信息

经过API调用发现,淘宝的产品类目有3级,结构如下:
taobao

下面来说说实现:
由于淘宝推出了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;
			List result = 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);
		}
0 0 votes
Article Rating
Tags:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
紫枫闲人

请问,怎么通过商品ID获取产品的名称?

紫枫闲人

不是API获取,能用抓取网页的方式获得吗?

紫枫闲人

涉及的两个API都是收费的

紫枫闲人

我已经搞定了,可以在商品页得到类目ID,根据类目ID可以抓取到类目名称,这个也勉强能用。

6
0
Would love your thoughts, please comment.x
()
x