#javascript #twitter #google-apps-script #twitter-search
#javascript #Twitter #google-apps-script #twitter-поиск
Вопрос:
впервые здесь и только начал исследовать ботов Twitter, чтобы ретвитить информацию о трафике моим подписчикам. Я использую labnol-бота Amit Agarwal в Google Script и очень мало изменился (удалены избранные твиты), но я не могу заставить его ретвитить что-либо, используя мои параметры поиска, несмотря на наличие совпадающих твитов в Twitter, может кто-нибудь проверить, что я делаю неправильно, я недостаточно (пока) знаю, чтобы определитьпроблема? Заранее спасибо.
// Written by Amit Agarwal @labnol on 31/07/2015
// Fill the Twitter Keys and then choose Run -> Start Bot
TWITTER_CONSUMER_KEY = "removed";
TWITTER_CONSUMER_SECRET = "removed";
TWITTER_ACCESS_TOKEN = "removed";
TWITTER_ACCESS_SECRET = "removed";
TWITTER_SEARCH_PHRASE = 'A13 list:a13essex/traffic';
function Start_Bot() {
var props = PropertiesService.getScriptProperties();
props.setProperties({
TWITTER_CONSUMER_KEY: TWITTER_CONSUMER_KEY,
TWITTER_CONSUMER_SECRET: TWITTER_CONSUMER_SECRET,
TWITTER_ACCESS_TOKEN: TWITTER_ACCESS_TOKEN,
TWITTER_ACCESS_SECRET: TWITTER_ACCESS_SECRET,
SINCE_TWITTER_ID: 0
});
var twit = new Twitter.OAuth(props);
// Test Twitter authorization
if (!twit.favorite("628053456071192576")) {
throw new Error("Please check your Twitter access tokens");
return;
}
ScriptApp.newTrigger("labnol_twitterBot")
.timeBased()
.everyMinutes(10)
.create();
}
function labnol_twitterBot() {
try {
var props = PropertiesService.getScriptProperties(),
twit = new Twitter.OAuth(props);
if (twit.hasAccess()) {
var tweets = twit.fetchTweets(
TWITTER_SEARCH_PHRASE, function(tweet) {
// Skip tweets that contain sensitive content
if (!tweet.possibly_sensitive) {
return tweet.id_str;
}
}, {
multi: true,
lang: "en", // Process only English tweets
count: 5, // Process 5 tweets in a batch
since_id: props.getProperty("SINCE_TWITTER_ID")
});
if (tweets) {
props.setProperty("SINCE_TWITTER_ID", tweets[0]);
for (var i = tweets.length - 1; i >= 0; i--) {
twit.retweet(tweets[i]);
/* Wait between 10 seconds and 1 minute */
Utilities.sleep(Math.floor(Math.random()*50000) 10000);
}
}
}
} catch (f) {
Logger.log("Error: " f.toString());
}
}
// Email: amit@labnol.org
// Premium Support: http://ctrlq.org
Это возвращает следующий результат в журнале:
[16-09-30 11:25:32:289 BST] https://api.twitter.com/1.1/search/tweets.json?lang=enamp;count=5amp;since_id=undefinedamp;include_entities=falseamp;result_type=recentamp;q=A13 list:a13essex%2Ftraffic
[16-09-30 11:25:32:292 BST] lang=en
[16-09-30 11:25:32:293 BST] count=5
[16-09-30 11:25:32:293 BST] since_id=undefined
[16-09-30 11:25:32:294 BST] include_entities=false
[16-09-30 11:25:32:294 BST] result_type=recent
[16-09-30 11:25:32:295 BST] q=A13 list:a13essex/traffic
[16-09-30 11:25:32:375 BST] No matching tweets this go-round
Является https://api.twitter.com/1.1/search/tweets.json?lang=enamp;count=5amp;since_id=undefinedamp;include_entities=falseamp;result_type=recentamp;q=A13 list:a13essex%2Ftraffic правильно? Еще раз спасибо, Пол
Ответ №1:
Вы выявили еще одну проблему с кодировкой специальных символов в fetchTweets. Я выполнил некоторые проверки API, и кодировка косой черты должна быть/ в URL, чтобы вернуть правильный набор результатов.
Я опубликовал выпуск на Github для следующего выпуска: https://github.com/airhadoken/twitter-lib/issues/16
В то же время вы можете использовать twit.fetch("https://api.twitter.com/1.1/search/tweets.json?lang=enamp;count=5amp;since_id=undefinedamp;include_entities=falseamp;result_type=recentamp;q=A13 list:a13essex/traffic")
в качестве обходного пути; вам нужно будет JSON.parse
использовать текст содержимого, чтобы получить твиты как объекты. Я сообщу, когда вы сможете fetchTweets()
снова использовать (т.Е. Когда Twitter lib v23 будет готов к выпуску).
Спасибо, что дали мне знать! — Брэдли Момбергер, создатель / сопровождающий библиотеки Twitter.
Комментарии:
1. Я подумывал о том, чтобы связаться с вами, @air_hadoken, поскольку это была моя первая мысль, когда я увидел журнал, но я не был достаточно уверен, чтобы выйти и сказать это! Я уже использую аналогичный обходной путь, просто не могу заставить его вызывать и устанавливать since_id, но, как я уже сказал, я только начинаю, поэтому все еще пытаюсь разобраться. Рад, что это помогло, хотя
2. Вы должны иметь возможность просто добавлять
"amp;since_id=" props.getProperty("SINCE_TWITTER_ID")
в конец URL-адреса при извлечении. Не забудьте сохранитьid_str
последний твит вprops
.3. Спасибо, я уже сделал это, и на самом деле у меня возникли проблемы с сохранением информации, но в конце концов я ее отсортировал, хотя скорее по счастливой случайности, чем по здравому смыслу!
4. К вашему сведению, вышла новая версия библиотеки Twitter (v23). При обновлении эти запросы теперь должны работать с fetchTweets() .
5. Спасибо, что не забыли вернуться, чтобы сообщить мне. Обходной путь по-прежнему работает хорошо, поэтому я буду придерживаться этого, но в случае сбоя я переключусь на ваш.