Source code for item

#!/usr/bin/env python
# encoding: utf-8
"""
item.py

Created by 徐 光硕 on 2011-11-15.
Copyright (c) 2011 __MyCompanyName__. All rights reserved.
"""

from api import TOP, TOPRequest, TOPDate
from user import Location

[docs]class Item(TOP): '''Item(商品)结构''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Item, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'skus':Sku,'location':Location,'item_imgs':ItemImg,'prop_imgs':PropImg,'videos':Video} self.fields = ['detail_url','num_iid','title','nick','type','desc','skus','props_name','created','promoted_service','is_lightning_consignment','is_fenxiao','auction_point','property_alias','volume','template_id','after_sale_id','is_xinpin','sub_stock','cid','seller_cids','props','input_pids','input_str','pic_url','num','valid_thru','list_time','delist_time','stuff_status','location','price','post_fee','express_fee','ems_fee','has_discount','freight_payer','has_invoice','has_warranty','has_showcase','modified','increment','approve_status','postage_id','product_id','item_imgs','prop_imgs','outer_id','is_virtual','is_taobao','is_ex','is_timing','videos','is_3D','score','one_station','second_kill','auto_fill','violation','is_prepay','ww_status','wap_desc','wap_detail_url','cod_postage_id','sell_promise']
[docs] def add(self, num, price, aType, stuff_status, title, desc, location_state, location_city, cid, session, **kwargs): '''taobao.item.add 添加一个商品 此接口用于新增一个商品 商品所属的卖家是当前会话的用户 商品的属性和sku的属性有包含的关系,商品的价格要位于sku的价格区间之中(例如,sku价格有5元、10元两种,那么商品的价格就需要大于等于5元,小于等于10元,否则新增商品会失败) 商品的类目和商品的价格、sku的价格都有一定的相关性(具体的关系要通过类目属性查询接口获得) 商品的运费承担方式和邮费设置有相关性,卖家承担运费不用设置邮费,买家承担运费需要设置邮费 当关键属性值选择了“其他”的时候,需要输入input_pids和input_str商品才能添加成功。''' request = TOPRequest('taobao.item.add') request['num'] = num request['price'] = price request['type'] = aType request['stuff_status'] = stuff_status request['title'] = title request['desc'] = desc request['location.state'] = location_state request['location.city'] = location_city request['cid'] = cid for k, v in kwargs.iteritems(): if k not in ('props', 'approve_status', 'freight_payer', 'valid_thru', 'has_invoice', 'has_warranty', 'has_showcase', 'seller_cids', 'has_discount', 'post_fee', 'express_fee', 'ems_fee', 'list_time', 'increment', 'image', 'postage_id', 'auction_point', 'property_alias', 'input_pids', 'sku_properties', 'sku_prices', 'sku_outer_ids', 'lang', 'outer_id', 'product_id', 'pic_path', 'auto_fill', 'input_str', 'is_taobao', 'is_ex', 'is_3D', 'sell_promise', 'after_sale_id', 'cod_postage_id', 'is_lightning_consignment', 'weight', 'is_xinpin', 'sub_stock') and v==None: continue request[k] = v self.create(self.execute(request, session)['item']) return self
[docs] def update(self, num_iid, session, **kwargs): '''taobao.item.update 更新商品信息 根据传入的num_iid更新对应的商品的数据 传入的num_iid所对应的商品必须属于当前会话的用户 商品的属性和sku的属性有包含的关系,商品的价格要位于sku的价格区间之中(例如,sku价格有5元、10元两种,那么商品的价格就需要大于等于5元,小于等于10元,否则更新商品会失败) 商品的类目和商品的价格、sku的价格都有一定的相关性(具体的关系要通过类目属性查询接口获得) 当关键属性值更新为“其他”的时候,需要输入input_pids和input_str商品才能更新成功。''' request = TOPRequest('taobao.item.update') request['num_iid'] = num_iid for k, v in kwargs.iteritems(): if k not in ('cid', 'props', 'num', 'price', 'title', 'desc', 'location_state', 'location_city', 'post_fee', 'express_fee', 'ems_fee', 'list_time', 'increment', 'image', 'stuff_status', 'auction_point', 'property_alias', 'input_pids', 'sku_quantities', 'sku_prices', 'sku_properties', 'seller_cids', 'postage_id', 'outer_id', 'product_id', 'pic_path', 'auto_fill', 'sku_outer_ids', 'is_taobao', 'is_ex', 'is_3D', 'is_replace_sku', 'input_str', 'lang', 'has_discount', 'has_showcase', 'approve_status', 'freight_payer', 'valid_thru', 'has_invoice', 'has_warranty', 'after_sale_id', 'sell_promise', 'cod_postage_id', 'is_lightning_consignment', 'weight', 'is_xinpin', 'sub_stock') and v==None: continue if k == 'location_state': k = 'location.state' if k == 'location_city': k = 'location.city' request[k] = v self.create(self.execute(request, session)['item']) return self
[docs] def delete(self, num_iid, session): '''taobao.item.delete 删除单条商品 删除单条商品''' request = TOPRequest('taobao.item.delete') request['num_iid'] = num_iid self.create(self.execute(request, session)['item']) return self
[docs] def update_delisting(self, num_iid, session): '''taobao.item.update.delisting 商品下架 单个商品下架 输入的num_iid必须属于当前会话用户''' request = TOPRequest('taobao.item.update.delisting') request['num_iid'] = num_iid self.create(self.execute(request, session)['item']) return self
[docs] def update_listing(self, num_iid, num, session): '''taobao.item.update.listing 一口价商品上架 单个商品上架 输入的num_iid必须属于当前会话用户''' request = TOPRequest('taobao.item.update.listing') request['num_iid'] = num_iid request['num'] = num self.create(self.execute(request, session)['item']) return self
[docs] def get(self, num_iid, fields=[], session=None): '''taobao.item.get 得到单个商品信息 获取单个商品的详细信息 卖家未登录时只能获得这个商品的公开数据,卖家登录后可以获取商品的所有数据''' request = TOPRequest('taobao.item.get') request['num_iid'] = num_iid if not fields: fields = self.fields request['fields'] = fields self.create(self.execute(request, session)['item']) return self
[docs] def price_update(self, num_iid, session, **kwargs): '''taobao.item.price.update 更新商品价格 更新商品价格''' request = TOPRequest('taobao.item.price.update') request['num_iid'] = num_iid for k, v in kwargs.iteritems(): if k not in ('cid', 'props', 'num', 'price', 'title', 'desc', 'location_state', 'location_city', 'post_fee', 'express_fee', 'ems_fee', 'list_time', 'increment', 'image', 'stuff_status', 'auction_point', 'property_alias', 'input_pids', 'sku_quantities', 'sku_prices', 'sku_properties', 'seller_cids', 'postage_id', 'outer_id', 'product_id', 'pic_path', 'auto_fill', 'sku_outer_ids', 'is_taobao', 'is_ex', 'is_3D', 'is_replace_sku', 'input_str', 'lang', 'has_discount', 'has_showcase', 'approve_status', 'freight_payer', 'valid_thru', 'has_invoice', 'has_warranty', 'after_sale_id', 'sell_promise', 'cod_postage_id', 'is_lightning_consignment', 'weight', 'is_xinpin') and v==None: continue if k == 'location_state': k = 'location.state' if k == 'location_city': k = 'location.city' request[k] = v self.create(self.execute(request, session)['item']) return self
[docs] def quantity_update(self, num_iid, quantity, session, sku_id=None, outer_id=None, aType=None): '''taobao.item.quantity.update 宝贝/SKU库存修改 提供按照全量或增量形式修改宝贝/SKU库存的功能''' request = TOPRequest('taobao.item.quantity.update') request['num_iid'] = num_iid request['quantity'] = quantity if sku_id!=None: request['sku_id'] = sku_id if outer_id!=None: request['outer_id'] = outer_id if aType!=None: request['type'] = aType self.create(self.execute(request, session)['item']) return self
[docs] def recommend_add(self, num_iid, session): '''taobao.item.recommend.add 橱窗推荐一个商品 将当前用户指定商品设置为橱窗推荐状态 橱窗推荐需要用户有剩余橱窗位才可以顺利执行 这个Item所属卖家从传入的session中获取,需要session绑定 需要判断橱窗推荐是否已满,橱窗推荐已满停止调用橱窗推荐接口,2010年1月底开放查询剩余橱窗推荐数后可以按数量橱窗推荐商品''' request = TOPRequest('taobao.item.recommend.add') request['num_iid'] = num_iid self.create(self.execute(request, session)['item']) return self
[docs] def recommend_delete(self, num_iid, session): '''taobao.item.recommend.delete 取消橱窗推荐一个商品 取消当前用户指定商品的橱窗推荐状态 这个Item所属卖家从传入的session中获取,需要session绑定''' request = TOPRequest('taobao.item.recommend.delete') request['num_iid'] = num_iid self.create(self.execute(request, session)['item']) return self
[docs]class Items(TOP): def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Items, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'items':Item, 'item_search':ItemSearch} self.fields = ['items', 'total_results', 'item_search']
[docs] def custom_get(self, outer_id, session, fields=[]): '''taobao.items.custom.get 根据外部ID取商品 跟据卖家设定的商品外部id获取商品 这个商品对应卖家从传入的session中获取,需要session绑定''' request = TOPRequest('taobao.items.custom.get') request['outer_id'] = outer_id if not fields: item = Item() fields = item.fields request['fields'] = fields self.create(self.execute(request, session)) return self.items
[docs] def get(self, session, fields=[], **kwargs): '''taobao.items.get 搜索商品信息 根据传入的搜索条件,获取商品列表(类似于淘宝页面上的商品搜索功能,但是只有搜索到的商品列表,不包含商品的ItemCategory列表) 只能获得商品的部分信息,商品的详细信息请通过taobao.item.get获取 如果只输入fields其他条件都不输入,系统会因为搜索条件不足而报错。 不能通过设置cid=0来查询。''' request = TOPRequest('taobao.items.get') if not fields: item = Item() fields = item.fields request['fields'] = fields for k, v in kwargs.iteritems(): if k not in ('q', 'nicks', 'cid', 'props', 'product_id', 'page_no', 'order_by', 'ww_status', 'post_free', 'location_state', 'location_city', 'is_3D', 'start_score', 'end_score', 'start_volume', 'end_volume', 'one_station', 'is_cod', 'is_mall', 'is_prepay', 'genuine_security', 'stuff_status', 'start_price', 'end_price', 'page_size', 'promoted_service', 'is_xinpin') and v==None: continue if k == 'location_state': k = 'location.state' if k == 'location_city': k = 'location.city' request[k] = v self.create(self.execute(request, session)) return self.items
[docs] def inventory_get(self, session, fields=[], **kwargs): '''taobao.items.inventory.get 得到当前会话用户库存中的商品列表 获取当前用户作为卖家的仓库中的商品列表,并能根据传入的搜索条件对仓库中的商品列表进行过滤 只能获得商品的部分信息,商品的详细信息请通过taobao.item.get获取''' request = TOPRequest('taobao.items.inventory.get') if not fields: item = Item() fields = item.fields request['fields'] = fields for k, v in kwargs.iteritems(): if k not in ('q', 'banner', 'cid', 'seller_cids', 'page_no', 'page_size', 'has_discount', 'order_by', 'is_taobao', 'is_ex', 'start_modified', 'end_modified') and v==None: continue request[k] = v self.create(self.execute(request, session)) return self.items
[docs] def list_get(self, num_iids, fields=[], session=None): '''taobao.items.list.get 批量获取商品信息 查看非公开属性时需要用户登录''' request = TOPRequest('taobao.items.list.get') request['num_iids'] = num_iids if not fields: item = Item() fields = item.fields request['fields'] = fields self.create(self.execute(request, session)) return self.items
[docs] def onsale_get(self, session, fields=[], **kwargs): '''taobao.items.onsale.get 获取当前会话用户出售中的商品列表 获取当前用户作为卖家的出售中的商品列表,并能根据传入的搜索条件对出售中的商品列表进行过滤 只能获得商品的部分信息,商品的详细信息请通过taobao.item.get获取''' request = TOPRequest('taobao.items.onsale.get') if not fields: item = Item() fields = item.fields request['fields'] = fields for k, v in kwargs.iteritems(): if k not in ('q', 'banner', 'cid', 'seller_cids', 'page_no', 'has_discount', 'has_showcase', 'order_by', 'is_taobao', 'is_ex', 'page_size', 'start_modified', 'end_modified') and v==None: continue request[k] = v self.create(self.execute(request, session)) return self.items
[docs] def search(self, fields=[], **kwargs): '''taobao.items.search 搜索商品信息 - 根据传入的搜索条件,获取商品列表和商品类目信息ItemCategory列表(类似于淘宝页面上的商品搜索功能,与 taobao.items.get的区别在于:这个方法得到的结果既有商品列表,又有类目信息列表) - 商品列表里只能获得商品的部分信息,商品的详细信息请通过taobao.item.get获取 - 商品类目信息列表里只包含类目id和该类目下商品的数量 - 不能通过设置cid=0来查询''' request = TOPRequest('taobao.items.search') if not fields: item = Item() fields = item.fields request['fields'] = fields for k, v in kwargs.iteritems(): if k not in ('q', 'nicks', 'cid', 'props', 'product_id', 'order_by', 'ww_status', 'post_free', 'location_state', 'location_city', 'is_3D', 'start_score', 'end_score', 'start_volume', 'end_volume', 'one_station', 'is_cod', 'is_mall', 'is_prepay', 'genuine_security', 'promoted_service', 'stuff_status', 'start_price', 'end_price', 'page_no', 'page_size', 'auction_flag', 'auto_post', 'has_discount', 'is_xinpin') and v==None: continue if k == 'location_state': k = 'location.state' if k == 'location_city': k = 'location.city' request[k] = v self.create(self.execute(request)) return self.item_search
[docs]class Sku(TOP): '''Sku结构''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Sku, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate, 'modified':TOPDate} self.fields = ['sku_id','num_iid','properties','quantity','price','outer_id','created','modified','status']
[docs] def add(self, num_iid, properties, quantity, price, session, outer_id=None, item_price=None, lang=None): '''taobao.item.sku.add 添加SKU 新增一个sku到num_iid指定的商品中 传入的iid所对应的商品必须属于当前会话的用户''' request = TOPRequest('taobao.item.sku.add') request['num_iid'] = num_iid request['properties'] = properties request['quantity'] = quantity request['price'] = price if outer_id!=None: request['outer_id'] = outer_id if item_price!=None: request['item_price'] = item_price if lang!=None: request['lang'] = lang self.create(self.execute(request, session)['sku']) return self
[docs] def delete(self, num_iid, properties, session, item_price=None, item_num=None, lang=None): '''taobao.item.sku.delete 删除SKU 删除一个sku的数据 需要删除的sku通过属性properties进行匹配查找''' request = TOPRequest('taobao.item.sku.delete') request['num_iid'] = num_iid request['properties'] = properties if item_num!=None: request['item_num'] = item_num if item_price!=None: request['item_price'] = item_price if lang!=None: request['lang'] = lang self.create(self.execute(request, session)['sku']) return self
[docs] def get(self, sku_id, fields=[], num_iid=None, nick=None): '''taobao.item.sku.get 获取SKU 获取sku_id所对应的sku数据 sku_id对应的sku要属于传入的nick对应的卖家''' request = TOPRequest('taobao.item.sku.get') request['sku_id'] = sku_id if num_iid!=None: request['num_iid'] = num_iid if nick!=None: request['nick'] = nick if not fields: fields = self.fields request['fields'] = fields self.create(self.execute(request)['sku']) return self
[docs] def price_update(self, num_iid, properties, session, quantity=None, price=None, outer_id=None, item_price=None, lang=None): '''taobao.item.sku.price.update 更新商品SKU的价格 更新商品SKU的价格''' request = TOPRequest('taobao.item.sku.price.update') request['num_iid'] = num_iid request['properties'] = properties if quantity!=None: request['quantity'] = quantity if price!=None: request['price'] = price if outer_id!=None: request['outer_id'] = outer_id if item_price!=None: request['item_price'] = item_price if lang!=None: request['lang'] = lang self.create(self.execute(request, session)['sku']) return self
[docs] def update(self, num_iid, properties, session, quantity=None, price=None, outer_id=None, item_price=None, lang=None): '''taobao.item.sku.update 更新SKU信息 - 更新一个sku的数据 - 需要更新的sku通过属性properties进行匹配查找 - 商品的数量和价格必须大于等于0 - sku记录会更新到指定的num_iid对应的商品中 - num_iid对应的商品必须属于当前的会话用户''' request = TOPRequest('taobao.item.sku.update') request['num_iid'] = num_iid request['properties'] = properties if quantity!=None: request['quantity'] = quantity if price!=None: request['price'] = price if outer_id!=None: request['outer_id'] = outer_id if item_price!=None: request['item_price'] = item_price if lang!=None: request['lang'] = lang self.create(self.execute(request, session)['sku']) return self
[docs]class Skus(TOP): def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Users, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'skus':Sku} self.fields = ['skus']
[docs] def get(self, num_iids, fields=[]): '''taobao.item.sku.get 获取SKU 获取sku_id所对应的sku数据 sku_id对应的sku要属于传入的nick对应的卖家''' request = TOPRequest('taobao.item.sku.get') request['num_iids'] = num_iids if not fields: sku = Sku() fields = sku.fields request['fields'] = fields self.create(self.execute(request)) return self.skus
[docs] def custom_get(self, outer_id, session, fields=[]): '''taobao.skus.custom.get 根据外部ID取商品SKU 跟据卖家设定的Sku的外部id获取商品,如果一个outer_id对应多个Sku会返回所有符合条件的sku 这个Sku所属卖家从传入的session中获取,需要session绑定(注:iid标签里是num_iid的值,可以用作num_iid使用)''' request = TOPRequest('taobao.skus.custom.get') request['outer_id'] = outer_id if not fields: item = Item() fields = item.fields request['fields'] = fields self.create(self.execute(request, session)) return self.skus
[docs]class ItemImg(TOP): '''ItemImg结构''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemImg, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate} self.fields = ['id','url','position','created']
[docs] def delete(self, id, num_iid, session): '''taobao.item.img.delete 删除商品图片 删除itemimg_id 所指定的商品图片 传入的num_iid所对应的商品必须属于当前会话的用户 itemimg_id对应的图片需要属于num_iid对应的商品''' request = TOPRequest('taobao.item.img.delete') request['id'] = id request['num_iid'] = num_iid self.create(self.execute(request, session)['item_img']) return self
[docs] def upload(self, num_iid, session, id=None, position=None, image=None, is_major=None): '''taobao.item.img.upload 添加商品图片 添加一张商品图片到num_iid指定的商品中 传入的num_iid所对应的商品必须属于当前会话的用户 如果更新图片需要设置itemimg_id,且该itemimg_id的图片记录需要属于传入的num_iid对应的商品。如果新增图片则不用设置 商品图片有数量和大小上的限制,根据卖家享有的服务(如:卖家订购了多图服务等),商品图片数量限制不同。''' request = TOPRequest('taobao.item.img.upload') request['num_iid'] = num_iid if id!=None: request['id'] = id if position!=None: request['position'] = position if image!=None: request['image'] = image if is_major!=None: request['is_major'] = is_major self.create(self.execute(request, session)['item_img']) return self
[docs] def joint_img(self, num_iid, pic_path, session, id=None, position=None, is_major=None): '''taobao.item.joint.img 商品关联子图 - 关联一张商品图片到num_iid指定的商品中 - 传入的num_iid所对应的商品必须属于当前会话的用户 - 商品图片关联在卖家身份和图片来源上的限制,卖家要是B卖家或订购了多图服务才能关联图片,并且图片要来自于卖家自己的图片空间才行 - 商品图片数量有限制。不管是上传的图片还是关联的图片,他们的总数不能超过一定限额''' request = TOPRequest('taobao.item.joint.img') request['num_iid'] = num_iid request['pic_path'] = pic_path if id!=None: request['id'] = id if position!=None: request['position'] = position if is_major!=None: request['is_major'] = is_major self.create(self.execute(request, session)['item_img']) return self
[docs]class PropImg(TOP): '''商品属性图片结构''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemImg, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate} self.fields = ['id','url','properties','position','created']
[docs] def joint_prop(self, properties, pic_path, num_iid, session, id=None, position=None): '''taobao.item.joint.propimg 商品关联属性图 - 关联一张商品属性图片到num_iid指定的商品中 - 传入的num_iid所对应的商品必须属于当前会话的用户 - 图片的属性必须要是颜色的属性,这个在前台显示的时候需要和sku进行关联的 - 商品图片关联在卖家身份和图片来源上的限制,卖家要是B卖家或订购了多图服务才能关联图片,并且图片要来自于卖家自己的图片空间才行 - 商品图片数量有限制。不管是上传的图片还是关联的图片,他们的总数不能超过一定限额,最多不能超过24张(每个颜色属性都有一张)''' request = TOPRequest('taobao.item.joint.prop') request['num_iid'] = num_iid request['pic_path'] = pic_path request['properties'] = properties if id!=None: request['id'] = id if position!=None: request['position'] = position self.create(self.execute(request, session)['prop_img']) return self
[docs] def delete(self, id, num_iid, session): '''taobao.item.propimg.delete 删除属性图片 删除propimg_id 所指定的商品属性图片 传入的num_iid所对应的商品必须属于当前会话的用户 propimg_id对应的属性图片需要属于num_iid对应的商品''' request = TOPRequest('taobao.item.propimg.delete') request['id'] = id request['num_iid'] = num_iid self.create(self.execute(request, session)['prop_img']) return self
[docs] def upload(self, num_iid, properties, session, id=None, image=None, position=None): '''taobao.item.propimg.upload 添加或修改属性图片 添加一张商品属性图片到num_iid指定的商品中 传入的num_iid所对应的商品必须属于当前会话的用户 图片的属性必须要是颜色的属性,这个在前台显示的时候需要和sku进行关联的 商品属性图片只有享有服务的卖家(如:淘宝大卖家、订购了淘宝多图服务的卖家)才能上传 商品属性图片有数量和大小上的限制,最多不能超过24张(每个颜色属性都有一张)。''' request = TOPRequest('taobao.item.propimg.upload') request['num_iid'] = num_iid request['properties'] = properties if id!=None: request['id'] = id if position!=None: request['position'] = position if image!=None: request['image'] = image self.create(self.execute(request, session)['prop_img']) return self
[docs]class Video(TOP): '''商品视频关联记录''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Video, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate, 'modified':TOPDate} self.fields = ['id','video_id','url','created','modified','iid','num_iid']
[docs]class ItemCategory(TOP): '''商品查询分类结果''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemCategory, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.fields = ['category_id','count']
[docs]class ProductPropImg(TOP): '''产品属性图片''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ProductPropImg, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate, 'modified':TOPDate} self.fields = ['id','product_id','props','url','position','created','modified']
[docs] def delete(self, id, product_id, session): '''taobao.product.propimg.delete 删除产品属性图 1.传入属性图片ID 2.传入产品ID 删除一个产品的属性图片''' request = TOPRequest('taobao.product.propimg.delete') request['id'] = id request['product_id'] = product_id self.create(self.execute(request, session)['product_prop_img']) return self
[docs] def upload(self, product_id, props, image, session, id=None, position=None): '''taobao.product.propimg.upload 上传单张产品属性图片,如果需要传多张,可调多次 传入产品ID 传入props,目前仅支持颜色属性.调用taobao.itemprops.get.v2取得颜色属性pid, 再用taobao.itempropvalues.get取得vid;格式:pid:vid,只能传入一个颜色pid:vid串; 传入图片内容 注意:图片最大为2M,只支持JPG,GIF,如果需要传多张,可调多次''' request = TOPRequest('taobao.product.propimg.upload') request['product_id'] = product_id request['props'] = props request['image'] = image if id!=None: request['id'] = id if position!=None: request['position'] = position self.create(self.execute(request, session)['product_prop_img']) return self
[docs]class ProductImg(TOP): '''产品图片''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ProductPropImg, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate, 'modified':TOPDate} self.fields = ['id','product_id','url','position','created','modified']
[docs] def delete(self, id, product_id, session): '''taobao.product.img.delete 删除产品非主图 1.传入非主图ID 2.传入产品ID 删除产品非主图''' request = TOPRequest('taobao.product.img.delete') request['id'] = id request['product_id'] = product_id self.create(self.execute(request, session)['product_img']) return self
[docs] def upload(self, product_id, image, session, id=None, position=None, is_major=None): '''taobao.product.img.upload 上传单张产品非主图,如果需要传多张,可调多次 1.传入产品ID 2.传入图片内容 注意:图片最大为500K,只支持JPG,GIF格式,如果需要传多张,可调多次''' request = TOPRequest('taobao.product.img.upload') request['product_id'] = product_id request['image'] = image if id!=None: request['id'] = id if position!=None: request['position'] = position if is_major!=None: request['is_major'] = is_major self.create(self.execute(request, session)['product_img']) return self
[docs]class AfterSale(TOP): '''卖家设置售后服务对象''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(AfterSale, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'after_sales':AfterSale} self.fields = ['after_sales', 'after_sale_id','after_sale_name','after_sale_path']
[docs] def get(self, session): '''taobao.aftersale.get 查询用户售后服务模板 查询用户设置的售后服务模板,仅返回标题和id''' request = TOPRequest('taobao.aftersale.get') self.create(self.execute(request, session)) return self.after_sales
[docs]class ItemTemplate(TOP): '''宝贝详情页面信息''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemTemplate, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.fields = ['template_id','template_name','shop_type']
[docs]class ItemTemplates(TOP): def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemTemplate, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'item_template_list':ItemTemplate} self.fields = ['item_template_list']
[docs] def get(self, session): '''taobao.item.templates.get 获取用户宝贝详情页模板名称 查询当前登录用户的店铺的宝贝详情页的模板名称''' request = TOPRequest('taobao.item.templates.get') self.create(self.execute(request, session)) return self
[docs]class ItemSearch(TOP): '''商品搜索''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(ItemSearch, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'items':Item,'item_categories':ItemCategory} self.fields = ['items','item_categories']
[docs]class Product(TOP): '''产品结构''' def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Product, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'created':TOPDate, 'modified':TOPDate, 'product_imgs':ProductImg,'product_prop_imgs':ProductPropImg} self.fields = ['product_id','outer_id','created','tsc','cid','cat_name','props','props_str','binds_str','sale_props_str','collect_num','name','binds','sale_props','price','desc','pic_url','modified','product_imgs','product_prop_imgs','status','level','pic_path','vertical_market','customer_props','property_alias']
[docs] def add(self, cid, price, image, name, desc, major, market_time, property_alias, session, **kwargs): '''taobao.product.add 上传一个产品,不包括产品非主图和属性图片 获取类目ID,必需是叶子类目ID;调用taobao.itemcats.get.v2获取 传入关键属性,结构:pid:vid;pid:vid.调用taobao.itemprops.get.v2获取pid, 调用taobao.itempropvalues.get获取vid;如果碰到用户自定义属性,请用customer_props.''' request = TOPRequest('taobao.product.add') request['cid'] = cid request['price'] = price request['image'] = image request['name'] = name request['desc'] = desc request['major'] = major request['market_time'] = market_time request['property_alias'] = property_alias for k, v in kwargs.iteritems(): if k not in ('outer_id', 'props', 'binds', 'sale_props', 'customer_props', 'order_by', 'ww_status', 'post_free', 'location_state', 'location_city', 'is_3D', 'start_score', 'end_score', 'start_volume', 'end_volume', 'one_station', 'is_cod', 'is_mall', 'is_prepay', 'genuine_security', 'promoted_service', 'stuff_status', 'start_price', 'end_price', 'page_no', 'page_size', 'auction_flag', 'auto_post', 'has_discount', 'is_xinpin') and v==None: continue if k == 'location_state': k = 'location.state' if k == 'location_city': k = 'location.city' request[k] = v self.create(self.execute(request, session)['product']) return self
[docs] def get(self, fields=[], product_id=None, cid=None, props=None): '''taobao.product.get 获取一个产品的信息 两种方式查看一个产品详细信息: 传入product_id来查询 传入cid和props来查询''' request = TOPRequest('taobao.product.get') if not fields: fields = self.fields request['fields'] = fields if product_id!=None: request['product_id'] = product_id if cid!=None: request['cid'] = cid if props!=None: request['props'] = props self.create(self.execute(request)['product']) return self
[docs] def update(self, product_id, session, **kwargs): '''taobao.product.update 修改一个产品,可以修改主图,不能修改子图片 传入产品ID 可修改字段:outer_id,binds,sale_props,name,price,desc,image 注意:1.可以修改主图,不能修改子图片,主图最大500K,目前仅支持GIF,JPG 2.商城卖家产品发布24小时后不能作删除或修改操作''' request = TOPRequest('taobao.product.update') request['product_id'] = product_id for k, v in kwargs.iteritems(): if k not in ('outer_id', 'binds', 'sale_props', 'price', 'desc', 'image', 'name', 'major', 'native_unkeyprops') and v==None: continue request[k] = v self.create(self.execute(request, session)['product']) return self
[docs]class Products(TOP): def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None): super(Products, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT ) self.models = {'products':Product} self.fields = ['products', 'total_results']
[docs] def get(self, nick, fields=[], props=None, page_no=None, page_size=None): '''taobao.products.get 获取产品列表 根据淘宝会员帐号搜索所有产品信息 注意:支持分页,每页最多返回100条,默认值为40,页码从1开始,默认为第一页''' request = TOPRequest('taobao.products.get') request['nick'] = nick if not fields: product = Product() fields = product.fields request['fields'] = fields if props!=None: request['props'] = props if page_no!=None: request['page_no'] = page_no if page_size!=None: request['page_size'] = page_size self.create(self.execute(request)) return self.products
[docs] def search(self, fields=[], **kwargs): '''taobao.products.search 搜索产品信息 两种方式搜索所有产品信息(二种至少传一种): 传入关键字q搜索 传入cid和props搜索 返回值支持:product_id,name,pic_path,cid,props,price,tsc 当用户指定了cid并且cid为垂直市场(3C电器城、鞋城)的类目id时,默认只返回小二确认的产品。如果用户没有指定cid,或cid为普通的类目,默认返回商家确认或小二确认的产品。如果用户自定了status字段,以指定的status类型为准''' request = TOPRequest('taobao.products.search') if not fields: product = Product() fields = product.fields request['fields'] = fields for k, v in kwargs.iteritems(): if k not in ('q', 'cid', 'props', 'status', 'page_no', 'page_size', 'vertical_market') and v==None: continue request[k] = v self.create(self.execute(request)) return self.products