Die Twitter-API unterliegt Nutzungsbeschränkungen und kann während eines bestimmten Zeitraums nicht öfter als angegeben angegeben werden. In den folgenden Artikeln werden Tweets mithilfe der Such- / Tweets-API durchsucht. Die maximale Anzahl, die mit einer API erfasst werden kann, beträgt 100 und kann nur 180 Mal in 15 Minuten ausgeführt werden.
** Suche Twitter mit Python ** http://qiita.com/mima_ita/items/ba59a18440790b12d97e
Dies ist in Ordnung, wenn nur wenige Daten vorhanden sind, eignet sich jedoch nicht für die Verwendung von "Fortsetzung der Suche nach Hash-Tags, die allgemeine Wahlen während des Wahlprogramms enthalten".
Daher bietet Twitter die Streaming-API als Methode zur ständigen Datenerfassung.
The Streaming APIs https://dev.twitter.com/streaming/overview
Streaming API Die Streaming-API kann dazu führen, dass Entwickler Twitter-Informationen mit geringer Verzögerung erhalten.
Es gibt drei Haupttypen von Streaming-APIs.
Name | Erläuterung |
---|---|
Public streams | Sie können die öffentlichen Twitter-Daten erhalten. Kann nach Schlüsselwort oder Ort gefiltert werdenfilterIst verfügbar |
User streams | Ruft Daten und Ereignisse für einen bestimmten authentifizierten Benutzer ab. |
Site streams | Ruft Daten für mehrere Benutzer ab. Derzeit in der Beta. Der Zugriff ist auf Whitelist-Konten beschränkt. |
Registrieren Sie weiterhin bestimmte Schlüsselwörter in der Datenbank bei Python.
python_twitter https://code.google.com/p/python-twitter/ Eine Bibliothek zum Betreiben von Twitter mit Python.
peewee https://github.com/coleifer/peewee Ein ORM, das SQLite, Postgres und MySQL verwenden kann.
# -*- coding: utf-8 -*-
# easy_install python_twitter
import twitter
import sys
import codecs
import dateutil.parser
import datetime
import time
from peewee import *
db = SqliteDatabase('twitter_stream.sqlite')
class Twitte(Model):
createAt = DateTimeField(index=True)
idStr = CharField(index=True)
contents = CharField()
class Meta:
database = db
# easy_Fügen Sie den folgenden Code hinzu, wenn GetStreamFilter in der neuesten Installationsversion nicht verfügbar ist
# https://github.com/bear/python-twitter/blob/master/twitter/api.py
def GetStreamFilter(api,
follow=None,
track=None,
locations=None,
delimited=None,
stall_warnings=None):
'''Returns a filtered view of public statuses.
Args:
follow:
A list of user IDs to track. [Optional]
track:
A list of expressions to track. [Optional]
locations:
A list of Latitude,Longitude pairs (as strings) specifying
bounding boxes for the tweets' origin. [Optional]
delimited:
Specifies a message length. [Optional]
stall_warnings:
Set to True to have Twitter deliver stall warnings. [Optional]
Returns:
A twitter stream
'''
if all((follow is None, track is None, locations is None)):
raise ValueError({'message': "No filter parameters specified."})
url = '%s/statuses/filter.json' % api.stream_url
data = {}
if follow is not None:
data['follow'] = ','.join(follow)
if track is not None:
data['track'] = ','.join(track)
if locations is not None:
data['locations'] = ','.join(locations)
if delimited is not None:
data['delimited'] = str(delimited)
if stall_warnings is not None:
data['stall_warnings'] = str(stall_warnings)
json = api._RequestStream(url, 'POST', data=data)
for line in json.iter_lines():
if line:
data = api._ParseAndCheckTwitter(line)
yield data
def main(argvs, argc):
if argc != 6:
print ("Usage #python %s consumer_key consumer_secret access_token_key access_token_secret #tag1,#tag2 " % argvs[0])
return 1
consumer_key = argvs[1]
consumer_secret = argvs[2]
access_token_key = argvs[3]
access_token_secret = argvs[4]
#Der in UNICODE zu konvertierende Zeichencode entspricht dem Zielterminal.
track = argvs[5].decode('cp932').split(',')
db.create_tables([Twitte], True)
api = twitter.Api(base_url="https://api.twitter.com/1.1",
consumer_key=consumer_key,
consumer_secret=consumer_secret,
access_token_key=access_token_key,
access_token_secret=access_token_secret)
for item in GetStreamFilter(api, track=track):
print '---------------------'
if 'text' in item:
print (item['id_str'])
print (dateutil.parser.parse(item['created_at']))
print (item['text'])
print (item['place'])
row = Twitte(createAt=dateutil.parser.parse(item['created_at']),
idStr=item['id_str'],
contents=item['text'])
row.save()
row = None
if __name__ == '__main__':
sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout, errors='backslashreplace')
argvs = sys.argv
argc = len(argvs)
sys.exit(main(argvs, argc))
python twitter_stream.py consumer_key consumer_secret access_token_key access_token_secret #Wahl,#Wahl des Repräsentantenhauses,Wahl
Unter Berücksichtigung der Zugriffstokeninformationen und Schlüsselwörter wird im aktuellen Verzeichnis eine SQLITE-Datenbank mit dem Namen twitter_stream.sqlite erstellt.
-Der neueste Code enthält die GetStreamFilter-Methode, ist jedoch in der Version, die mit easy_install von Python 2.7 erhältlich ist, nicht vorhanden. Ich implementiere hier den gleichen Code.
・ Es spielt keine Rolle, wann eine große Datenmenge fließt, aber die Erfassung der zuletzt zu filternden Tweet-Daten verzögert sich um einige Minuten.
Grundsätzlich ist es besser, die Datenbank zu registrieren und die zeitaufwändige Verarbeitung in einem separaten Prozess durchzuführen.
Vergangene Daten können nicht abgerufen werden, daher muss es sich um einen residenten Prozess handeln.
・ Da created_at UTC-Zeit ist, ist es 9 Stunden später als japanische Zeit. Die hier registrierte Zeit plus 9 Stunden ist die Zeit in Japan.
Recommended Posts