[Python] Twitter REST Search API meer dan 100 tweets ophalen

Pagina: 1
Acties:

  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
Beste Tweakers, ik probeer een app te schrijven die tweets binnenhengelt die voldoen aan een bepaalde hashtag. Deze wil ik inladen in een relationele database om later te kunnen analyseren met een BI tool. Ik loop tegen het probleem aan dat ik niet meer dan 100 tweets binnenkrijg. Ik heb geprobeerd om de laagste ID van de eerste 100 tweet batch te pakken en vervolgens een nieuwe request te doen waarbij ik verder terug ga vanaf dat ID. Dit zou volgens alle pagina's die ik vind moeten werken maar er komt niks terug. Als ik het nummber van de eerste batch verlaag naar bijv. 40 en daarop 2x een batch van 40 inlaad, dan krijg ik vreemd genoeg wel 120 tweets binnen. Als ik het opschroef naar bijv 2 batches van 75 tweets dan stagneert de resultset weer rond de 100 tweets. Volgens de officiele Twitter API documentatie kunnen er maar 100 tweets per keer opgevraagd worden, maar ik ga ervanuit dat dit zou moeten kunnen werken. Iemand een idee?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Import the necessary package to process data in JSON format
try:
    import json
except ImportError:
    import simplejson as json
import time 

# Import the necessary methods from "twitter" library
from twitter import Twitter, OAuth, TwitterHTTPError, TwitterStream

# Variables that contains the user credentials to access Twitter API 
ACCESS_TOKEN = 'x'
ACCESS_SECRET = 'x'
CONSUMER_KEY = 'x'
CONSUMER_SECRET = 'x'

oauth = OAuth(ACCESS_TOKEN, ACCESS_SECRET, CONSUMER_KEY, CONSUMER_SECRET)

# Initiate the connection to Twitter REST API
twitter = Twitter(auth=oauth)
            
# Search for latest tweets about "#nlproc"
# additional parameters: twitter.search.tweets(q='#nlproc', result_type='recent', lang='en', count=10)
low_id = 0
iterator = twitter.search.tweets(q='#vice', count=40)
low_id = 999999999999999999999999999999999999999

for tweet in iterator['statuses']:
    if int(json.dumps(tweet['id'])) < low_id:
        low_id = int(json.dumps(tweet['id']))
    print json.dumps(tweet['created_at']) + ': ' + json.dumps(tweet['text'])

time.sleep(1)

print 'session 2 starting with ID: ' + str(low_id)
iterator = twitter.search.tweets(q='#vice', count=40, max_id=low_id)
for tweet in iterator['statuses']:
    if int(json.dumps(tweet['id'])) < low_id:
        low_id = int(json.dumps(tweet['id']))
    print json.dumps(tweet['created_at']) + ': ' + json.dumps(tweet['text'])

time.sleep(1)

print 'session 3 starting with ID: ' + str(low_id)
iterator = twitter.search.tweets(q='#vice', count=40, max_id=low_id)
for tweet in iterator['statuses']:
    print json.dumps(tweet['created_at']) + ': ' + json.dumps(tweet['text'])


ik weet dat het laatste gedeelte idd in een loop moet, maar voor nu even sequentieel uitgeschreven omdat ik het niet lekker aan de praat krijg ;)

Voorbeeld van oplossing (die niet werkt voor mij)

Officiele documentatie

[ Voor 4% gewijzigd door Xanthium op 12-11-2015 15:31 . Reden: links toegevoegd ]


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12-10 19:34

Matis

Rubber Rocket

Volgens mij moet je sws je low_id met één verminderen voordat je hem in de tweede en derde sessie aanroept.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • JJ93
  • Registratie: Maart 2013
  • Laatst online: 12:03

JJ93

Error 418

Je krijgt ook een parameter "next_results" terug
code:
1
    "next_results": "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed",

Dit kan je gebruiken om de volgende 100 tweets op te halen.
Aan jou is het dan om de arrays aan elkaar vast te plakken.

Acties:
  • 0 Henk 'm!

  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
Bedankt voor de reacties :)