2017-11-11 8 views
0

Also das ist mein grundlegendes Twitter-Bot, den Knoten verwendet von @ Referenzen für Suchbegriffe zu suchen und animiert Gifs dann mit, dass gefunden:Probleme zu Heroku Bereitstellung

//Dependencies 
const Twitter = require('twitter'); 
const http = require('http'); 
const config = require('./config.js'); 
const giphyApiKey = (process.env.apiKey || config.giphy.apiKey); 
let searchString = ""; 
let giphyQueryUrl; 

//Initialize twitter client 
const client = new Twitter({ 
    consumer_key: (process.env.consumer_key || config.twitter.consumer_key), 
    consumer_secret: (process.env.consumer_secret || config.twitter.consumer_secret), 
    access_token_key: (process.env.access_token_key || config.twitter.access_token_key), 
    access_token_secret: (process.env.access_token_secret || config.twitter.access_token_secret) 
}); 

process.on('unhandledRejection', (reason,promise) => { 
    console.log('Unhandled Rejection at:', promise, 'reason:', reason); 
}) 

//This stream checks for statuses containing '@[USERNAME]' references, strips out the relevant seach data and feeds 
//that search data to the queryGiphy function 
client.stream('statuses/filter', {track: '@[USERNAME]'}, (stream) => { 
    stream.on('data', (tweet) => { 
     searchString = 
      tweet.text.substring(tweet.text.indexOf("@[USERNAME]")+"@[USERNAME]".length + 1,tweet.text.length); 
     giphyQueryUrl = "http://api.giphy.com/v1/gifs/search?q="+searchString+"&api_key="+ giphyApiKey +"&limit=5&rating=g"; 
     let replyString = '@' + tweet.user.screen_name + ' '; 
     let giphyUrl = queryGiphy(replyString,giphyQueryUrl); 
    }) 
}) 

//This function will query the Giphy API using the node http module and when it finds a match, posts that to twitter 
//using the gifUrlToPost function 
function queryGiphy(replyString,queryUrl) { 
    http.get(queryUrl, res => { 
     res.setEncoding("utf8"); 
     let body = ''; 
     res.on("data", data => { 
      body += data; 
     }); 
     res.on("end",() => { 
      body = JSON.parse(body); 
      if(postToTwitter(replyString + body.data[0].url)) { 
       return true; 
      } else { 
       return false; 
      } 

     }); 
     res.on("error", error => { 
      console.log("Error: " + error); 
     }) 

    }); 

} 

//This simply posts the url of the gif passed to it 
function postToTwitter(body) { 
    client.post('statuses/update', {status: body}) 
     .then(tweet => { 
      return true; 
     }) 
     .catch(error => { 
      throw error; 
     }); 

} 

Mein Problem ist, dass, wenn ich diese einsetzen, um heroku, ich bekomme immer einen Timeout-Fehler, dass es keinen Platz gibt, $ PORT zu verbinden, damit Heroku einen Port dynamisch zuweist. Nun, ich verstehe die Natur von diesem, ich habe kleine Web-Server auf Heroku zuvor bereitgestellt und verstanden, wie man Umgebungsvariablen aufsetzt, so dass es dynamisch eine Portnummer zum Einrichten eines Streams mit Twitter und Abfragen von Giphy zuweisen kann. Aber wo mache ich das in meinem Code? Ich verstehe nicht, in diesem Fall, wo es zu tun ist?

+0

ich bin nicht klar über die Art Ihrer Frage, wenn Sie ein bisschen mehr spezifischere oder erklären kann werde ich glücklich sein –

+0

So ist die Natur davon zu helfen, ist, dass jede Version von ein Die Knoten-App, die ich in Heroku bereitgestellt habe, verfügt über einen root-App-Prozess, dem ein Port für die Kommunikation mit der Außenwelt zugewiesen ist, wie in Ihrem Beispiel unten. Ich habe gerade Knoten als Laufzeitumgebung verwendet, es gibt keinen Server, den ich erstellt habe, daher verstehe ich nicht, wo ich eine Verbindung für $ PORT herstellen muss. Ich habe eine Procfile für heroku geschrieben, die web: node index.js $ PORT, aber das scheint es nicht zu beheben –

+0

okay, müssen Sie also nur eine Node-Datei liefern? Ist das dein Problem? –

Antwort

0

haben Sie app.js Datei oder die bin-Datei, wenn Sie tun, dann

app.set('port',(process.env.PORT||5000)); 

app.listen(app.get('port'),function(){ 

}) 

oder benötigen Sie einen procfile in Ihrem Stamm zu erstellen und drücken Sie den Code zu Heroku git

können Sie lesen Sie diesen Artikel für weitere Klärung https://devcenter.heroku.com/articles/procfile

Verwandte Themen