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?
ich bin nicht klar über die Art Ihrer Frage, wenn Sie ein bisschen mehr spezifischere oder erklären kann werde ich glücklich sein –
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 –
okay, müssen Sie also nur eine Node-Datei liefern? Ist das dein Problem? –