繁体   English   中英

为 Facebook Graph API 生成永不过期的令牌,以通过 Google Apps 脚本在 Instagram 商业帐户上发布

[英]Generate non-expiring token for Facebook Graph API to publish on Instagram Business Account via Google Apps Script

要使用 Google Apps 脚本在 Instagram 上发布照片,请按照以下步骤操作!

要生成短期令牌,我访问Graph API Explorer ,添加以下范围:

pages_show_list
instagram_basic
instagram_manage_comments
instagram_manage_insights
instagram_content_publish
pages_read_engagement
pages_manage_posts
public_profile

我单击生成访问令牌,然后转到访问令牌调试器,放置生成的令牌,滚动到页面底部并单击扩展访问令牌

使用这个长期存在的令牌,我添加到我的代码中并在我的 Instagram 商业帐户上发布图像:

function instapost(url_photo,txt_subtitle) {
  const access_token = 'XXXXXXXXXXXXX';
  const instagram_business_account = '123456789';
  const image = url_photo;
  const text = txt_subtitle;
  var formData = {
    'image_url': image,
    'caption': text,
    'access_token': access_token
  };
  var options = {
    'method' : 'post',
    'payload' : formData
  };
  const container = 'https://graph.facebook.com/v14.0/' + instagram_business_account + '/media';

  const response = UrlFetchApp.fetch(container, options);

  const creation = response.getContentText();
  var data = JSON.parse(creation);
  var creationId = data.id
  var formDataPublish = {
      'creation_id': creationId,
      'access_token': access_token
  };
  var optionsPublish = {
    'method' : 'post',
    'payload' : formDataPublish
  };
  const sendinstagram = 'https://graph.facebook.com/v14.0/' + instagram_business_account + '/media_publish';
  
  UrlFetchApp.fetch(sendinstagram, optionsPublish);
}

问题是每 2 个月我必须返回并再次执行这些手动步骤。

所以我尝试通过直接 url 调用直接生成短暂的令牌:

https://developers.facebook.com/docs/facebook-login/guides/access-tokens#usertokens

使用此值: 在此处输入图像描述

像这样:

const app_id = ...;
const app_secret = ...;
const url = 'https://graph.facebook.com/oauth/access_token' + 
  '?client_id=' + app_id + 
    '&client_secret=' + app_secret + 
      '&grant_type=client_credentials' +
        '&scope=pages_show_list,instagram_basic,instagram_manage_comments,instagram_manage_insights,instagram_content_publish,pages_read_engagement,pages_manage_posts,public_profile'

UrlFetchApp.fetch(url)

但是当通过调试器时,唯一存在的范围是public_profile

有没有什么方法可以让这个令牌拥有所有必要的范围而无需手动操作?

我做了很多研究,我总是回到同样的问题,因为通常使用是针对客户的,所以他们总是会登录并批准访问,生成范围,但在我的情况下,我不会登录在屏幕上,我只想自动化我在 Instagram 上发布的帖子。

附加信息:

有几个问题/答案:
https://stackoverflow.com/a/28418469/11462274
https://stackoverflow.com/a/21927690/11462274
https://stackoverflow.com/a/58878246/11462274

关于生成一个永恒的token,其实是有办法的,但是问题是,虽然是永恒的,但是有2个月的数据访问时间限制,所以反正2个月后对我来说就没用了,因为如果他无法访问数据,他将无法发布。

而且由于我没有要链接的公司,因此尝试从Meta Business Suite生成变得不可行,这不可能是唯一的方法,因为通过 Graph Explorer 访问令牌非常简单。

使用https://business.facebook.com/settings/system-users/ ,创建了一个永恒的令牌,但即使在生成令牌时检查所有释放标记的范围,它也只返回这些授权:

在此处输入图像描述

我将一步一步地解决这个问题,这个问题与使用来自 Facebook Graph API 的访问令牌在 Instagram 上发布照片有关。

假设您已经在此处创建了一个应用程序:
https://developers.facebook.com/apps/

带有此产品标记:

在此处输入图像描述

并链接到您的帐户,访问此页面:

https://business.facebook.com/settings/system-users/

在那里,您将添加一个新的系统用户,但请注意有一个非常重要的细节,将其添加为管理员访问权限

之后,您必须访问左侧菜单上的Applications选项卡,选择您已经创建的应用程序,然后单击Add People

选择您创建的管理员用户并选中所有现有的框,它们是:

开发应用程序
查看见解
测试申请
管理应用程序

使用这些访问权限注册此用户后,返回“系统用户”页面,单击“生成新令牌”并检查所有必要的范围,甚至在我的问题开头。

由于我已经想阻止未来必要的范围,所以我将它们全部标记了。 现在在这里调试令牌时,它被永久释放并具有所有必要的范围:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM