def add_items_common(shop_id, campaign_id, new_item_dict): """给定item_title_list来添加宝贝""" item_arg_list, added_id_list, failed_item_dict = [], [], {} if new_item_dict: tapi = get_tapi(request.user) item_list = Item.get_item_by_ids(shop_id = shop_id, item_id_list = new_item_dict.keys(), tapi = tapi, transfer_flag = True) # 从淘宝获取标准的item数据 temp_item_dict = {} # 获取部分宝贝信息 for item in item_list: # 绑定创意标题 added_item = new_item_dict.get(item['_id'], {}) if not added_item: continue item.update({'adgroup': {'title': TitleTransfer.remove_noneed_words(added_item['title1']), 'img_url': added_item['img_url1']}, 'creative': {'title': TitleTransfer.remove_noneed_words(added_item['title2']), 'img_url': added_item['img_url2']}, }) item_arg_list.append(item) temp_item_dict.update({item['_id']:[item['pic_url'], item['title']]}) if item_arg_list: # 导入宝贝 added_id_list, error_msg_dict = add_adgroups(shop_id = shop_id, campaign_id = campaign_id, item_arg_list = item_arg_list, tapi = tapi, opter = opter, opter_name = opter_name) for item_id, error_msg in error_msg_dict.items(): temp_item_info = temp_item_dict.get(item_id, ('', '')) failed_item_dict.update({item_id:(temp_item_info[0], temp_item_info[1], error_msg)}) del temp_item_dict return added_id_list, failed_item_dict
def redirect_sale_link(request): """跳转到推广链接""" sale_link_id = int(request.GET.get('sale_link_id', -1)) a_id = int(request.GET.get('a_id', -1)) shop_id = request.user.shop_id nick = request.user.nick redirect_url = reverse('web_home') sale_link = SaleLink.objects.filter(id=sale_link_id) if sale_link: sale_link = sale_link[0] # 限制链接为指定活动 if a_id != -1: vaild_id_list = MainAds(shop_id=shop_id).get_showad_list() if a_id not in vaild_id_list: return render_to_limited(request, '对不起,您不符合该活动的条件') try: tapi = get_tapi(shop_id=shop_id) top_obj = tapi.fuwu_sale_link_gen(nick=nick, param_str=sale_link.param_str) if top_obj and hasattr(top_obj, 'url'): redirect_url = top_obj.url except Exception, e: log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e)) return render_to_error(request, '生成链接失败,请联系顾问')
def get_seller_cids(request): result_list = CacheAdpter.get(CacheKey.WEB_SHOP_SELLER_CIDS % request.user.shop_id, 'web', []) if not result_list: tapi = get_tapi(request.user) try: tobj = tapi.sellercats_list_get(nick = request.user.nick) except TopError, e: log.error("get_sellercats error, e=%s, shop_id=%s" % (e, request.user.shop_id)) return {'errMsg': '', 'cat_list': result_list} cat_list = [] # 有这些属性:cid, parent_cid, name, pic_url, sort_order, created, modified, type if hasattr(tobj, 'seller_cats') and hasattr(tobj.seller_cats, 'seller_cat'): for top_cat in tobj.seller_cats.seller_cat: cat_list.append({'cat_id': top_cat.cid, 'cat_name': top_cat.name, 'parent_cat_id': top_cat.parent_cid, 'sort_order': top_cat.sort_order}) cat_dict = {} child_cat_dict = collections.defaultdict(list) for cat in cat_list: if cat['parent_cat_id'] != 0: child_cat_dict[cat['parent_cat_id']].append(cat) else: cat_dict.update({cat['sort_order']: cat}) for order, cat in cat_dict.items(): if cat['cat_id'] in child_cat_dict: cat['child_cat_list'] = child_cat_dict[cat['cat_id']] else: cat['child_cat_list'] = [] result_list.append(cat) CacheAdpter.set(CacheKey.WEB_SHOP_SELLER_CIDS % request.user.shop_id, result_list, 'web', 60 * 10)
def add_keywords(shop_id, adgroup_id, kw_arg_list, tapi = None, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) result_mesg, added_keyword_list, repeat_word_list, record_list = Keyword.add_keywords_inner(shop_id = int(shop_id), adgroup_id = adgroup_id, kw_arg_list = kw_arg_list, tapi = tapi, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result_mesg, added_keyword_list, repeat_word_list
def delete_keywords(shop_id, campaign_id, kw_arg_list, tapi = None, data_type = 402, opter = 1, opter_name = ''): # kw_arg_list = [[adgroup_id, keyword_id, word, word_type, word_from, op_reason]] if not tapi: tapi = get_tapi(shop_id = shop_id) deleted_id_list, record_list = Keyword.delete_keywords_inner(shop_id = int(shop_id), campaign_id = campaign_id, kw_arg_list = kw_arg_list, tapi = tapi, data_type = data_type, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return deleted_id_list
def get_item_kw_current_order(user, item_id, word, ip): result_order = (word, 0, '', 0, 0, '') tapi = get_tapi(user) try: tobj = tapi.simba_tools_items_top_get(nick = user.nick, keyword = word, ip = ip) # 取得一个关键词的推广组排名列表 except TopError, e: log.error("tapi.simba_tools_items_top_get TopError, item_id=%s, word=%s, e=%s" % (item_id, word, e)) return (word, 0, '', 0, 0, '') # 在binder.py中,已重试多次,如果出来还失败,则直接返回错误
def update_campaign(shop_id, campaign_id, tapi = None, record_flag = True, opter = 1, opter_name = '', **para): if not tapi: tapi = get_tapi(shop_id = shop_id) result_list, msg_list, record_list = Campaign.update_campaign_inner(shop_id = int(shop_id), campaign_id = campaign_id, tapi = tapi, opter = opter, opter_name = opter_name, **para) if record_list and record_flag: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result_list, msg_list
def delete_adgroups(shop_id, adgroup_id_list, record_flag = True, tapi = None, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) deleted_id_list, cant_del_list, ztc_del_count, record_list, error_msg = Adgroup.delete_adgroups_inner(shop_id = int(shop_id), adgroup_id_list = adgroup_id_list, tapi = tapi, opter = opter, opter_name = opter_name) if record_list and record_flag: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return deleted_id_list, cant_del_list, ztc_del_count, error_msg
def update_custom_creative(tapi, shop_id, campaign_id, adgroup_id, item_id, creative_id, title, file_item, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) result, msg, record_list = CustomCreative.update_creative(tapi = tapi, shop_id = int(shop_id), campaign_id = campaign_id, adgroup_id = adgroup_id, num_iid = item_id, creative_id = creative_id, title = title, file_item = file_item, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result, msg
def add_adgroups(shop_id, campaign_id, item_arg_list, tapi = None, opter = 1, opter_name = ''): # 这里的item_arg_list每个item是个字典,包含了标准的item键值,还有额外的adg_title这个键 if not tapi: tapi = get_tapi(shop_id = shop_id) added_id_list, error_msg_dict, record_list = Adgroup.add_adgroups_inner(shop_id = int(shop_id), campaign_id = campaign_id, item_arg_list = item_arg_list, tapi = tapi, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return added_id_list, error_msg_dict
def add_custom_creative(tapi, shop_id, campaign_id, adgroup_id, num_iid, title, image, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) result, record_list = CustomCreative.add_creative(tapi, shop_id, campaign_id, adgroup_id, num_iid, title, image, opter, opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result
def delete_creative(tapi, shop_id, creative_id, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) result, record_list = Creative.delete_creative_inner(tapi = tapi, shop_id = int(shop_id), creative_id = creative_id, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result
def update_creative(tapi, shop_id, adgroup_id, creative_id, title, img_url, opter = 1, opter_name = ''): if not tapi: tapi = get_tapi(shop_id = shop_id) result, msg, record_list = Creative.update_creative_inner(tapi = tapi, shop_id = int(shop_id), adgroup_id = adgroup_id, creative_id = creative_id, title = title, img_url = img_url, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return result, msg
def update_adgroups(shop_id, adg_arg_dict, record_flag = True, tapi = None, opter = 1, opter_name = ''): # adg_dict形如{123456:{'online_status':'online'},231654:{'online_status':'offline'}} if not tapi: tapi = get_tapi(shop_id = shop_id) updated_id_list, del_id_list, record_list = Adgroup.update_adgroups_inner(shop_id = int(shop_id), adg_arg_dict = adg_arg_dict, tapi = tapi, opter = opter, opter_name = opter_name) if record_list and record_flag: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return updated_id_list, del_id_list
def update_keywords(shop_id, kw_arg_list, tapi = None, opter = 1, opter_name = ''): # kw_arg_list = [(campaign_id, adgroup_id, keyword_id, word, new_price, match_scope, old_price),] if not tapi: tapi = get_tapi(shop_id = shop_id) updated_id_list, deleted_id_list, record_list = Keyword.update_keywords_inner(shop_id = int(shop_id), kw_arg_list = kw_arg_list, tapi = tapi, opter = opter, opter_name = opter_name) if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return updated_id_list, deleted_id_list
def tapi(self): if not hasattr(self, '_tapi'): tapi = get_tapi(shop_id=self.shop_id) if not time_is_someday(self.api_valid_time): is_ok, _ = QNApp.test_api(tapi) if not is_ok: SessionCache.del_cache(self.shop_id) tapi = get_tapi(shop_id=self.shop_id) is_ok, reason = QNApp.test_api(tapi) if not is_ok: log.error("invalid tapi, error=%s" % reason) tapi = None if tapi: self.api_valid_time = datetime.datetime.now() self.save() self._tapi = tapi return self._tapi
def batch_forecast_rt_rank(request): """批量查排名""" adg_id = int(request.POST['adgroup_id']) keyword_id_list = request.POST.getlist('keyword_list[]') tapi = get_tapi(request.user) result_data = Keyword.batch_get_rt_kw_rank(tapi=tapi, nick=request.user.nick, adg_id=adg_id, kw_id_list=keyword_id_list) return {'data': result_data, 'errMsg': ''}
def forecast_rt_rank(request): """查排名""" adg_id = int(request.POST['adgroup_id']) keyword_id = int(request.POST['keyword_id']) tapi = get_tapi(request.user) result_data = Keyword.batch_get_rt_kw_rank(tapi=tapi, nick=request.user.nick, adg_id=adg_id, kw_id_list=[keyword_id]).get( str(keyword_id), {}) return {'data': result_data, 'errMsg': ''}
def modify_campaign_schedule(shop_id, campaign_id, ratio): tapi = get_tapi(shop_id=shop_id) def get_campaign_schedule(shop_id, campaign_id, tapi): try: result = tapi.simba_campaign_schedule_get(campaign_id=campaign_id) return result.campaign_schedule.schedule except TopError, e: log.error('get schedule error, shop_id=%s, campaign_id=%s, e=%s' % (shop_id, campaign_id, e)) return ''
def get_keywords_rankingforecast(request, dajax): '''预测排名''' kw_id_list = request.POST.getlist('kw_id_list[]') tapi = get_tapi(request.user) shop_id = int(request.user.shop_id) forecast_data = {} for kw_id in kw_id_list: prices = Keyword.get_keyword_rankingforecast(tapi, shop_id, int(kw_id)) dajax.script('PTQN.keyword_manage.call_back_forecast(%s, %s)' % (kw_id, json.dumps(prices))) return dajax
def __init__(self, shop_id): self.shop_id = shop_id self.appease_time = get_start_datetime( datetime.date.today()) - datetime.timedelta(days=SHOW_DAYS) self.dler, _ = Downloader.objects.get_or_create(shop_id=shop_id) self.tapi = None if (get_start_datetime(self.dler.api_valid_time) > get_start_datetime(datetime.date.today() - datetime.timedelta(days=2))): self.tapi = get_tapi(shop_id=self.shop_id) self.vaild_adgroup = self.bind_adgroup()
def vip_home(request): from apps.web.point import PointManager, Sign from apps.web.utils import get_isneed_phone shop_id = request.user.shop_id customer = request.user.customer tapi = get_tapi(shop_id=shop_id) request.user.shop.sync_from_top(tapi) # 判断是否激活 is_need_phone = get_isneed_phone(request.user) # 获取积分 point_count = CacheAdpter.get(CacheKey.WEB_JLB_COUNT % shop_id, 'web', 'no_cache') if point_count == 'no_cache': point_count = PointManager.refresh_points_4shop( shop_id=request.user.shop_id) # 区分积分等级 grade, next_grade, parcent = Account.get_grade_display(shop_id=shop_id) # 历史最高积分 history_highest_point = Account.get_history_highest_point(shop_id=shop_id) # 判断今天是否签到 is_sign_today = Sign.is_sign_today(shop_id=shop_id) get_attendance_day = Sign.get_attendance_day(shop_id=shop_id) # 判断并获取用户收货信息 info_dict = customer.perfect_info if customer else {} # 改代码新版并没有用到,需要注销掉 # 获取兑换话费的人数 # phone_cost20_num = PointManager.get_exchange_gift_count(gift_type = 'phone_cost20') + 500 # 这里直接加了500 # discount_num = PointManager.get_exchange_gift_count(type = 'discount') data = { 'point_count': point_count, 'grade': grade, 'parcent': parcent, 'next_grade': next_grade, 'is_sign_today': is_sign_today, 'get_attendance_day': get_attendance_day, 'info_dict': info_dict, # 'phone_cost20_num': phone_cost20_num, # 'discount_num': discount_num, 'is_need_phone': is_need_phone, 'history_highest_point': history_highest_point } return render_to_response('vip_home.html', {'data': data}, context_instance=RequestContext(request))
def create_waiting_creative(cls, **args): '''创建一个等待投放的创意,img_ulr可以是一个图片地址,也可以是图片文件对象''' from apilib.binder import FileItem file_item = args['file_item'] if isinstance(file_item, (str, unicode)): args['img_url'] = file_item else: # 将图片上传到图片空间 shop_id = args['shop_id'] tapi = get_tapi(shop_id=shop_id) _, picture_path = cls.upload_picture(tapi, shop_id, file_item) args['img_url'] = picture_path return cls.__create_waiting_creative(**args)
def get_lastest_qscore(): save_dict = {} today = str(datetime.date.today()) for shop_id, adg_id_list in adg_data_dict.items(): tapi = get_tapi(shop_id = shop_id) for adg_id in adg_id_list: qscore_dict = Adgroup.get_new_qscore_byadgid(shop_id, adg_id, [], tapi) for _, qscore_info in qscore_dict.items(): qscore_info.update({'date':today}) save_dict.update({adg_id:qscore_dict}) print 'get %s\'s qscore OK' % today return save_dict
def get_top_agent_list(nick): '''获得店铺的淘宝直通车代理账号信息''' try: user = User.objects.get(nick=nick) except (User.DoesNotExist, User.MultipleObjectsReturned): return [] try: agent_list = [] tapi = get_tapi(user) top_objs = tapi.simba_customers_authorized_get(nick=nick) if hasattr(top_objs, 'nicks') and hasattr(top_objs.nicks, 'string'): for agent in top_objs.nicks.string: agent_list.append(agent) except TopError, e: log.info('e=%s' % e)
def upload_item_img(request): """上传商品主图""" from apilib.binder import FileItem error = "" item_id = request.POST.get('item_id', None) callback = request.POST.get('callback', None) shop_id = int(request.user.shop_id) tapi = tapi = get_tapi(shop_id=shop_id) if request.method == 'POST': file = request.FILES.get("item_img", None) if file.size > 1024 * 1024 * 10: error = "文件大小不能超过10M" r = re.compile('^image/*') if not r.match(file.content_type): error = "只能上传图片,如:jpg,gif,png" if error: return HttpResponse('<script>require([]).%s(%s)</script>' % (callback, json.dumps({'error': error}))) img_id, url = -1, "" if item_id and shop_id and tapi: try: file_item = FileItem(file.name, file.read()) img_id, url, err = CustomCreative.item_img_upload( tapi=tapi, shop_id=shop_id, num_iid=item_id, image=file_item) if err: error = err except Exception, e: error = "上传图片到淘宝服务器错误" else: error = "参数不全" return HttpResponse('<script>window.parent.%s(%s)</script>' % (callback, json.dumps({ 'error': error, 'img_id': img_id, 'url': url })))
def _download_campaign_rtrpt(cls, shop_id, date): '''下载推广计划实时报表数据''' rtrpt_dict = {} try: tapi = get_tapi(shop_id=shop_id) if tapi: top_result = tapi.simba_rtrpt_campaign_get(the_date=date) if top_result and hasattr(top_result, 'resultss') and top_result.resultss \ and hasattr(top_result.resultss, 'rt_rpt_result_entity_d_t_o') \ and top_result.resultss.rt_rpt_result_entity_d_t_o: for top_rtrpt_obj in top_result.resultss.rt_rpt_result_entity_d_t_o: rtrpt_dict.setdefault( int(top_rtrpt_obj.campaignid), []).append(cls.Parser.parse(top_rtrpt_obj)) except Exception, e: log.error('download camp realtime rpt FAILED, shop_id=%s, e=%s' % (shop_id, e))
def redirect_generate_link(request): """生成推荐链接""" shop_id = request.user.shop_id nick = request.user.nick template_id = int(request.GET.get('temp_id', 0)) order_temp = OrderTemplate.get_ordertemplate_byid(template_id) redirect_url = "" if order_temp: try: tapi = get_tapi(shop_id=shop_id) if order_temp.is_base: from apps.web.point import Renewal Renewal.add_point_record(shop_id=shop_id, template_id=order_temp.id) redirect_url = order_temp.generate_order_link(nick, tapi) except Exception, e: log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e)) return render_to_error(request, '生成链接失败,请联系顾问')
def _download_account_rtrpt(cls, shop_id, date): '''下载帐户实时实数''' rtrpt_dict = {} try: tapi = get_tapi(shop_id=shop_id) if tapi: top_result = tapi.simba_rtrpt_cust_get(the_date=date) if top_result and hasattr(top_result, 'results') and top_result.results \ and hasattr(top_result.results, 'rt_rpt_result_entity_d_t_o') \ and top_result.results.rt_rpt_result_entity_d_t_o: top_rtrpt_obj = top_result.results.rt_rpt_result_entity_d_t_o[ 0] top_rtrpt_obj.thedate = date.strftime( format='%Y-%m-%d %H:%M:%S') if top_rtrpt_obj: rtrpt_dict[shop_id] = [cls.Parser.parse(top_rtrpt_obj)] except Exception, e: log.error('download shop realtime rpt FAILED, shop_id=%s, e=%s' % (shop_id, e))
def update_waiting_creative(cls, id, shop_id, title, file_item, opter, opter_name): """更新排队中的创意""" from apilib.binder import FileItem from bson.objectid import ObjectId try: # 将图片上传到图片空间 tapi = get_tapi(shop_id=shop_id) _, picture_path = cls.upload_picture(tapi, shop_id, file_item) ccrt = ccrt_coll.find_one({"_id": ObjectId(id)}) ccrt_coll.update( {'_id': ObjectId(id)}, {'$set': { 'title': title, 'img_url': picture_path }}) if ccrt['title'] != title: detail_list = ['修改创意:%s --> %s' % (ccrt['title'], title)] else: detail_list = ['修改创意:%s' % (title)] adgroup = Adgroup.objects.get(shop_id=ccrt['shop_id'], adgroup_id=ccrt['adgroup_id']) record_list = [{ 'shop_id': ccrt['shop_id'], 'campaign_id': ccrt['campaign_id'], 'adgroup_id': ccrt['adgroup_id'], 'item_name': adgroup.item.title, 'detail_list': detail_list, 'op_type': 3, 'data_type': 303, 'opter': opter, 'opter_name': opter_name }] if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return True except Exception, e: log.exception(e) return False