Rechercher sur Twitter avec Python

Objectif

Écrivez un script pour rechercher sur Twitter à l'aide de Python. Le livrable final peut être téléchargé ci-dessous.

https://github.com/mima3/searchTwitter

Préparation

(1) Python 2.7 doit être installé. (2) Installez python_twitter

easy_install python_twitter

(3) Obtenez l'API pour Twitter à partir de la page suivante https://dev.twitter.com/

Veuillez vous référer à la page suivante pour la méthode d'acquisition détaillée. http://support.dreamone.co.jp/Pandora/dp.do?jumpTo=DreamX&variables%28LPID%29=162

API Twitter à utiliser

application/rate_limit_status.json https://dev.twitter.com/docs/api/1.1/get/application/rate_limit_status Obtenez les limites de chaque API. Cela vous permet de savoir combien de fois chaque API peut être utilisée plus tard et quand l'heure de réinitialisation sera.

search/tweets.json https://dev.twitter.com/docs/api/1.1/get/search/tweets API pour la recherche.

Le nombre maximum pouvant être acquis avec une API est de 100. Les recherches via l'API peuvent différer des recherches de la page officielle. Officiellement, les tweets d'il y a 7 jours sont également recherchés, mais dans le cas de l'API, les tweets passés ne sont pas recherchés.

De plus, les tweets obtenus par recherche sont différents en fonction du result_type. Obtenir des informations récentes par ordre chronologique populaire obtient des tweets populaires mélangé est un mélange de ce qui précède.

Caractère de recherche

Les caractères qui peuvent être spécifiés dans l'API de recherche peuvent être les caractères de recherche utilisés dans la "recherche avancée". https://twitter.com/search-advanced

Exemple de recherche en utilisant AND, OR

(Erin OU Eirin) AND (BBA OU Tante OU Baba)

Recherchez ce qui est tweeté comme "Erin" ou "Eirin" et "BBA" ou "Auntie" ou "Babaa".

Un exemple de recherche de ce qu'un utilisateur spécifique a tweeté

Entrez le nom d'utilisateur après "de:".

from:mima_ita

La recherche à partir de semble être limitée à 100 dans l'API.

Un exemple de recherche d'un tweet dans un endroit spécifique

Spécifiez les coordonnées et la plage après "geocode:". L'exemple suivant est un tweet obtenu de la tour de Tokyo avec un rayon de 500 m.

geocode:35.65858,139.745433,0.5km

L'API semble avoir une limite de 100 recherches utilisant le géocode.

Exemple d'implémentation

Ici, un exemple d'implémentation d'un processus de recherche d'un caractère de recherche spécifié est montré. À l'origine, seuls 100 éléments peuvent être obtenus avec une seule API de recherche, alors modifiez-la pour obtenir la limite totale.

Tout d'abord, recherchez la première API de recherche avec "result_type = recent" et récupérez-la dans l'ordre chronologique. À l'heure actuelle, seuls les 100 derniers cas ont été acquis.

Dans la deuxième recherche, essayez d'obtenir les tweets les plus anciens obtenus lors de la première recherche. Pour ce faire, spécifiez "max_id = précédent minimum id-1".

Vous pouvez répéter cela jusqu'à ce que vous ne puissiez pas tous les obtenir, ou vous pouvez répéter jusqu'à ce que vous dépassiez la limite d'API obtenue par rate_limit_status.

Un exemple simple de ceci est montré ci-dessous.

#!/usr/bin/python
# -*- coding: utf-8 -*-
# python_twitter 1.1
import twitter
from twitter import Api
import sys
import time
reload(sys)
sys.setdefaultencoding('utf-8')
from collections import defaultdict



maxcount=1000
maxid =0
terms=["Rin Yainaga","Eirin","Erin"]
search_str=" OR ".join(terms)

api = Api(base_url="https://api.twitter.com/1.1",
                  consumer_key='XXXXX',
                  consumer_secret='XXXXX',
                  access_token_key='XXXXX',
                  access_token_secret='XXXXX')
rate = api.GetRateLimitStatus()
print "Limit %d / %d" % (rate['resources']['search']['/search/tweets']['remaining'],rate['resources']['search']['/search/tweets']['limit'])
tm = time.localtime(rate['resources']['search']['/search/tweets']['reset'])
print "Reset Time  %d:%d" % (tm.tm_hour , tm.tm_min)
print "-----------------------------------------\n"
found = api.GetSearch(term=search_str,count=100,result_type='recent')
i = 0
while True:
  for f in found:
    if maxid > f.id or maxid == 0:
      maxid = f.id
    print f.text
    i = i + 1
  if len(found) == 0:
    break
  if maxcount <= i:
    break
  print maxid
  found = api.GetSearch(term=search_str,count=100,result_type='recent',max_id=maxid-1)

print "-----------------------------------------\n"
rate = api.GetRateLimitStatus()
print "Limit %d / %d" % (rate['resources']['search']['/search/tweets']['remaining'],rate['resources']['search']['/search/tweets']['limit'])
tm = time.localtime(rate['resources']['search']['/search/tweets']['reset'])
print "Reset Time  %d:%d" % (tm.tm_hour , tm.tm_min)

Système de développement

Vous pouvez télécharger le script qui a évolué à partir de ce qui précède à partir de ce qui suit. https://github.com/mima3/searchTwitter

Le script ci-dessus stocke les résultats de la recherche dans SQLITE. Ce script recherche les tweets passés dans la limite des restrictions d'appel d'API. Lors de la prochaine exécution du script, ce sera comme suit.

__ Si vous avez recherché tous les tweets précédents pouvant être recherchés __ Recherchez les tweets plus récents que les tweets enregistrés dans la base de données.

__ Si les tweets précédents restent __ Recherchez des tweets plus anciens que le tweet précédemment acquis.

Avec ce script, un grand nombre de résultats de recherche peuvent être facilement obtenus.

Recommended Posts

Rechercher sur Twitter avec Python
Publier sur Twitter en utilisant Python
Algorithme de recherche utilisant word2vec [python]
Rechercher des tweets Twitter avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
twitter avec python3
Commencez à utiliser Python
Scraping à l'aide de Python
Tweet à l'aide de l'API Twitter en Python
Python: analyse négative / positive: analyse négative / positive de Twitter à l'aide de RNN-Partie 1
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
Recherche séquentielle avec Python
Séquence de Fibonacci utilisant Python
[Python] Recherche (itertools) ABC167C
Dichotomie avec Python
Nettoyage des données à l'aide de Python
[Python] Recherche (NumPy) ABC165C
Recherche de bisection (python2.7) mémo
[Python] Recherche de bisection ABC155D
Recherche affinée des valeurs de race Pokemon à l'aide de Python
Utilisation des packages Python #external
recherche complète de bits python
Câblage Communication Pi-SPI avec Python
Recherche linéaire en Python
Dichotomie avec python
Calcul de l'âge à l'aide de python
Dichotomie avec Python 3
Identification de nom à l'aide de python
Notes sur l'utilisation de sous-processus Python
Recherche binaire en Python
Essayez d'utiliser Tweepy [Python2.7]
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
mémo python utilisant l'opérateur perl-ternaire
Scraping à l'aide de Python 3.5 async / await
[Python] BFS (recherche de priorité de largeur) ABC168D
Enregistrer des images à l'aide de requêtes python3
[S3] CRUD avec S3 utilisant Python [Python]
[Python] Essayez d'utiliser le canevas de Tkinter
Mémo graphique Twitter avec Python
Obtenez la chronologie Twitter avec Python
Utiliser l'API Twitter avec Python
Recherche de chemin dans le graphique à l'aide de Networkx
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
notes python pour l'utilisation de variables spéciales perl
[Python] Utilisation d'OpenCV avec Python (basique)
Essayez d'utiliser l'API Twitter
Scraping à l'aide de la syntaxe Python 3.5 Async
Surveillance des changements de site Web à l'aide de python
Commencez à Selenium en utilisant python
Homebrew Python - Programme de recherche YouTube
Changer la version de python à l'aide de pyenv
Recherche binaire en Python / C ++
python: principes de base de l'utilisation de scikit-learn ①
# 1 [python3] Calcul simple à l'aide de variables
Recherche de bits complète avec Python
Essayez d'utiliser l'API Twitter
[Python] DFS (recherche de priorité en profondeur) ABC157D