如何在 Google Apps 脚本上请求 Reddit 的访问令牌
How to request access token for Reddit on Google Apps Script
我一直在尝试找出如何从 Google Apps 脚本中的 Reddit API 获取访问令牌。到目前为止,我编写了以下代码:
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_id
和 client_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
时,我能够使用此命令成功获取令牌:
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
请求转换为 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()));
}
我仍然收到{错误:'unsupported_grant_type'}。
任何使用 JavaScript 并且最好使用 Google Apps 脚本成功获取 Reddit 访问令牌的人都可以分享一些 suggestion/insight 吗?预先感谢您的回答!
我相信你的目标如下。
您想将以下 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 命令将数据作为表单数据发送。并且,使用基本授权。当这些反映到Google Apps Script时,它变成如下。
示例脚本:
在此脚本中,使用了您的值。
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 命令相同。
注:
- 在这个脚本中,它假设授权的值是正确的。请注意这一点。
参考:
我一直在尝试找出如何从 Google Apps 脚本中的 Reddit API 获取访问令牌。到目前为止,我编写了以下代码:
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_id
和 client_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
时,我能够使用此命令成功获取令牌:
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
请求转换为 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()));
}
我仍然收到{错误:'unsupported_grant_type'}。
任何使用 JavaScript 并且最好使用 Google Apps 脚本成功获取 Reddit 访问令牌的人都可以分享一些 suggestion/insight 吗?预先感谢您的回答!
我相信你的目标如下。
您想将以下 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 命令将数据作为表单数据发送。并且,使用基本授权。当这些反映到Google Apps Script时,它变成如下。
示例脚本:
在此脚本中,使用了您的值。
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 命令相同。
注:
- 在这个脚本中,它假设授权的值是正确的。请注意这一点。