如何在触发式Google Apps Script中自动完成OAuth授权并调用Blogger API?
当然可以!用Blogger API完全能实现这个自动化发布的需求,而且流程和你之前用MailApp做的类似,我来给你拆解具体步骤和注意事项:
1. 先搞定OAuth2授权的持久化
你之前手动获取授权URL完成授权后,一定要把OAuth2的凭证(access token、refresh token)存在脚本属性里,这样触发器运行时才能自动调用API,不用每次手动授权。
修改你之前的OAuth2授权代码,在获取到有效token后,把它存起来:
// 假设你已经用OAuth2库拿到了token对象 const props = PropertiesService.getScriptProperties(); props.setProperty('bloggerOAuthToken', JSON.stringify(token));
后续调用API时,直接从脚本属性里读取即可;要是token过期了,OAuth2库还能自动用refresh token刷新,记得把刷新后的token再存回去。
2. 设置每日定时触发器
这步和你用MailApp时的操作几乎一样:
- 打开Google Apps Script编辑器,点击左侧的触发器图标(闹钟样式)
- 点击「添加触发器」,配置参数:
- 选择要运行的主函数(比如后面要写的
publishDailyPost) - 事件源选「时间驱动」
- 类型选「日计时器」,然后选你想要的每日运行时间
- 权限选「以我身份运行」(确保触发器能使用你之前授权的Blogger权限)
- 选择要运行的主函数(比如后面要写的
3. 读取Spreadsheet中的每日内容
和你用MailApp读取表格的逻辑一致,比如假设你的表格第一列是日期(格式YYYY-MM-DD),第二列是文章标题,第三列是文章内容:
function getTodayContent() { const ss = SpreadsheetApp.openById('你的表格ID'); // 或者用openByUrl const sheet = ss.getSheetByName('每日内容表'); const data = sheet.getDataRange().getValues(); const today = new Date().toISOString().split('T')[0]; // 转成YYYY-MM-DD格式 // 遍历找今日对应的行(跳过表头) for (let i = 1; i < data.length; i++) { if (data[i][0] === today) { return { title: data[i][1], content: data[i][2] }; } } return null; // 今日无内容 }
4. 调用Blogger API发布文章
拿到今日内容后,就可以用UrlFetchApp调用Blogger的发布接口了,记得带上之前存的OAuth2 token:
function publishDailyPost() { // 1. 获取今日内容 const todayContent = getTodayContent(); if (!todayContent) { Logger.log('今日无待发布内容'); return; } // 2. 获取OAuth2凭证 const props = PropertiesService.getScriptProperties(); const token = JSON.parse(props.getProperty('bloggerOAuthToken')); // 3. 调用Blogger API发布文章 const blogId = '你的Blogger博客ID'; // 可在Blogger后台设置中找到 const apiUrl = `https://www.googleapis.com/blogger/v3/blogs/${blogId}/posts`; const payload = JSON.stringify({ title: todayContent.title, content: `<div>${todayContent.content}</div>` // 内容转成HTML格式,方便Blogger渲染 }); const options = { method: 'POST', contentType: 'application/json', headers: { 'Authorization': `Bearer ${token.access_token}` }, payload: payload, muteHttpExceptions: true // 方便捕获错误信息 }; const response = UrlFetchApp.fetch(apiUrl, options); const responseData = JSON.parse(response.getContentText()); if (response.getResponseCode() === 200) { Logger.log(`文章发布成功!链接:${responseData.url}`); } else { Logger.log(`发布失败:${responseData.error.message}`); } // 4. 如果token刷新了,更新脚本属性里的凭证 if (token.access_token !== token.access_token) { // 根据OAuth2库实际返回判断token是否刷新 props.setProperty('bloggerOAuthToken', JSON.stringify(token)); } }
几个关键注意事项
- 权限范围:确保你OAuth2授权时的scope包含
https://www.googleapis.com/auth/blogger(发布文章需要这个权限) - HTML格式:Blogger API的
content字段需要是HTML格式,所以如果你的表格里是纯文本,记得简单包裹一下HTML标签(比如<p>) - 错误处理:可以加个邮件提醒,比如发布失败时用
MailApp.sendEmail通知自己,和你之前的MailApp逻辑结合起来
这个流程和你之前用MailApp自动发邮件的逻辑几乎一致,只是把发送邮件的步骤换成了调用Blogger API发布文章,完全可以实现你的需求!
内容的提问来源于stack exchange,提问作者user13338210
相关产品推荐
相关产品推荐

