2013-10-11 5 views
8

Auf Twitter können Sie nur Beiträge schreiben, die in 140 Zeichen passen. Dazu gehören die Griffe, an denen Sie twittern: @handle. Dies erzeugt ein Problem beim Versuch, in einer größeren Gruppe zu twittern. In einem Versuch, eine Workaround für mein Basketball-Team zu erstellen, versuche ich, einen Twitter-Bot zu erstellen, der, wenn getwittert wird, den Text aus dem Tweet nimmt und dann eine Reihe von Tweets @ jeder Handle auf das Team sendet.TweetBot Retweeter fehlgeschlagen Autorisierung

Ich begann mit Code von this tutorial. Dann bearbeiten ich die Wolfram Alpha Sachen aus und kam mit diesem Code zu starten mit: (Der Schlüssel und geheime Arent wirklich xxxxx)

/**  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; 

} 

(Mein Verständnis ist) Dieser Code soll nur das Twitter-Bot verursacht ein posten Tweet, das sagt "sieht wie es funktioniert" aus, wenn getwittert wurde.

Allerdings scheint ich ein Autorisierungsproblem zu haben, das ich nicht verstehe. Ich erhalte diese E-Mail die meisten Nächte:

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 

Was soll ich tun, um mein Bot zu beheben?

+0

funktioniert es nach manuellem Aufruf von 'fetchTweets' und Autorisierung als @br-araujo vorgeschlagen? Btw, ich empfehle zuerst zu testen und wenn es funktioniert, dann richte den Trigger ein ... siehe auch dein Protokoll für Fehler ... btw. Sie haben derzeit einen Auslöser definiert, der jede Minute ausgeführt wird, wahrscheinlich möchten Sie ihn stattdessen alle 5 Minuten ändern? In dieser Zeile 'var answer =" Sieht so aus, als hätte es funktioniert "' fehlt ein abschließendes Semikolon ... – Taifun

Antwort

1

Sie müssen in Ihren Skript-Editor gehen und Ihre Funktion direkt aufrufen. (Wiedergabeknopf). Danach wird Ihnen ein Autorisierungsbildschirm angezeigt und danach ist alles in Ordnung.

+0

Ich habe das gemacht und immer noch keinen Fortschritt ... –

+0

Was ist passiert, hast du in den Play-Button geklickt? –