百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值

58 次浏览次阅读
没有评论

百度OCPC推广之不同的页面跳转储存bd_vid值,以及自定义invite参数一并回传JS代码。

百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值

将SEM的URL手动埋点,存入localStorage,方便后面在使用中调用!

自动获取URL中传过来的 invite 和 bd_vid值

(bd_vid通常是百度OCPT推广时自动添加的参数)

/**
 * 
 * 百度埋点
 * 函数打包
 * 记录invite值 和 bd_vid值
 * 日期:2025-5-28 MAOMAO
 */
function handleSemTracking(options = {}) {
  const TRACK_KEYS = options.keys || ['invite', 'bd_vid'];
  const EXPIRE_MS = options.expireMs || 24 * 60 * 60 * 1000; // 默认1天

  // 辅助函数:获取 query 参数
  function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
  }

  // 存 key 对应的值
  function setKey(key, value) {
    localStorage.setItem(`sem_${key}`, value);
    localStorage.setItem(`sem_${key}_time`, Date.now().toString());
  }

  // 获取 key 对应的值(处理过期)
  function getKey(key) {
    const timestamp = localStorage.getItem(`sem_${key}_time`);
    if (!timestamp) return null;
    if ((Date.now() - parseInt(timestamp, 10)) > EXPIRE_MS) {
      clearKey(key);
      return null;
    }
    return localStorage.getItem(`sem_${key}`);
  }

  function clearKey(key) {
    localStorage.removeItem(`sem_${key}`);
    localStorage.removeItem(`sem_${key}_time`);
  }

  function init() {
    TRACK_KEYS.forEach(key => {
      const val = getQueryParam(key);
      if (val) {
        setKey(key, val);
      } else {
        getKey(key); // 触发过期检测
      }
    });
  }

  init();

  // 返回接口
  return {
    getAll: () => {
      const result = {};
      TRACK_KEYS.forEach(key => {
        const val = getKey(key);
        if (val) result[key] = val;
      });
      return result;
    },
    get: getKey,
    clear: () => {
      TRACK_KEYS.forEach(clearKey);
    }
  };
}

handleSemTracking(); // 先执行埋点追踪并存入 localStorage
//百度埋点 MAOMAO end

登陆状态-未登录

应用场景:将全局类名带有ann_button的<a>标签中 href属性值 增加invite和bd_vid参数

// 未登录状态 - 按钮拼接 invite 和 bd_vid 参数 MAOMAO
            const buttons = document.querySelectorAll('.ann_button');
            const inviteValue = localStorage.getItem('sem_invite');
            const bdVidValue = localStorage.getItem('sem_bd_vid');
            buttons.forEach(button => {
                const href = button.getAttribute('href');
                if (!href) return;

                try {
                    const url = new URL(href, window.location.origin); // 兼容相对路径
                    let changed = false;

                    if (inviteValue) {
                        url.searchParams.set('invite', inviteValue);
                        changed = true;
                    }

                    if (bdVidValue) {
                        url.searchParams.set('bd_vid', bdVidValue);
                        changed = true;
                    }

                    if (changed) {
                        button.setAttribute('href', url.toString());
                    }
                } catch (e) {
                    console.warn('无效 href,跳过该按钮:', href);
                }
            });
            // 未登录状态 - 按钮拼接 invite 和 bd_vid 参数 MAOMAO end

登陆状态-已登录

应用场景:将带callback参数里的url直接赋给ann_button类里的href地址

// 已登录状态-按钮跳转应用广场 MAOMAO
            const buttons = document.querySelectorAll('.ann_button');
            buttons.forEach(button => {
                const href = button.getAttribute('href');
                const url = new URL(href);
                const callback = url.searchParams.get('callback');

                if (callback) {
                // 构造新的 URL,包含 callback 后面的所有参数
                const newHref = new URL(callback);
                // 把原 href 中除了 callback 的其他参数都加到新 URL 上
                url.searchParams.forEach((value, key) => {
                    if (key !== 'callback') {
                    newHref.searchParams.set(key, value);
                    }
                });
                button.setAttribute('href', newHref.toString());
                }
            });
            //MAOMAO end

开发人员:李辉

应用场景:百度SEM投放手动埋点

后续的API回传可参考文档:百度API参考文档地址

百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值
正文完
 0
评论(没有评论)

真人堂

一言一句话
-「
最新文章
Qwen3-32B通过Clawdbot直连Web网关时如何支持WebSocket心跳保活?

Qwen3-32B通过Clawdbot直连Web网关时如何支持WebSocket心跳保活?

Qwen3-32B通过Clawdbot直连Web网关时如何支持WebSocket心跳保活? 你有没有遇到过这样...
Qwen3-32B部署教程里Clawdbot网关支持模型版本灰度发布与AB测试的操作流程是什么?

Qwen3-32B部署教程里Clawdbot网关支持模型版本灰度发布与AB测试的操作流程是什么?

Qwen3-32B部署教程:Clawdbot网关支持模型版本灰度发布与AB测试的操作流程 Qwen3-32B作...
ClawdBot政务应用中公文格式保持、政策术语库与多级审校流程集成该如何实现?

ClawdBot政务应用中公文格式保持、政策术语库与多级审校流程集成该如何实现?

ClawdBot政务应用中公文格式保持、政策术语库与多级审校流程集成该如何实现? 在政务办公数字化转型的浪潮中...
Clawdbot+Qwen3-32B惊艳效果里支持工具调用Tool Calling的真实API集成案例如何落地?

Clawdbot+Qwen3-32B惊艳效果里支持工具调用Tool Calling的真实API集成案例如何落地?

Clawdbot+Qwen3-32B惊艳效果里支持工具调用Tool Calling的真实API集成案例如何落地...
ClawdBot测试用例编写pytest脚本自动化验证多语言翻译正确性的方法有哪些?

ClawdBot测试用例编写pytest脚本自动化验证多语言翻译正确性的方法有哪些?

ClawdBot测试用例编写pytest脚本自动化验证多语言翻译正确性的方法有哪些? 在ClawdBot与Mo...
Clawdbot+Qwen3-32B实战案例如何构建自主可控的Web大模型对话系统?

Clawdbot+Qwen3-32B实战案例如何构建自主可控的Web大模型对话系统?

Clawdbot+Qwen3-32B实战案例:如何构建自主可控的Web大模型对话系统? 在AI落地越来越快的今...
Clawdbot生产环境部署中Qwen3:32B代理网关的Token安全策略与访问审计配置有哪些要点?

Clawdbot生产环境部署中Qwen3:32B代理网关的Token安全策略与访问审计配置有哪些要点?

Clawdbot生产环境部署中Qwen3:32B代理网关的Token安全策略与访问审计配置有哪些要点? 在Cl...
Qwen3-32B开源大模型部署时Clawdbot支持OpenTelemetry分布式追踪配置该如何开启?

Qwen3-32B开源大模型部署时Clawdbot支持OpenTelemetry分布式追踪配置该如何开启?

Qwen3-32B开源大模型部署时Clawdbot支持OpenTelemetry分布式追踪配置该如何开启? Q...
ClawdBot监控集成使用Prometheus+Grafana监控vLLM GPU利用率与QPS的效果如何?

ClawdBot监控集成使用Prometheus+Grafana监控vLLM GPU利用率与QPS的效果如何?

ClawdBot监控集成:Prometheus+Grafana监控vLLM GPU利用率与QPS的效果如何? ...
Clawdbot+Qwen3:32B多场景落地在教育问答、技术文档助手、内部客服中的应用如何?

Clawdbot+Qwen3:32B多场景落地在教育问答、技术文档助手、内部客服中的应用如何?

Clawdbot+Qwen3:32B多场景落地在教育问答、技术文档助手、内部客服中的应用如何? 在AI落地越来...
Clawdbot+Qwen3:32B部署教程中Web网关SSL双向认证安全加固的配置方法是什么?

Clawdbot+Qwen3:32B部署教程中Web网关SSL双向认证安全加固的配置方法是什么?

Clawdbot+Qwen3:32B部署教程:Web网关SSL双向认证安全加固配置方法详解 在本地部署Claw...