Beispiel #1
0
def smart_optimize(request,
                   adgroup_id,
                   inner='',
                   executor='',
                   cfg='',
                   template='smart_optimize.html'):
    try:
        adgroup = Adgroup.objects.get(shop_id=request.user.shop_id,
                                      adgroup_id=adgroup_id)
        adgroup.get_mobile_status()
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')
    if adgroup.mnt_type:
        return HttpResponseRedirect(
            reverse('adgroup_data', kwargs={'adgroup_id': adgroup_id}))
    # 获取用户自定义列
    custom_column = Account.get_custom_col(shop_id=request.user.shop_id)
    return render_to_response(template, {
        'adg': adgroup,
        'inner': inner,
        'executor': executor,
        'cfg': cfg,
        'body_class': 'like_table width100',
        'custom_column': custom_column
    },
                              context_instance=RequestContext(request))
Beispiel #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, '生成链接失败,请联系顾问')
Beispiel #3
0
def creative_optimization(request,
                          adgroup_id,
                          template="creative_optimization.html"):

    #     if request.user.shop_type == "C": # TODO zhongjinfeng 当B点的API搞定后全部切换回新版创意优化
    #         return HttpResponseRedirect(reverse("image_optimoze", kwargs = {'adgroup_id': adgroup_id}))

    try:
        shop_id = request.user.shop_id
        adgroup = Adgroup.objects.exclude('rpt_list').get(
            shop_id=shop_id, adgroup_id=adgroup_id)
        adgroup.get_creative_rpt()
        creatives = Creative.objects.filter(
            shop_id=shop_id, adgroup_id=adgroup_id).bind_data(rpt_days=7)
        for creative in creatives:
            creative.rpt_days = 7
            category_list, series_cfg_list = get_trend_chart_data(
                data_type=3, rpt_list=creative.snap_list)
            creative.category_list = category_list
            creative.series_cfg_list = json.dumps(series_cfg_list)
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')
    #    if adgroup.mnt_type:
    #        return render_to_error(request, '该宝贝已经由系统自动托管,请选择其他宝贝')
    return render_to_response(template, {
        'adg': adgroup,
        'creatives': creatives
    },
                              context_instance=RequestContext(request))
Beispiel #4
0
def adgroup_health_check(request, adgroup_id=0):
    """推广组健康检查"""
    try:
        adg = Adgroup.objects.get(shop_id=request.user.shop_id,
                                  adgroup_id=int(adgroup_id))
    except Exception, e:
        log.info('error is %s.' % e)
        return render_to_error(request, '系统未存在该推广宝贝。')
Beispiel #5
0
def adgroup_history(request, adgroup_id, template='adgroup_history.html'):
    shop_id = int(request.user.shop_id)
    try:
        adg = Adgroup.objects.get(shop_id=shop_id, adgroup_id=int(adgroup_id))
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')
    return render_to_response(template, {'adg': adg},
                              context_instance=RequestContext(request))
Beispiel #6
0
def select_keyword(request, select_type, template='select_keyword.html'):
    shop_id = int(request.user.shop_id)
    adgroup_id = int(request.GET.get('adgroup_id'))
    try:
        adgroup = Adgroup.objects.get(shop_id=shop_id, adgroup_id=adgroup_id)
        if adgroup.mnt_type > 0 and adgroup.use_camp_limit:
            adgroup.limit_price_max = MntCampaign.objects.get(
                shop_id=shop_id, campaign_id=adgroup.campaign_id).max_price
        elif adgroup.limit_price and adgroup.limit_price > 5:
            adgroup.limit_price_max = adgroup.limit_price
        else:
            adgroup.limit_price_max = 500
        adgroup.init_limit_price = adgroup.limit_price_max
        item = Item.objects.get(shop_id=shop_id, item_id=adgroup.item_id)
        cat_id = item.cat_id
    except DoesNotExist:
        return render_to_error(request, '该宝贝可能不存在或者下架,请尝试同步数据')
    #     keyword_count = Keyword.objects.filter(shop_id = shop_id, audit_status = 'audit_pass', adgroup_id = adgroup_id).count()
    keyword_count = Keyword.objects.filter(shop_id=shop_id,
                                           adgroup_id=adgroup_id).count()

    elemword_dict = {}
    prdtword_list = [word for word, hot in item.get_prdtword_hot_list()]
    decorate_word_list = item.get_decorate_word_list()
    decorate_word_list.extend(item.sale_word_list)
    decorate_word_list = [word for word in decorate_word_list if len(word) > 1]

    elemword_dict['prdtword_list'] = prdtword_list
    elemword_dict['dcrtword_list'] = decorate_word_list

    elemword_dict['prdtword_str'] = '\n'.join(prdtword_list[:5])
    decorate_word_list = list(
        set(decorate_word_list) - set(Const.WEB_PROMOTION_WORDS))
    elemword_dict['dcrtword_str'] = '\n'.join(decorate_word_list[:10])
    prmtword_list = []
    for prmtword in Const.WEB_PROMOTION_WORDS:
        if prmtword in item.title:
            prmtword_list.append(prmtword)
    elemword_dict['prmtword_str'] = '\n'.join(prmtword_list[:5])
    elemword_dict['brandword_list'] = item.get_S_label
    elemword_dict['sale_word_list'] = item.get_H_label

    data = {
        'adg': adgroup,
        'adgroup': adgroup,
        'cat_id': cat_id,
        'select_type': select_type,
        'keyword_count': keyword_count,
        'elemword_dict': elemword_dict,
    }

    # 为了提高选词的速度,这里直接通知worker赶紧准备数据,用户可能马上就要来选词了,请提前准备好
    return render_to_response(template,
                              data,
                              context_instance=RequestContext(request))
Beispiel #7
0
def adgroup_data(request, adgroup_id, template='mnt_adgroup_data.html'):
    try:
        adgroup = Adgroup.objects.get(shop_id=request.user.shop_id,
                                      adgroup_id=adgroup_id)
        adgroup.get_mobile_status()  # 获取当前的移动平台状态及折扣
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')
    # 如果宝贝是长尾计划则查询关键词限价
    if adgroup.use_camp_limit:
        try:
            camp = MntCampaign.objects.get(shop_id=request.user.shop_id,
                                           campaign_id=adgroup.campaign_id)
            adgroup.limit_price = camp.max_price
            adgroup.yd_limit_price = camp.real_mobile_max_price
        except DoesNotExist, e:
            log.error('get mnt camp max_price error %s' % e)
Beispiel #8
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, '生成链接失败,请联系顾问')
Beispiel #9
0
def deleted_keyword(request, adgroup_id, template='deleted_keyword.html'):
    shop_id = int(request.user.shop_id)
    try:
        adgroup = Adgroup.objects.get(shop_id=request.user.shop_id,
                                      adgroup_id=adgroup_id)
        if adgroup.mnt_type in [1, 3]:
            adgroup.limit_price_max = MntCampaign.objects.get(
                shop_id=shop_id, campaign_id=adgroup.campaign_id).max_price
        elif adgroup.limit_price and adgroup.limit_price > 5:
            adgroup.limit_price_max = adgroup.limit_price
        else:
            adgroup.limit_price_max = 500
        adgroup.init_limit_price = adgroup.limit_price_max
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')
    #     if adgroup.mnt_type:
    #         return render_to_error(request, '该宝贝已经由系统自动托管,请选择其他宝贝')

    return render_to_response(template, {'adg': adgroup},
                              context_instance=RequestContext(request))
Beispiel #10
0
def image_optimize(request, adgroup_id):
    shop_id = request.user.shop_id
    adgroup_id = int(adgroup_id)
    yesterday = datetime_2string(dt=datetime.datetime.today() -
                                 datetime.timedelta(days=1),
                                 fmt='%Y-%m-%d')
    seven_day = datetime_2string(dt=datetime.datetime.today() -
                                 datetime.timedelta(days=7),
                                 fmt='%Y-%m-%d')
    start_date = str(request.GET.get('s', seven_day))
    end_date = str(request.GET.get('e', yesterday))
    date_text = '%s 至 %s' % (start_date[5:], end_date[5:])
    if start_date == end_date:
        date_text = start_date[5:]

    try:
        adgroup = Adgroup.objects.get(shop_id=shop_id, adgroup_id=adgroup_id)
        adgroup.get_creative_rpt()
        adgroup.rpt_list = adgroup.Report.get_snap_list(
            {
                'shop_id': shop_id,
                'adgroup_id': adgroup_id
            },
            start_date=start_date,
            end_date=end_date)
    except DoesNotExist:
        return render_to_error(request, '该宝贝已经被删除,请返回页面重新操作')

    creative_list = list(
        Creative.objects.filter(shop_id=shop_id,
                                adgroup_id=adgroup_id).order_by('create_time'))

    custom_creative_list = list(
        CustomCreative.objects.filter(
            shop_id=shop_id, adgroup_id=adgroup_id).order_by('create-time'))
    crt_rpt_dict = Creative.Report.get_summed_rpt(
        {
            'shop_id': shop_id,
            'adgroup_id': adgroup_id
        },
        start_date=start_date,
        end_date=end_date)

    # 获取类目点击率
    if adgroup.category_ids:
        g_cat_ctr = int(
            CatStatic.get_market_data_8id(
                cat_id=adgroup.category_ids.split(' ')[0]).get('ctr', '0'))

    cmp_ctr = g_cat_ctr * 0.8

    empty_rpt = Creative.Report()
    for creative in creative_list:
        creative.qr = crt_rpt_dict.get(creative.creative_id, empty_rpt)
        creative.show_ww_class = (
            int(creative.qr.ctr) == 0 or
            (cmp_ctr and creative.qr.ctr < cmp_ctr)) and 'dib' or 'hide'

    waiting_creative_list, complete_creative_list = [], []
    for custom_creative in custom_creative_list:
        if custom_creative.status == 0:
            waiting_creative_list.append(custom_creative)
        else:
            custom_creative.qr = crt_rpt_dict.get(custom_creative.creative_id,
                                                  empty_rpt)
            custom_creative.show_ww_class = (
                int(custom_creative.qr.ctr) == 0 or
                (cmp_ctr
                 and custom_creative.qr.ctr < cmp_ctr)) and 'dib' or 'hide'
            complete_creative_list.append(custom_creative)

    # 获取商品主图
    tapi = get_tapi(shop_id=shop_id)
    item_img_list = CustomCreative.get_item_img_list(
        tapi=tapi, shop_id=shop_id, item_id_list=[adgroup.item_id])
    img_list = item_img_list and item_img_list[adgroup.item_id] or None

    return render_to_response('image_optimize.html', {
        'adg': adgroup,
        'creatives': creative_list,
        'waiting_creatives': waiting_creative_list,
        'complete_creatives': complete_creative_list,
        'img_list': img_list,
        'start_date': start_date,
        'end_date': end_date,
        'date_text': date_text
    },
                              context_instance=RequestContext(request))
Beispiel #11
0
def title_optimize(request, template='title_optimize.html'):
    shop_id = int(request.user.shop_id)
    try:
        adgroup_id = int(request.GET.get('adgroup_id', 0))
        adgroup = Adgroup.objects.get(shop_id=request.user.shop_id,
                                      adgroup_id=adgroup_id)
        item = Item.objects.get(shop_id=shop_id, item_id=adgroup.item_id)
        campaign = Campaign.objects.only('campaign_id', 'title').get(
            shop_id=shop_id, campaign_id=adgroup.campaign_id)
    except DoesNotExist:
        return render_to_error(request, '该宝贝可能不存在或者下架,请尝试同步数据')
    log.info('title_optimize shop_id=%s item_id=%s' %
             (request.user.shop_id, adgroup.item_id))

    update_flag = request.GET.get('update_flag') == "True"
    update_hot_flag = request.GET.get('update_hot_flag') == "True"

    # 品牌词
    item.brand_list = item.property_dict.get(u'品牌', [])

    # 属性词
    item.propword_hot_list = item.get_propword_hot_list(
        update_flag=update_flag, update_hot_flag=update_hot_flag)

    # 从缓存中取修饰词及其热度,并从中去掉促销词
    dcrtword_hot_list = item.get_dcrtword_hot_list(
        update_flag=update_flag, update_hot_flag=update_hot_flag)
    item.dcrtword_hot_list = [
        word_hot for word_hot in dcrtword_hot_list
        if word_hot[0] not in Const.WEB_PROMOTION_WORDS
    ]

    # 产品词
    item.prdtword_hot_list = item.get_prdtword_hot_list(
        update_flag=update_flag, update_hot_flag=update_hot_flag)

    # 标题词根字符串
    title_word_str = ','.join(item.pure_title_word_list)

    # 标题优化周期为7天
    optimize_prompt = ''
    update_convwrod_flag = 0
    if item.title_optimize_time:
        delta_days = (datetime.date.today() -
                      item.title_optimize_time.date()).days
        if delta_days == 0:
            optimize_prompt = u'亲,您今天已优化过标题,建议7天后再优化。'
        elif delta_days < 7:
            optimize_prompt = u'亲,您%s天前已优化过标题,建议%s天后再优化。' % (delta_days,
                                                             7 - delta_days)
        else:
            optimize_prompt = u'亲,您上次优化这个宝贝标题的时间是:%s。' % item.title_optimize_time.strftime(
                '%Y-%m-%d %H:%I:%S')
            update_convwrod_flag = 1

    return render_to_response(template, {
        'adg': adgroup,
        'item': item,
        'campaign': campaign,
        'title_word_str': title_word_str,
        'optimize_prompt': optimize_prompt,
        'WEB_PROMOTION_WORDS': Const.WEB_PROMOTION_WORDS,
        'flagship_prmtwords': Const.WEB_FLAGSHIP_PROMOTION_WORDS,
        'update_convwrod_flag': update_convwrod_flag,
    },
                              context_instance=RequestContext(request))
Beispiel #12
0
def mnt_campaign(request, campaign_id, template='mnt_campaign.html'):
    shop_id = int(request.user.shop_id)
    campaign_id = int(campaign_id)
    mnt_list = []
    mnt_campaign_dict = dict(
        MntCampaign.objects.filter(shop_id=shop_id).values_list(
            'campaign_id', 'mnt_type'))
    campaign_list = list(Campaign.objects.filter(shop_id=shop_id))
    mnt_desc_dict = dict(MNT_TYPE_CHOICES)
    campaign = None
    for camp in campaign_list:
        camp.mnt_type = mnt_campaign_dict.get(camp.campaign_id, 0)
        camp.mnt_name = mnt_desc_dict.get(camp.mnt_type, '').replace(
            '托管', '') if camp.mnt_type else '手动'
        mnt_list.append({
            'campaign_id': camp.id,
            'name': camp.title,
            'mnt_type_name': camp.mnt_name
        })
        if camp.id == campaign_id:
            campaign = camp
    if campaign is None:
        return render_to_error(request, "该计划不存在,请返回页面重新操作")

    snap_list = campaign.get_snap_list(rpt_days=7)
    start_time = None
    mnt_days = 0
    try:
        mnt_camp = MntCampaign.objects.get(shop_id=shop_id,
                                           campaign_id=campaign_id)
        campaign.optimize_time = mnt_camp.optimize_time and time_humanize(
            mnt_camp.optimize_time) or "0"
        campaign.mnt_type = mnt_camp.mnt_type
        campaign.max_num = mnt_camp.max_num
        campaign.max_price = '%.2f' % (mnt_camp.max_price / 100.0)
        campaign.mobile_max_price = '%.2f' % (mnt_camp.real_mobile_max_price /
                                              100.0)
        campaign.mnt_desc = mnt_camp.get_mnt_type_display()
        campaign.is_active = mnt_camp.is_active
        campaign.quick_optime = mnt_camp.quick_optime
        campaign.mnt_bid_factor = mnt_camp.mnt_bid_factor
        campaign.mnt_rt = mnt_camp.mnt_rt
        start_time = datetime_2string(mnt_camp.start_time, '%Y年%m月%d日')
        mnt_days = days_diff_interval(mnt_camp.start_time.date())
    except DoesNotExist:
        campaign.mnt_type = 0
        campaign.max_num = 0
        campaign.max_price = 0.00
        campaign.mobile_max_price = 0.00
        campaign.mnt_desc = "未托管计划"
        campaign.is_active = False
        campaign.quick_optime = datetime.datetime.now()
        campaign.mnt_bid_factor = 50
        campaign.mnt_rt = 0

    is_smooth = campaign.is_smooth and 1 or 0
    budget = '%.0f' % (campaign.budget / 100.0)

    from apps.web.utils import get_trend_chart_data
    category_list, series_cfg_list = get_trend_chart_data(data_type=2,
                                                          rpt_list=snap_list)
    snap_list.reverse()
    camp_dict = dict(
        Campaign.objects.filter(shop_id=shop_id).values_list(
            'campaign_id', 'title'))
    mnt_opter, _ = analysis_web_opter(request)
    return render_to_response(template, {
        'camp': campaign,
        'mnt_list': mnt_list,
        'snap_list': snap_list,
        'is_smooth': is_smooth,
        'budget': budget,
        'category_list': category_list,
        'series_cfg_list': json.dumps(series_cfg_list),
        'camp_dict': camp_dict,
        'mnt_opter': mnt_opter,
        'add_adgroup': campaign.mnt_type,
        'start_time': start_time,
        'mnt_days': mnt_days
    },
                              context_instance=RequestContext(request))