[PYTHON] Expérience pour collecter des tweets pendant une longue période (préparation du programme (1))

Jusqu'à la dernière fois

Pensez d'abord

Si vous avez décidé quoi faire et la suspension, c'est votre style de commencer ** par google. En bref, "** 80% de ce que je voulais faire, c'est quelqu'un qui le fait en premier **". Même dans Qiita, Des choses similaires ( Je veux dire, il y a des gens qui font des choses plus avancées) , et je n'ai pas d'autre choix que de l'utiliser comme référence, mais malheureusement, il n'y a aucun cas où tout va bien. Dans la mesure où j'ai enquêté sur Stack Over Flow, il n'y avait aucun cas où un programme qui pourrait correctement répondre aux spécifications requises a été publié. Cela aurait été plus facile s'il y avait ... Chi </ sub>

Même si vous faites quelque chose qui répond aux exigences dans la gamme de ~ ~ script kiddy ~ ~ usage personnel, vous devrez organiser vous-même cette zone.

Pourquoi Public Stream en premier lieu?

Il existe à peu près deux types d'acquisition de données depuis Twitter, "** API REST ** utilisée" et "** API de streaming ** utilisée". ** REST ** est un moyen d'envoyer un message et de renvoyer le résultat, tandis que ** Streaming API ** envoie une commande une fois, puis lui envoie le résultat à l'infini. Il sera envoyé. (Et je comprends. Veuillez consulter la documentation pour plus de détails. )

La raison de la rendre Public Steram en premier lieu est

  1. Il y avait une grande possibilité que le débit prévu dépasse la limite qui peut être obtenue au format REST.
  2. Tant que vous achetez et lisez Twitter API Pocket Reference , faites-le avec REST (si vous ne supposez que la lecture) Cela semble étonnamment ennuyeux.

C'est une raison très paresseuse pour laquelle l'API Stream semble moins gênante que REST, si vous venez d'apporter une bibliothèque appropriée et de la lire. Vous devriez simplement continuer à jeter ce qui a été envoyé dans la base de données.

Il existe également plusieurs API Stream, ** "Tout ce qui est transféré vers Twitter (contrat requis)" **, ** "Tweets sur ma chronologie" **, ** "Aléatoire 1% du total" * Il existe plusieurs * et ** "résultats restreints par mots clés, paramètres régionaux, etc. pour l'ensemble" , mais ici le dernier " <a href =" https://dev.twitter.com/streaming/reference " / post / statuses / filter "> Limité par le mot de recherche spécifié **" est utilisé. Public Stream semble être un terme générique pour ceux-ci, mais je n'en suis pas sûr. (je viens de le chercher, mais est-il correct de comprendre que le nombre total de tweets pouvant être obtenus avec Filfer n'est pas de 1%, mais de tous?) </ Small>

Déconnecter et reconnecter

Peut-être parce que c'est un humain Rotor, on dit que l'API Stream maintient une connexion HTTP, mais elle n'est pas fiable, ou ** elle se déconnecte même si rien ne se passe. Je crains plutôt d'être déconnecté ** car il n'y a pas de problème. Même si vous regardez le livre de référence précédent (référence de poche), il est écrit de telle manière que vous devez supposer une reconnexion car il sera déconnecté si quelque chose se produit. …… Mais, même si vous regardez la page d'une bibliothèque bien connue ou l'exemple de sa mise en œuvre par vous-même, il n'y a pas de page qui décrit la reconnexion après déconnexion * dans la plage que vous pouvez voir approximativement. * ...... Pouvez-vous faire cela avec l'API? Si c'est le cas, cela n'a jamais été aussi facile ...

(Remarque pour ceux qui savent: j'écris le long de la série chronologique dans mon cerveau tout en codant et en me souvenant, alors s'il vous plaît attendez un peu)

Sélection de la bibliothèque

J'ai beaucoup de choses à penser, mais j'ai décidé d'envisager une bibliothèque connectée à Twitter avec beaucoup de documents japonais dans la perspective de faire référence au merveilleux code de mes prédécesseurs.

  • Bien sûr, il doit prendre en charge l'API Stream
  • Idéalement, vous devriez obtenir une réponse rapide de Google. Sur cette base, j'ai décidé d'utiliser Tweepy .

Quand j'ai recherché une bibliothèque du même point de vue du côté de la base de données,

  • Quoi qu'il en soit, la quantité de description de codage est petite
  • Vous pouvez généralement trouver la réponse par google.
  • MongoDB officiel ou quelque chose de similaire Pour cette raison, j'ai décidé d'utiliser PyMongo .

Une plaque de fer qui a tendance à être appropriée? Eh bien, si Shiroto devait faire quelque chose à ce sujet, il devrait utiliser le standard ...

Environnement de développement.

Après avoir décidé quoi utiliser, préparons un environnement de développement et un environnement de test. Je suis un magasin Gatchigachi Win qui est venu de VB et est venu en C → VC ++ → C #. Bien sûr, l'environnement qui peut être utilisé pour le développement est également Windows, il va donc sans dire qu'il est idéal de pouvoir développer sur Win jusqu'à juste avant la sortie = implémentation. Ou plutôt, si vous n'avez pas d'IDE (Integrated Development Environment), vous mourrez instantanément. Plus encore, si on vous dit comment le faire sous Linux, vous n'avez pas d'autre choix que de vous asseoir.

Heureusement, puisqu'il s'agit d'un langage de script, il n'y a pas beaucoup de dépendance vis-à-vis de l'environnement, et de nos jours l'installation des bibliothèques, etc. est automatisée, donc le problème devrait être beaucoup moins important que par le passé.

Je pense que c'est bien pour l'infrastructure, mais je veux utiliser IDE après tout ~~ J'ai léché le monde ~~ Quand j'ai été recherché sur Google dans un environnement familier, Python Tools pour Visual Studio est une chose merveilleuse. ** De plus, vous pouvez facilement déboguer sur place en appelant la version Win Python comme Anaconda **. Parce qu'il n'y a plus que ça

  • Anaconda (Python 3.5.2 :: Anaconda 4.1.1 (64-bit) )
  • MongoDB for Win(MongoDB shell version: 3.2.10)
  • VisualStudio2013 + Python Tools For Visual Studio(Ver.2.2.2)
  • Tweepy + PyMongo (dernier au moment de l'acquisition)

Décidé de développer et de tester avec la configuration. Par souci,

  1. Y a-t-il un problème lors de l'exécution dans l'environnement d'exécution? Y a-t-il une partie qui dépend de l'environnement?
  2. Est-il possible d'effectuer suffisamment de tests dans l'environnement de développement? Y aura-t-il des problèmes imprévus?
  3. La version autour de l'infrastructure peut changer en fonction de l'environnement de développement et de l'environnement d'exécution.

Eh bien, dans tous les cas, le test de la machine est nécessaire à la fin, et si vous ne l'écrivez pas correctement, aucun problème ne se produira, alors laissez-le pour le moment. (Si c'est un travail, j'ai peur de devoir tout emballer ...)

Exigences du programme

Le programme que je crée cette fois-ci porte la règle du diable qu'une fois que vous commencez à courir, vous pouvez continuer à exécuter ce que vous voulez pendant 3 mois et l'arrêter. Par conséquent, nous allons l'implémenter en nous concentrant sur les fonctions essentielles, et faire autre chose par d'autres moyens **.

Fonctions à implémenter avec la plus haute priorité

  • Recevez un flux public de Twitter
  • Stockage des données reçues dans MongoDB
  • Possibilité de se reconnecter en cas de déconnexion inattendue

Fonction à mettre en œuvre en deuxième priorité

  • Une fonction pour enregistrer lorsqu'un événement tel qu'une connexion, une déconnexion ou une reconnexion se produit.
  • En plus de ce qui précède, une fonction pour notifier la survenance d'un événement avec Direct Message sur Twitter (désir parental de contacter)

Fonctionnalités à mettre en œuvre si possible

  • Notification du débit journalier et de la capacité de stockage restante.

Fonction à considérer s'il y a de la capacité de réserve

  • Se termine automatiquement lorsqu'une date et une heure spécifiques arrivent

Fonctions non incluses dans les spécifications requises

  • Fonction de repoussage de compte spécifique à la liste noire (en tant que fonctionnalité du programme).
  • Traitement des données de tweet en supposant une analyse en temps réel (en fonction du programme)

Eh bien, ça ressemble à ça. Commençons par les éléments avec la plus haute priorité et améliorons progressivement le degré de perfection.

Programme d'accueil Twitter pour le moment

Avec le vœu de "** Ayez le tutoriel Python d'O'Reilly à portée de main " et " Gugu si vous ne comprenez pas **", j'ai commencé à créer un programme de démonstration pour le moment. À partir de la création d'un nouveau projet dans Visual Studio, spécifiez «Python Application» et vous êtes prêt à écrire du code Python dans votre éditeur familier. C'est pratique. Après avoir tapé le code du didacticiel, exécutez-le avec [F5]. Vous pouvez l'essayer avec la même procédure que l'application console en langage C, donc il n'y a vraiment pas de stress. Je suis désolé de ne pas pouvoir marcher.

Eh bien, si vous ne pouvez pas parler d'abord à Twitter, c'est hors de question, alors commençons par faire cette zone. Vous devez d'abord installer Tweepy. Si vous pensez que vous pouvez taper la commande "pip" à partir d'Anaconda Prompt, cela peut également être exécuté à partir de Visual Studio.

  1. Sélectionnez [Affichage] -> [Autres fenêtres] -> [Environnements Python] dans la barre de menus pour l'afficher.
  2. Sélectionnez pip dans la liste déroulante centrale de la fenêtre Environnements Python.
  3. Saisissez "tweepy" dans la zone de texte "Rechercher PyPl et les packages installés".
  4. Cliquez sur "" pip install tweepy "depuis PyPl". Ensuite, l'installation est terminée.

C'est aussi amusant que NuGet.

Flux basé sur certaines pages trouvées par google pour le moment et le tutoriel de Tweepy Écrivez un programme pour obtenir des tweets avec l'API.

tweetCheck.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import tweepy
#Préparez vous-même les variables requises pour exécuter l'API Twitter.
CK = ''   # Consumer Key
CS = ''   # Consumer Secret
AT = ''   # Access Token
AS = ''   # Accesss Token Secert

class Listener(tweepy.StreamListener):
    def on_status(self, status):
        print(status.text.encode('shift_jis', 'ignore'))
        return True

    def on_error(self, status_code):
        print('Erreur est survenue: ' + str(status_code))
        return True

#Traitement principal d'ici
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)     #Obtenez un jeton d'accès

listener = Listener()                       #Instance de classe d'écouteur
stream = tweepy.Stream(auth, listener)      #La réception commence à partir d'ici.

#Sélectionnez-en un et décommentez-le.
#stream.filter(track=['#xxxxxx'])  #Filtrer par mot de recherche spécifié
stream.sample()                    #1 de tous les tweets Twitter%ramasser
#stream.userstream()               #Propre TL de l'utilisateur

…… Eh, 31 lignes (lignes vierges, y compris les commentaires)? Que puis-je faire avec ça? ?? Exécutez en réfléchissant. Résultat de l'exécution Je ne peux pas le lire (parce que c'est UTF-8), mais je peux le recevoir. Terminez de force avec Ctrl + C.

Remarques

On a l'impression que ça bouge rapidement, mais il est en fait bouché à deux endroits.

  • Une seule ligne est affichée, mais elle a été interrompue de force immédiatement.
    → Le code de caractère du fichier py créé par Visual Studio était "Shift-JIS".
    Sélectionnez UTF-8 dans [Menu] → [Fichier] → [Paramètres détaillés du fichier enregistré] et enregistrez.
  • Si vous l'exécutez après avoir corrigé ce qui précède, il sera affiché pendant un moment, mais il sera interrompu de force. Le timing est aléatoire.
    → L'impression sous "def on_status (self, status):" était initialement "print (status.text)", mais
    <a href = "http://lab.hde.co" .jp / 2008/08 / pythonunicodeencodeerror.html "> J'ai entendu dire que je mourrais en essayant d'afficher des caractères qui ne peuvent pas être affichés à l'invite de commande.
    Lorsque j'ai essayé de convertir l'encodage, il s'est affiché même s'il était déformé.

Le premier est correct si vous le réparez la première fois. Ce dernier est correct car il n'a pas besoin d'être affiché s'il est toujours en mouvement. Si Python peut être géré dans cette mesure dans quelques jours pour la première fois, il se peut que ce soit inattendu à temps pour la fin octobre.

La prochaine fois, je vais étoffer cette sauce. (Continuer)

Recommended Posts

Expérience de collecte de tweets pendant une longue période (préparation du programme (3))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (1))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (2))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (5))
Expérimentez pour collecter des tweets pendant une longue période (juste avant l'exécution)
Expérimentez pour collecter des tweets pendant une longue période (agrégation et confirmation du contenu)
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
Une méthode d'étude pour les débutants pour apprendre l'analyse des séries chronologiques
Je veux créer un Dockerfile pour le moment.
[Profile] Identifiez les domaines où le programme prend beaucoup de temps (google-perftool)
[Python] Il était très pratique d'utiliser la classe Python pour le programme ROS.
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
J'ai essayé de créer un linebot (préparation)
Introduction à discord.py (1er jour) -Préparation pour discord.py-
Une solution de contournement simple pour que les robots essaient de publier des tweets avec le même contenu
CentOS 7 avec la configuration LVM prend beaucoup de temps à s'arrêter.