2017-12-28 38 views
0

일부 기능을 수집하여 Google 스프레드 시트에서 사용하는 하나의 Google Scripts 파일에 묶었습니다. 함수는 (1) getTwitterUserFollowers (id), (2) getTwitterUserFollowing (id), (3) getTwitterUserName (id) 및 (4) postBlockTwitterUser (id)입니다. 처음 3 개 기능이 완벽하게 작동하는 동안Google Scripts + Twitter API - POST 블록/만들기

, 나는) 4합니다 (postBlockTwitterUser (ID를 동작하지 않습니다 얻기에 유의하십시오.?

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

을 내가 뭘 잘못

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

 
}

답변

0

당신은 응용 프로그램 전용 인증의 OAuth를 사용하려는, 그러나 당신은 t를 사용하기 위해 사용자 토큰로 3 다리가 인증을 사용할 필요가 그는 엔드 포인트를 차단합니다. 해당 끝점에 게시하려는 경우 4 개의 토큰 (소비자 키와 암호 및 사용자 토큰 및 암호)을 모두 포함하도록 코드를 수정해야합니다.

0

@ andy-piper 3 다리 인증 용으로 위 코드를 수정할 수 있습니까?

나는 또한 위의 스크립트를 사용하고 있지만, 그것을 사용하여 트윗을 올리는 방법을 모른다. 나는 액세스 토큰과 비밀을 가지고 있지만 그것을 사용하는 방법을 모른다.