javascript - 如何在 Google Apps 脚本上请求 Reddit 的访问 token

标签 javascript google-apps-script reddit reddit-access-token

我一直在尝试弄清楚如何从 Reddit API 获取访问 token 在 Google Apps 脚本中。到目前为止,我编写了以下代码:

function main() {
  
  var username = 'myredditusername';
  var pwd = 'myredditpassword';
  var client_id = 'myredditclientid';
  var client_secret = 'myredditclientsecret';

  var access_token_url = 'https://www.reddit.com/api/v1/access_token';
  var api_url = 'https://oauth.reddit.com/';
  var user_agent = 'MySideProjectUserAgent';

var data = {
  'grant_type': 'password',
  'username': username,
  'password': pwd
};

var options = {
  'method' : 'post',
  'contentType': 'application/json',
  'payload' : JSON.stringify(data),
  'headers': {'User-Agent': user_agent},
  // what do I enter here to pass my client_id and client_secret?    
};

var resp = UrlFetchApp.fetch(access_token_url, options);
console.log(resp.getContentText());
}

运行上面的代码会收到如下错误(这并不奇怪,因为我仍然需要弄清楚如何传入我的 client_idclient_secret):

Exception: Request failed for https://www.reddit.com returned code 401. Truncated server response: {"message": "Unauthorized", "error": 401} (use muteHttpExceptions option to examine full response)

当使用 curl 时,我能够使用以下命令成功获取 token :

curl -X POST -A 'KeywordTrackAgent' -d "grant_type=password&username=myredditusername&password=myredditpassword" --user 'client_id:client_secret' https://www.reddit.com/api/v1/access_token

从 ( example post) 开始,我想如果我要将此 curl 请求转换为 POST 请求,我需要添加 Authorization 字段到我的 headers 参数,格式如下:

function main() {
  
  var username = 'myredditusername';
  var pwd = 'myredditpassword';
  var client_id = 'myredditclientid';
  var client_secret = 'myredditclientsecret';

  var access_token_url = 'https://www.reddit.com/api/v1/access_token';
  var api_url = 'https://oauth.reddit.com/';
  var user_agent = 'MySideProjectUserAgent';

var data = {
  'grant_type': 'password',
  'username': username,
  'password': pwd
};

var options = {
  'method' : 'post',
  'contentType': 'application/json',
  'payload' : JSON.stringify(data),
  'headers': {
    'User-Agent': user_agent,
    // Below, I decided to encode my client_id and client_secret in base64 with the prefix 'Basic '
    'Authorization': 'Basic clientIdAndClientSecretInBase64',
    },
};

var resp = UrlFetchApp.fetch(access_token_url, options);
console.log(JSON.parse(resp.getContentText()));
}

我仍然收到 { error: 'unsupported_grant_type' }。

任何人 - 谁已经使用 JavaScript 成功获取 Reddit 访问 token ,最好是使用 Google Apps 脚本 - 是否可以就此分享一些建议/见解?预先感谢您的回答!

最佳答案

我相信你的目标如下。

  • 您想将以下 curl 命令转换为 Google Apps 脚本。

      curl -X POST -A 'KeywordTrackAgent' -d "grant_type=password&username=myredditusername&password=myredditpassword" --user 'client_id:client_secret' https://www.reddit.com/api/v1/access_token
    

此 curl 命令将数据作为表单数据发送。并且,使用基本授权。当这些反射(reflect)到 Google Apps 脚本中时,它变成如下。

示例脚本:

在此脚本中,将使用您的值。

function main() {
  var username = 'myredditusername';
  var pwd = 'myredditpassword';
  var client_id = 'myredditclientid';
  var client_secret = 'myredditclientsecret';
  var access_token_url = 'https://www.reddit.com/api/v1/access_token';

  var data = {
    'grant_type': 'password',
    'username': username,
    'password': pwd
  };
  var options = {
    'method': 'post',
    'payload': data,
    'headers': {
      'Authorization': 'Basic ' + Utilities.base64Encode(`${client_id}:${client_secret}`),
    },
  };
  var resp = UrlFetchApp.fetch(access_token_url, options);
  console.log(JSON.parse(resp.getContentText()));
}
  • 在此脚本中,请求与 curl 命令相同。

备注:

  • 在此脚本中,它假定授权值是正确的。请注意这一点。

引用:

关于javascript - 如何在 Google Apps 脚本上请求 Reddit 的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67341137/

相关文章:

google-apps-script - 事件中的 URLfetch 失败

javascript - 监听 Reddit 增强套件中的事件

javascript - 将 JSON 树导航到 Reddit API 中的数据

google-apps-script - 授权我创建的 Google 脚本时遇到问题

google-apps-script - Google Sheets 在不断变化的工作表数量上对单元格求和

javascript - 检查用户是否分配给特定插槽

javascript - 试图制作一个可点击的表格来更改无序列表中的值

python - 调用 `praw.helpers` 导致 AttributeError : 'module' object has no attribute 'helpers'

javascript - 将对象转换为数组 Angular

javascript - jQuery .submit() 未触发