Example #1
0
    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
Example #2
0
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, '生成链接失败,请联系顾问')
Example #3
0
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)
Example #4
0
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
Example #5
0
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
Example #6
0
 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中,已重试多次,如果出来还失败,则直接返回错误
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
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
Example #11
0
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
Example #12
0
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
Example #13
0
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
Example #14
0
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
Example #15
0
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
Example #16
0
    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
Example #17
0
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': ''}
Example #18
0
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': ''}
Example #19
0
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 ''
Example #20
0
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
Example #21
0
    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()
Example #22
0
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))
Example #23
0
 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)
Example #24
0
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
Example #25
0
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)
Example #26
0
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
                             })))
Example #27
0
 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))
Example #28
0
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, '生成链接失败,请联系顾问')
Example #29
0
 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))
Example #30
0
    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