Получить имена пользователей Twitter в боте, который запускает Twitter «статусы / обновления POST» в ответ на конкретные ключевые слова - PullRequest
0 голосов
/ 21 декабря 2018

Создание бота в Твиттере для:

  1. поиска твитов с ключевыми словами, такими как "Net Neutrality"
  2. Возвращение идентификаторов твитов и имен пользователей для этих твитов
  3. Публикациятвит в ответ этому пользователю (через in_reply_to_status_id , как описано в Twitter Docs )

Вот мой текущий код:


const Twitter = new twit(config);

let tweet = function() {
    let params = {
        q: '#netneutrality, #savethenet, Net Neutrality',
        result_type: 'mixed',
        lang: 'en'
    }

    // search through all tweets using our params and execute a function:
Twitter.get('search/tweets', params, function(err, data) {
        // if there is no error
        if (!err) {
           // loop through the first 4 returned tweets
          for (let i = 0; i < 4; i++) {
            // iterate through those first four defining a rtId that is equal to the value of each of those tweets' ids
          let rtId = data.statuses[i].id_str;
          let username = data.statuses[i].username;
            // the post action
          Twitter.post('statuses/update', {
            // setting the id equal to the rtId variable
            in_reply_to_status_id: rtId
            , status: `@${username} Send single-click #SaveTheNet tweets to key politicians at fliplist.app.  Take 60 seconds to protect our Internet, once and for all.`
            // log response and log error
          }, function(err, response) {
            if (response) {
              console.log('Successfully tweeted');
            }
            if (err) {
              console.log(err);
            }
          });
        }
      }
        else {
            // catch all log if the search could not be executed
          console.log('Could not search tweets.');
        }
    });
}

tweet();
setInterval(tweet, 600000);

Когда я запустил его, был успешный вывод («Успешно твитнул» 4 раза в терминале), и действительно было 4 новых твита, опубликованных с моего аккаунта.

Однако имя пользователя во всех этих твитах было @undefined.

Итак, я думаю, что я либо не могу собрать эти имена пользователей из соответствующих твитов, либо не могу соответствующим образом добавить их в строку состояния.

Есть предложения, как мне это исправить?

Для справки, вот ссылка на один из @ неопределенных твитов: https://twitter.com/ProoveTweets/status/1075855455958765569

И скриншот прикреплен здесь

1 Ответ

0 голосов
/ 21 декабря 2018

Две вещи на заметку.Во-первых, имена пользователей в Твиттере называются «Экранные имена».Поэтому ваш код должен выглядеть следующим образом:

let username = data.statuses[i].user.screen_name;

Взгляните на документацию по поиску для примера возвращаемого JSON.https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets.html

Во-вторых, пожалуйста, не делайте этого!Автоматический ответ на ключевые слова противоречит условиям обслуживания разработчика и действительно раздражает пользователей .

https://help.twitter.com/en/rules-and-policies/twitter-automation

...