2017-12-28 8 views
0

Ich habe einige Funktionen gesammelt und sie in einer einzigen Google Scripts-Datei gebündelt, die ich mit Google Tabellen verwende. Die Funktionen sind: (1) getTwitterUserFollowers (id), (2) getTwitterUserFollowing (id), (3) getTwitterUserName (id) und der (4) postBlockTwitterUser (id).Google Scripts + Twitter-API - POST-Blöcke/erstellen

Während die ersten drei Funktionen einwandfrei funktionieren, kann ich nicht die 4. (die postBlockTwitterUser (id) zu arbeiten Keep on bekommen.?

"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." 

Was mache ich falsch

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); 
 

 
}

Antwort

0

Sie versuchen, App-Authentifizierung nur OAuth zu verwenden, aber Sie müssen 3-legged-Authentifizierung mit einem Benutzer-Token verwenden, um t zu verwenden, Er blockiert den Endpunkt. Sie müssen Ihren Code so ändern, dass alle vier Tokens (Consumer Key und Secret sowie User Token und Secret) enthalten sind, wenn Sie auf diesem Endpunkt posten möchten.

0

@ andy-piper können Sie bitte den obigen Code für die 3-beinige Authentifizierung ändern?

Ich benutze auch das oben genannte Skript, aber ich weiß nicht, wie man Tweets posten kann. Ich habe das Zugangstoken und das Geheimnis, weiß aber nicht, wie ich es benutzen soll.