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?
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
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 ]