2016-08-03 4 views
1

Я пытаюсь получить твиты, используя TwitterSearch в Python3.Как искать твиты с id на другой id

Так что в основном я хочу получить все твиты между этими двумя идентификаторами.

748843914254249984 ->760065085616250880

Эти 2 идентификаторами являются от

Fri Jul 01 11:41:16 +0000 2016 в Mon Aug 01 10:50:12 +0000 2016

Так вот код, который я сделал.

crawl.py

#!/usr/bin/python3    
# coding: utf-8     

from TwitterSearch import * 
import datetime 

def crawl(): 
    try: 
     tso = TwitterSearchOrder() 
     tso.set_keywords(["keyword"]) 
     tso.set_since_id(748843914254249984) 
     tso.set_max_id(760065085616250880) 

     ACCESS_TOKEN = xxx 
     ACCESS_SECRET = xxx 
     CONSUMER_KEY = xxx 
     CONSUMER_SECRET = xxx 

     ts = TwitterSearch(
      consumer_key = CONSUMER_KEY, 
      consumer_secret = CONSUMER_SECRET, 
      access_token = ACCESS_TOKEN, 
      access_token_secret = ACCESS_SECRET 
     ) 

     for tweet in ts.search_tweets_iterable(tso): 
      print(tweet['id_str'], '-', tweet['created_at']) 

    except TwitterSearchException as e: 
     print(e) 


if __name__ == '__main__': 
    crawl() 

Я не очень хорошо знаком с Twitter API и поиска с ним. Но этот код должен выполнять эту работу.

Но это дает:

760058064816988160 - Mon Aug 01 10:22:18 +0000 2016 
[...] 
760065085616250880 - Mon Aug 01 10:50:12 +0000 2016 

Много, много раз ... Как я получил те же линии снова и снова вместо того, чтобы все между моими двумя идентификаторами.

Так что я не получаю ни одного из июльских твитов, любая идея почему?

+0

Это работает, когда вы удаляете настройки 'set_since_id' и' set_max_id'? –

+0

@NanderSpeerstra Да, сегодня он получает 198 твитов. С 07:51 по 08:54. – Difender

+0

Если я запустил ваш код и поместил счетчик в цикле ('i = 0; for(): i + = 1, если i == 300: break;'), он действительно работает. Но он находит (ровно) 100 твитов, а затем перезапускает цикл.Так что с 'i = 300' я получаю те же результаты ровно 3 раза. –

ответ

1

TL; DR

Снимите tso.set_max_id(760065085616250880) линию.

Объяснение (насколько я понимаю)

Я нашел вашу проблему в TwitterSearch Docs:

«Единственный параметр со значением по умолчанию является считаться с 100. Это происходит потому, что максимум твитов, возвращаемых этой самой конечной точкой API Twitter. "

Если я проверить это в вашем коде путем создания поиска URL, я получаю:

tso.create_search_url() 
#?q=Vuitton&since_id=748843914254249984&count=100&max_id=760065085616250880 

который содержит count=100 (то есть он получит первую страницу 100 твитов). И, в отличие от удаления set_since_id и set_max_id, который также имеет count=100 и извлекает еще много твитов, он останавливается на 100 твитов.

set_since_id без set_max_id работ, наоборот. Поэтому удаление max_id=760065085616250880 из URL-адреса поиска привело к желаемым результатам.

Если кто-нибудь может объяснить, почему set_max_id не работает, отредактируйте мой ответ.

Смежные вопросы