Подтвердить что ты не робот

Используя API потоковой передачи Twitter, можно ли отображать только твиты от конкретного пользователя?

В настоящее время я использую API Twitter для получения твитов, сделанных определенными пользователями. Для этого вопроса мы будем использовать @justinbieber в качестве примера.

При использовании ресурса https://stream.twitter.com/1.1/statuses/filter.json установка выполняется в соответствии с требуемым идентификатором пользователя (@justinbieber = 27260086) и позволяет ему запускать, в то время как я только ожидал бы @justinbieber твитов, я в конечном итоге получаю твиты, сделанные ему от его миллионов поклонников. Очевидно, это означает, что я получаю больше информации, чем я хотел, и из того, что я нашел, иногда мне не хватает собственных твитов пользователя!

Я попытался изменить каждый из параметров на https://dev.twitter.com/docs/streaming-apis/parameters безрезультатно.

Следующие параметры параметров:

For each user specified, the stream will contain:

   Tweets created by the user.
   Tweets which are retweeted by the user.
   Replies to any Tweet created by the user.
   Retweets of any Tweet created by the user.
   Manual replies, created without pressing a reply button (e.g. "@twitterapi I agree").

Как и в документах, я бы предположил, что нет никакого способа получить только эти пользовательские твиты без необходимости фильтровать результаты самостоятельно (что, как указано выше, означает, что в любом случае я могу потерять собственные твиты пользователя!), но я хотел бы знать, знает ли кто-нибудь об этом.

Прежде чем кто-нибудь предложит использовать что-то вроде статусов /user _timeline, я знаю, что он может делать то, что я хочу, однако у него есть два недостатка, которые удерживают меня в потоковом API:

  • Каждый запрос означает, что я теряю запрос, а так как Twitter - это ограничение по скорости, я хотел бы избежать этого.
  • Каждый запрос имеет дорогостоящие накладные расходы HTTP-протокола. Слишком много времени проводится на переговорах.

Я хочу сделать это? @justinbieber - это просто пример высокой учетной записи Twitter. Я хочу использовать этот код для извлечения твитов из многих высокоуровневых учетных записей, таким образом, скорость, и возможность видеть каждый твит из каждого пользователя - это требования.

4b9b3361

Ответ 1

После использования json_decode вы можете использовать следующие операторы IF, чтобы определить, что это за твит:

    // if it is a retweet        
    if (isset($data['retweeted_status']))
    {
         //TODO
    }

    // if it is a reply
    else if (isset($data['in_reply_to_status_id_str']))
    {
         //TODO
    }

    // if it is a mention
    else if (isset($data['in_reply_to_user_id_str']))
    {
         //TODO
    }

    // if it is an original tweet
    else
    {
         //TODO
    }

Ответ 2

У меня была аналогичная проблема и я решил с помощью этого небольшого фрагмента кода, который я извлек из arstechnica

Если вы используете python, pycurl выполнит эту работу. Он предоставляет способ выполнения функции для каждой маленькой части полученных данных.

import pycurl, json

STREAM_URL = "http://chirpstream.twitter.com/2b/user.json"

USER = "YOUR_USERNAME"
PASS = "XXXXXXXXX"


def on_receive(self, data):
    self.buffer += data
    if data.endswith("rn") and self.buffer.strip():
        content = json.loads(self.buffer)
        self.buffer = ""

        if "text" in content and content['user'] == 'justinbieber':
            print u"{0[user][name]}: {0[text]}".format(content)

conn = pycurl.Curl()
conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS))
conn.setopt(pycurl.URL, STREAM_URL)
conn.setopt(pycurl.WRITEFUNCTION, on_receive)
conn.perform()

Здесь вы можете найти дополнительную информацию В реальном времени твиттер-поток api