能否通过Google Apps Script实现Snapchat发布平台身份验证并下载数据?
用Google Apps Script访问Snapchat发布仪表板的解决方案
咱们先来理清楚核心问题:Snapchat发布仪表板需要OAuth2身份验证(你提到的Google登录其实是Snapchat支持的第三方登录方式,本质还是要通过OAuth2凭证来获取访问权限),普通的HTTP请求脚本没有处理这个验证流程,所以肯定没法直接访问页面数据。下面给你两种可行的方案,优先推荐官方API的方式,更稳定合规。
方案一:使用Snapchat官方Marketing API(强烈推荐)
Snapchat提供了官方的Marketing API,专门用来获取发布仪表板的媒体数据和报表,这比直接爬网页靠谱多了,既符合平台规则,也不用担心页面结构变化导致脚本失效。
步骤拆解:
- 注册开发者账号并创建应用
- 先去Snapchat开发者平台注册账号,创建一个新应用,拿到你的
Client ID和Client Secret。
- 先去Snapchat开发者平台注册账号,创建一个新应用,拿到你的
- 在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 ? '授权成功!可以关闭这个页面了' : '授权失败,请重试'); }
- 打开GAS编辑器,先添加OAuth2库:点击「资源」→「库」,输入库ID
- 获取图片和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获取媒体列表,然后把图片保存到Google Drive
方案二:网页抓取模拟登录(不推荐,仅应急用)
如果暂时没法用官方API,只能模拟浏览器登录来爬取页面,但这种方法风险高——Snapchat的反爬机制可能会封你的IP,而且页面结构一变脚本就失效。
核心步骤:
- 手动获取会话Cookie
- 用浏览器登录
https://publish.snapchat.com/,打开开发者工具(F12)→「网络」标签,找到主页面的请求,复制Cookie头里的所有内容。
- 用浏览器登录
- 在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); }
- 编写脚本模拟浏览器请求,解析页面里的图片和导出CSV的链接:
注意事项:
- Cookie会过期,需要定期重新获取;
- 一定要设置真实的User-Agent,避免被识别为爬虫;
- 这种方法违反Snapchat的服务条款,有被封号的风险,谨慎使用。
最后提醒
优先选择官方API方案,不仅稳定,还能获得更丰富的数据。如果用网页抓取,一定要做好风险评估,随时准备调整脚本。
内容的提问来源于stack exchange,提问作者il_Cozzimo
相关产品推荐
相关产品推荐

