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

如何在触发式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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:53:12