首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google脚本+ Twitter API - POST blocks/create

Google脚本+ Twitter API - POST blocks/create
EN

Stack Overflow用户
提问于 2017-12-28 18:41:19
回答 2查看 90关注 0票数 0

我收集了一些函数,并将它们捆绑到一个单独的Google Scripts文件中,用于Google Sheets。函数是:(1) getTwitterUserFollowers(id),(2) getTwitterUserFollowing(id),(3) getTwitterUserName(id)和(4) postBlockTwitterUser(id)。

虽然前3个函数工作得很好,但我不能让第4个函数工作( postBlockTwitterUser(id)。继续获取:

代码语言:javascript
运行
复制
"Request failed for https://api.twitter.com/1.1/blocks/create.json?screen_name=EladRatson returned code 403. Truncated server response: {"errors":[{"code":220,"message":"Your credentials do not allow access to this resource."

我做错了什么?

代码语言:javascript
运行
复制
var CONSUMER_KEY = 'M2VyQoC2571PyNAdHmOnGYxMj';
var CONSUMER_SECRET = '8yNJGrp2W0fDRQvXgbe8zOgQWC6lQOjrxhI7M6iogLbHyanor0';



function getTwitterUserFollowers(id) {

// Encode consumer key and secret
  var tokenUrl = "https://api.twitter.com/oauth2/token";
  var tokenCredential = Utilities.base64EncodeWebSafe(
   CONSUMER_KEY + ":" + CONSUMER_SECRET);

//  Obtain a bearer token with HTTP POST request
  var tokenOptions = {
    headers : {
      Authorization: "Basic " + tokenCredential,
     "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" 
    },
  method: "post",
  payload: "grant_type=client_credentials"
};

  var responseToken = UrlFetchApp.fetch(tokenUrl, tokenOptions);
  var parsedToken = JSON.parse(responseToken);
  var token = parsedToken.access_token;

// Authenticate Twitter API requests with the bearer token
  var apiUrl = 'https://api.twitter.com/1.1/users/show.json?screen_name='+id;
  var apiOptions = {
    headers : {
      Authorization: 'Bearer ' + token
    },
  "method" : "get"
  };

  var responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);
  var result = "";

  if (responseApi.getResponseCode() == 200) {

    // Parse the JSON encoded Twitter API response
    var tweets = JSON.parse(responseApi.getContentText());
    return tweets.followers_count
  }

  Logger.log(result);

}



function getTwitterUserFollowing(id) {

 // Encode consumer key and secret
 var tokenUrl = "https://api.twitter.com/oauth2/token";
 var tokenCredential = Utilities.base64EncodeWebSafe(
   CONSUMER_KEY + ":" + CONSUMER_SECRET);

 //  Obtain a bearer token with HTTP POST request
 var tokenOptions = {
   headers : {
     Authorization: "Basic " + tokenCredential,
     "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" 
   },
   method: "post",
   payload: "grant_type=client_credentials"
 };

 var responseToken = UrlFetchApp.fetch(tokenUrl, tokenOptions);
 var parsedToken = JSON.parse(responseToken);
 var token = parsedToken.access_token;

 // Authenticate Twitter API requests with the bearer token
 var apiUrl = 'https://api.twitter.com/1.1/users/show.json?screen_name='+id;
 var apiOptions = {
   headers : {
     Authorization: 'Bearer ' + token
   },
   "method" : "get"
 };

 var responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);

 var result = "";

 if (responseApi.getResponseCode() == 200) {

   // Parse the JSON encoded Twitter API response
   var tweets = JSON.parse(responseApi.getContentText());
   return tweets.friends_count

 }

 Logger.log(result);

}



function getTwitterUserName(id) {

 // Encode consumer key and secret
 var tokenUrl = "https://api.twitter.com/oauth2/token";
 var tokenCredential = Utilities.base64EncodeWebSafe(
   CONSUMER_KEY + ":" + CONSUMER_SECRET);

 //  Obtain a bearer token with HTTP POST request
 var tokenOptions = {
   headers : {
     Authorization: "Basic " + tokenCredential,
     "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" 
   },
   method: "post",
   payload: "grant_type=client_credentials"
 };

 var responseToken = UrlFetchApp.fetch(tokenUrl, tokenOptions);
 var parsedToken = JSON.parse(responseToken);
 var token = parsedToken.access_token;

 // Authenticate Twitter API requests with the bearer token
 var apiUrl = 'https://api.twitter.com/1.1/users/show.json?screen_name='+id;
 var apiOptions = {
   headers : {
     Authorization: 'Bearer ' + token
   },
   "method" : "get"
 };

 var responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);

 var result = "";

 if (responseApi.getResponseCode() == 200) {

   // Parse the JSON encoded Twitter API response
   var tweets = JSON.parse(responseApi.getContentText());
   return tweets.name

 }

 Logger.log(result);

}




function postBlockTwitterUser(id) {

 // Encode consumer key and secret
 var tokenUrl = "https://api.twitter.com/oauth2/token";
 var tokenCredential = Utilities.base64EncodeWebSafe(
   CONSUMER_KEY + ":" + CONSUMER_SECRET);

 //  Obtain a bearer token with HTTP POST request
 var tokenOptions = {
   headers : {
     Authorization: "Basic " + tokenCredential,
     "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" 
   },
   method: "post",
   payload: "grant_type=client_credentials"
 };

 var responseToken = UrlFetchApp.fetch(tokenUrl, tokenOptions);
 var parsedToken = JSON.parse(responseToken);
 var token = parsedToken.access_token;

 // Authenticate Twitter API requests with the bearer token
 var apiUrl = 'https://api.twitter.com/1.1/blocks/create.json?screen_name='+id;
 var apiOptions = {
   headers : {
     Authorization: 'Bearer ' + token
   },
   "method" : "post"
 };

 var responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);

 var result = "";

 if (responseApi.getResponseCode() == 200) {

   // Parse the JSON encoded Twitter API response
   var tweets = JSON.parse(responseApi.getContentText());
   return tweets.name

 }

 Logger.log(result);

}

EN

回答 2

Stack Overflow用户

发布于 2018-01-03 21:33:20

您正在尝试使用仅限应用程序的身份验证OAuth,但您需要使用带有用户令牌的3条腿的身份验证,才能使用块终结点。如果希望post到该端点,则需要修改代码以包含所有四个令牌(使用者密钥和密钥以及用户令牌和密钥)。

票数 0
EN

Stack Overflow用户

发布于 2018-01-16 06:50:26

@andy-piper您能修改上面的代码用于3条腿的身份验证吗?

我也在使用上面的脚本,但不知道如何使用它来发布推文。我有访问令牌和密钥,但不知道如何使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48005945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档