You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Google Apps Script实现Snapchat发布平台身份验证并下载数据?

用Google Apps Script访问Snapchat发布仪表板的解决方案

咱们先来理清楚核心问题:Snapchat发布仪表板需要OAuth2身份验证(你提到的Google登录其实是Snapchat支持的第三方登录方式,本质还是要通过OAuth2凭证来获取访问权限),普通的HTTP请求脚本没有处理这个验证流程,所以肯定没法直接访问页面数据。下面给你两种可行的方案,优先推荐官方API的方式,更稳定合规。

方案一:使用Snapchat官方Marketing API(强烈推荐)

Snapchat提供了官方的Marketing API,专门用来获取发布仪表板的媒体数据和报表,这比直接爬网页靠谱多了,既符合平台规则,也不用担心页面结构变化导致脚本失效。

步骤拆解:

  1. 注册开发者账号并创建应用
    • 先去Snapchat开发者平台注册账号,创建一个新应用,拿到你的Client ID和Client Secret。
  2. 在GAS中配置OAuth2服务
    • 打开GAS编辑器,先添加OAuth2库:点击「资源」→「库」,输入库ID 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,选择最新版本保存。
    • 然后编写OAuth2服务配置代码:
      function getSnapchatOAuthService() {
        return OAuth2.createService('Snapchat')
          .setAuthorizationBaseUrl('https://accounts.snapchat.com/login/oauth2/authorize')
          .setTokenUrl('https://accounts.snapchat.com/login/oauth2/access_token')
          .setClientId('你的Client ID')
          .setClientSecret('你的Client Secret')
          .setCallbackFunction('authCallback')
          .setPropertyStore(PropertiesService.getUserProperties())
          .setScope('snapchat-marketing-api'); // 按需调整权限,比如需要媒体访问就加对应scope
      }
      
      function authCallback(request) {
        const service = getSnapchatOAuthService();
        const authorized = service.handleCallback(request);
        return HtmlService.createHtmlOutput(authorized ? '授权成功!可以关闭这个页面了' : '授权失败,请重试');
      }
      
  3. 获取图片和CSV数据
    • 下载图片:调用API获取媒体列表,然后把图片保存到Google Drive
      function downloadSnapchatImages() {
        const service = getSnapchatOAuthService();
        if (!service.hasAccess()) {
          const authUrl = service.getAuthorizationUrl();
          Logger.log('请访问这个URL授权:' + authUrl);
          return;
        }
      
        // 调用媒体API获取图片数据
        const response = UrlFetchApp.fetch('https://adsapi.snapchat.com/v1/media', {
          headers: { 'Authorization': 'Bearer ' + service.getAccessToken() }
        });
        const mediaList = JSON.parse(response.getContentText());
        const targetFolder = DriveApp.getFolderById('你的Drive文件夹ID');
      
        // 遍历下载图片
        mediaList.data.forEach(media => {
          if (media.type === 'IMAGE') {
            const imageBlob = UrlFetchApp.fetch(media.url).getBlob();
            targetFolder.createFile(imageBlob.setName(`${media.name}.png`));
          }
        });
      }
      
    • 获取报表数据:用API直接拉取数据,转成CSV保存
      function getSnapchatCSVReport() {
        const service = getSnapchatOAuthService();
        if (!service.hasAccess()) {
          const authUrl = service.getAuthorizationUrl();
          Logger.log('请先授权:' + authUrl);
          return;
        }
      
        // 构建报表请求参数,按需调整日期范围、报表类型
        const payload = {
          start_date: '2024-01-01',
          end_date: '2024-01-31',
          metrics: ['impressions', 'views'],
          dimensions: ['date']
        };
      
        const response = UrlFetchApp.fetch('https://adsapi.snapchat.com/v1/ads/reports', {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer ' + service.getAccessToken(),
            'Content-Type': 'application/json'
          },
          payload: JSON.stringify(payload)
        });
      
        const reportData = JSON.parse(response.getContentText());
        // 把JSON转成CSV格式(这里简化处理,你可以根据数据结构完善)
        const csvContent = 'Date,Impressions,Views\n' + reportData.data.rows.map(row => row.join(',')).join('\n');
        const csvBlob = Utilities.newBlob(csvContent, 'text/csv', 'snapchat_report.csv');
        DriveApp.getFolderById('你的Drive文件夹ID').createFile(csvBlob);
      }
      

方案二:网页抓取模拟登录(不推荐,仅应急用)

如果暂时没法用官方API,只能模拟浏览器登录来爬取页面,但这种方法风险高——Snapchat的反爬机制可能会封你的IP,而且页面结构一变脚本就失效。

核心步骤:

  1. 手动获取会话Cookie
    • 用浏览器登录https://publish.snapchat.com/,打开开发者工具(F12)→「网络」标签,找到主页面的请求,复制Cookie头里的所有内容。
  2. 在GAS中设置请求头访问页面
    • 编写脚本模拟浏览器请求,解析页面里的图片和导出CSV的链接:
      function fetchSnapchatDataManually() {
        const headers = {
          'Cookie': '这里替换成你复制的Cookie内容',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
        };
      
        // 获取仪表板页面
        const pageHtml = UrlFetchApp.fetch('https://publish.snapchat.com/', { headers }).getContentText();
        
        // 提取图片URL(需根据实际HTML结构调整正则或用XmlService解析)
        const imageUrls = pageHtml.match(/<img[^>]+src="(https:\/\/.*?\.png)"/g).map(match => {
          return match.match(/src="(.*?)"/)[1];
        });
      
        // 下载图片到Drive
        const targetFolder = DriveApp.getFolderById('你的Drive文件夹ID');
        imageUrls.forEach(url => {
          const imageBlob = UrlFetchApp.fetch(url, { headers }).getBlob();
          targetFolder.createFile(imageBlob.setName(url.split('/').pop()));
        });
      
        // 导出CSV(需要抓包获取导出请求的真实URL和参数)
        const csvResponse = UrlFetchApp.fetch('https://publish.snapchat.com/export/content-report', {
          method: 'POST',
          headers: headers,
          payload: {
            dateRange: 'LAST_30_DAYS',
            format: 'CSV'
          }
        });
        const csvBlob = csvResponse.getBlob().setName('snapchat_manual_report.csv');
        targetFolder.createFile(csvBlob);
      }
      

注意事项:

  • Cookie会过期,需要定期重新获取;
  • 一定要设置真实的User-Agent,避免被识别为爬虫;
  • 这种方法违反Snapchat的服务条款,有被封号的风险,谨慎使用。
最后提醒

优先选择官方API方案,不仅稳定,还能获得更丰富的数据。如果用网页抓取,一定要做好风险评估,随时准备调整脚本。

内容的提问来源于stack exchange,提问作者il_Cozzimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:30:43