Не удается получить Twitterlib fetchtweets() для возврата запросов из списка

#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. Спасибо, что не забыли вернуться, чтобы сообщить мне. Обходной путь по-прежнему работает хорошо, поэтому я буду придерживаться этого, но в случае сбоя я переключусь на ваш.