Continuez à récupérer des tweets contenant des mots-clés spécifiques à l'aide de l'API Streaming en Python

Contexte

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.

Échantillon Python

Objectif

Continuez à enregistrer des mots clés spécifiques dans la base de données avec Python.

Bibliothèque de prérequis

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.

Exemple de code

# -*- 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))

Comment utiliser

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.

La description

-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

Continuez à récupérer des tweets contenant des mots-clés spécifiques à l'aide de l'API Streaming en Python
Essayez d'utiliser l'API Kraken avec Python
Tweet à l'aide de l'API Twitter en Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Essayez d'utiliser l'API DropBox Core avec Python
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Comment récupérer la nième plus grande valeur en Python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Comment récupérer plusieurs tableaux à l'aide de slice en python.
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Recevez des tweets avec des mots-clés arbitraires à l'aide de l'API Streaming de Twitter
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Un script qui transfère les tweets contenant des mots-clés spécifiques sur Twitter vers Slack en temps réel.
Programme Python qui recueille quotidiennement des tweets contenant des mots-clés spécifiques et les enregistre en csv
Obtenir l'API arXiv en Python
Frappez l'API Sesami en Python
Accédez à l'API Web en Python
Accéder à l'API Twitter avec Python
Un moyen simple d'accéder à l'API produit Amazon en Python
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Accédez à l'API New Relic en Python pour obtenir l'état du serveur
Fonctionnement de la souris à l'aide de l'API Windows en Python
Connectez-vous à Slack à l'aide de requêtes en Python
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
Convertir l'API cURL en script Python (à l'aide du stockage d'objets IBM Cloud)
Comment utiliser la bibliothèque C en Python
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Client de streaming Twitter à apprécier dans le terminal
Pour remplacer dynamiquement la méthode suivante en python
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
Conseils pour accéder à l'API ATND avec Python
Jugons les émotions à l'aide de l'API Emotion en Python
Conseils pour rédiger un aplatissement concis en python
Comment obtenir les fichiers dans le dossier [Python]
Accédez à l'API Firebase Dynamic Links en Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Je veux afficher la progression en Python!
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Enregistrez votre fréquence cardiaque sur des feuilles de calcul en temps réel (?) En utilisant Python x fitbit API!
J'ai essayé de représenter graphiquement les packages installés en Python
Comment obtenir le nom de la variable lui-même en python
Comment obtenir le nombre de chiffres en Python
Importez un fichier JPG à l'aide de l'API Google Drive en Python
Comment connaître le répertoire actuel en Python dans Blender
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
Notification PUSH de Python vers Android à l'aide de l'API de Google
Déterminer le seuil à l'aide de la méthode P-tile en python
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Convertissez l'image au format .zip en PDF avec Python
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Écrire des données dans KINTONE à l'aide du module de requêtes Python
OpenVINO utilisant l'API Python d'Inference Engine dans un environnement PC
Je veux écrire en Python! (3) Utiliser des simulacres
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Comment utiliser le modèle appris dans Lobe en Python
Comment exécuter une commande à l'aide d'un sous-processus en Python