L'API Twitter a des restrictions d'utilisation et ne peut pas être utilisée plus que le nombre de fois spécifié au cours d'une période donnée. Dans l'article suivant, l'API search / tweets est utilisée pour rechercher des tweets, mais le nombre maximum pouvant être acquis avec une API est de 100, et elle ne peut être exécutée que 180 fois en 15 minutes.
** Rechercher sur Twitter en utilisant Python ** http://qiita.com/mima_ita/items/ba59a18440790b12d97e
C'est bien s'il y a peu de données, mais cela ne convient pas pour l'utilisation de "continuer à rechercher des balises de hachage qui incluent des # élections générales pendant le programme électoral".
Par conséquent, Twitter fournit l'API Streaming comme méthode pour acquérir en permanence des données.
The Streaming APIs https://dev.twitter.com/streaming/overview
Streaming API L'API Streaming peut permettre aux développeurs d'obtenir rapidement des informations Twitter.
Il existe trois principaux types d'API de streaming.
Nom | La description |
---|---|
Public streams | Vous pouvez obtenir les données publiques Twitter. Peut être filtré par mot-clé ou par emplacementfilterEst disponible |
User streams | Obtient des données et des événements pour un utilisateur authentifié particulier. |
Site streams | Obtient des données pour plusieurs utilisateurs. Actuellement en version bêta. L'accès est limité aux comptes de la liste blanche. |
Continuez à enregistrer des mots clés spécifiques dans la base de données avec Python.
python_twitter https://code.google.com/p/python-twitter/ Une bibliothèque pour exploiter Twitter avec Python.
peewee https://github.com/coleifer/peewee Un ORM qui peut utiliser sqlite, postgres et mysql.
# -*- 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_Ajoutez le code suivant si GetStreamFilter n'est pas disponible dans la dernière version d'installation
# 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]
#Le code de caractère à convertir en UNICODE correspond au terminal cible.
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 #élection,#Élection à la Chambre des représentants,élection
Compte tenu des informations sur le jeton d'accès et des mots-clés, une base de données SQLITE appelée twitter_stream.sqlite sera créée dans le répertoire courant.
-Le dernier code fournit la méthode GetStreamFilter, mais elle n'existe pas dans la version qui peut être obtenue avec easy_install de Python 2.7. J'implémente le même code ici.
-Comme il fonctionne sous Windows ici, la variable de piste est convertie avec cp932, mais veuillez faire correspondre cela avec le code de caractère du terminal.
・ Peu importe qu'une grande quantité de données circule, mais il y a un délai de plusieurs minutes dans l'acquisition des dernières données tweetées à filtrer.
-En gros, il est préférable d'enregistrer la base de données et d'effectuer un traitement chronophage dans un processus séparé.
-Les données passées ne peuvent pas être obtenues, il doit donc s'agir d'un processus résident.
・ Puisque created_at est l'heure UTC, il est 9 heures plus tard que l'heure japonaise. Le temps enregistré ici plus 9 heures sera celui du Japon.
Recommended Posts