2013-10-11 3 views
8

트위터에서 140 개의 글자로만 글을 올릴 수 있습니다. 여기에는 tweeting하는 핸들이 포함됩니다 : @handle. 큰 그룹에서 트윗하려고 할 때 문제가 발생합니다. 내 농구 팀의 해결 방법을 만들려고 시도 할 때 트위터에서 짹짹 울 때 짹짹에서 텍스트를 가져 와서 팀의 각 사람이 처리하는 일련의 트윗을 보내는 트위터 봇을 만들려고합니다.TweetBot Retweeter failing authorization

코드가 this tutorial에서 시작되었습니다. 그럼 난 볼프람 알파 물건을 편집하고 시작하는이 코드를 내놓았다 : (키와 비밀 정말 xxxxx는이 arent)

/**  ScotsTeamRetweeter        **/ 
/**  =======================================   **/ 
/**  Written by John Holland  
/**  Taken from: Amit Agarwal @labnol on 10/09/2013 **/ 
/**  Tutorial link: http://www.labnol.org/?p=27902 **/ 

function start() {  
    Logger.log("Did actually start"); 

    // REPLACE THESE DUMMY VALUES  
    var TWITTER_CONSUMER_KEY  = "XXXXXX"; 
    var TWITTER_CONSUMER_SECRET = "XXXXXX"; 
    var TWITTER_HANDLE   = "ScotsTeam"; 

    // Store variables 
    ScriptProperties.setProperty("TWITTER_CONSUMER_KEY", TWITTER_CONSUMER_KEY); 
    ScriptProperties.setProperty("TWITTER_CONSUMER_SECRET", TWITTER_CONSUMER_SECRET); 
    ScriptProperties.setProperty("TWITTER_HANDLE",   TWITTER_HANDLE); 
    ScriptProperties.setProperty("MAX_TWITTER_ID",   0); 

    // Delete exiting triggers, if any 
    var triggers = ScriptApp.getScriptTriggers(); 
    for(var i=0; i < triggers.length; i++) { 
    ScriptApp.deleteTrigger(triggers[i]); 
    } 

    // Setup trigger to read Tweets every five minutes 
    ScriptApp.newTrigger("fetchTweets") 
      .timeBased() 
      .everyMinutes(1) 
      .create(); 
} 

function oAuth() { 
    var oauthConfig = UrlFetchApp.addOAuthService("twitter"); 
    oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token"); 
    oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token"); 
    oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize"); 
    oauthConfig.setConsumerKey(ScriptProperties.getProperty("TWITTER_CONSUMER_KEY")); 
    oauthConfig.setConsumerSecret(ScriptProperties.getProperty("TWITTER_CONSUMER_SECRET")); 
} 

function fetchTweets() { 
    oAuth(); 
    var twitter_handle = ScriptProperties.getProperty("TWITTER_HANDLE"); 

    var phrase = "lang:en+to:" + twitter_handle; 
    var search = "https://api.twitter.com/1.1/search/tweets.json?count=5&include_entities=false&result_type=recent&q="; 
    search = search + encodeString(phrase) + "&since_id=" + ScriptProperties.getProperty("MAX_TWITTER_ID");  

    var options = 
    { 
    "method": "get", 
    "oAuthServiceName":"twitter", 
    "oAuthUseToken":"always" 
    }; 

    try { 

    var result = UrlFetchApp.fetch(search, options);  
    if (result.getResponseCode() === 200) { 
     var data = Utilities.jsonParse(result.getContentText()); 
     if (data) { 
     var tweets = data.statuses; 
     for (var i=tweets.length-1; i>=0; i--) { 
      var question = tweets[i].text.replace(new RegExp("\@" + twitter_handle, "ig"), "");    
      var answer = "Looks Like it worked" 
      sendTweet(tweets[i].user.screen_name, tweets[i].id_str, answer); 
      Logger.log("Tweet should have sent");   
     } 
     } 
    } 
    } catch (e) { 
    Logger.log(e.toString()); 
    } 
} 

function sendTweet(user, reply_id, tweet) { 

    var options = 
    { 
    "method": "POST", 
    "oAuthServiceName":"twitter", 
    "oAuthUseToken":"always"  
    }; 

    var status = "https://api.twitter.com/1.1/statuses/update.json"; 

    status = status + "?status=" + encodeString("@" + user + " " + tweet); 
    status = status + "&in_reply_to_status_id=" + reply_id; 

    try { 
    var result = UrlFetchApp.fetch(status, options); 
    ScriptProperties.setProperty("MAX_TWITTER_ID", reply_id); 
    Logger.log(result.getContentText());  
    } 
    catch (e) { 
    Logger.log(e.toString()); 
    } 
} 

function encodeString (q) { 
    // Update: 09/06/2013 
    // Google Apps Script is having issues storing oAuth tokens with the Twitter API 1.1 due to some encoding issues. 
    // Hence this workaround to remove all the problematic characters from the status message. 

    var str = q.replace(/\(/g,'{').replace(/\)/g,'}').replace(/\[/g,'{').replace(/\]/g,'}').replace(/\!/g, '|').replace(/\*/g, 'x').replace(/\'/g, ''); 
    return encodeURIComponent(str); 

// var str = encodeURIComponent(q); 
// str = str.replace(/!/g,'%21'); 
// str = str.replace(/\*/g,'%2A'); 
// str = str.replace(/\(/g,'%28'); 
// str = str.replace(/\)/g,'%29'); 
// str = str.replace(/'/g,'%27'); 
// return str; 

} 

(나의 이해는) 바로 트위터 봇이를 게시하게해야이 코드 트위터에 올 때 "효과가있는 것처럼 보입니다"라고 말하는 트윗.

그러나 나는 이해하지 못하는 인증 문제가있는 것 같습니다. 이 이메일을 가장 많이받는 날 :

Your script, ScotsTeamRetweeter, has recently failed to finish successfully. A summary of the failure(s) is shown below. To configure the triggers for this script, or change your setting for receiving future failure notifications, click here. 

Summary: 

Error Message Count 
Authorization is required to perform that action. 18 
Details: 

Start Function Error Message Trigger End 
10/9/13 9:11 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:11 PM 
10/9/13 9:12 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:12 PM 
10/9/13 9:13 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:13 PM 
10/9/13 9:14 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:14 PM 
10/9/13 9:15 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:15 PM 
10/9/13 9:16 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:16 PM 
10/9/13 9:17 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:17 PM 
10/9/13 9:18 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:18 PM 
10/9/13 9:19 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:19 PM 
10/9/13 9:20 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:20 PM 
10/9/13 9:21 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:21 PM 
10/9/13 9:22 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:22 PM 
10/9/13 9:23 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:23 PM 
10/9/13 9:24 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:24 PM 
10/9/13 9:25 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:25 PM 
10/9/13 9:26 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:26 PM 
10/9/13 9:27 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:27 PM 
10/9/13 9:28 PM fetchTweets Authorization is required to perform that action. time-based 10/9/13 9:28 PM 

봇을 수정하려면 어떻게해야합니까?

+0

'fetchTweets'을 수동으로 호출하고 @ br-araujo가 권한을 부여한 것으로 인증 한 후에 작동합니까? Btw, 내가 먼저 테스트하고 작동하는 경우 트리거를 설정하는 것이 좋습니다 ... 또한 오류에 대한 로그를 참조하십시오 ... btw. 당신은 현재 매분마다 실행되는 트리거를 정의했습니다. 아마 5 분마다 바꾸기를 원할 것입니다. 이 줄에서'var answer = "보이는 것 같아요"'종료하는 세미콜론이 없습니다 ... – Taifun

답변

1

스크립트 편집기로 가서 함수를 직접 호출해야합니다. (재생 버튼). 그 후에 당신에게 인증 화면을 보여줄 것이고 그 후에 모든 것이 괜찮을 것입니다.

+0

나는 그 일을했지만 여전히 진전이 없습니다 ... –

+0

재생 버튼을 클릭 했습니까? –