[PYTHON] Obtenez des informations sur les retards sur Twitter et tweet

Ceci est le premier message.

Cela fait deux mois que j'ai rencontré python. Il était tard pour se rencontrer. Et je suis un débutant en programmation, donc je suis faible! Code. S'il vous plaît, pardonnez-moi. Je l'ai fait parce que je voulais faire une prédiction avant l'annonce officielle, comme les informations de retard de chaque ligne de chemin de fer. Juste auto-satisfaction!

L'environnement utilise la série python 2.

Autoriser les tweets de python

Si vous n'activez pas d'abord les tweets avec python, rien ne démarrera. Veuillez définir depuis Application Twitter et obtenir la clé.

#Réglez la clé
CONSUMER_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX"
CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

#Créer une instance d'API
api = tweepy.API(auth)

C'est la préparation.

Rechercher des mots applicables dans les tweets

Vous devez d'abord obtenir le tweet. J'ai évoqué d'autres articles.

Recevez 100 tweets

Un programme fragmenté qui récupère les tweets et les génère dans un fichier. Il n'est pas nécessaire de générer une sortie dans un fichier, mais je voulais juste faire une entrée / sortie de fichier. Essayez, sauf pour qu'il n'y ait pas d'erreur lorsque les caractères sont déformés. C'est comme un débutant.

for tweet in api.search(q=query, count=100):
		try:
			f.write(tweet.text.encode("utf-8"))
			f.write("\n")
		except:
			pass

Je vous laisse entrer ce qui a été produit ici.

#Codecs ouverts pour éviter les fichiers déformés
f_in = codecs.open('XXXXXXX.txt','r','utf-8')

lines = f_in.readlines()

Chaîne de recherche

keywords =[u'retard', u'retard']
query = ' OR '.join(keywords)

Obtenez des tweets de choses qui ont été capturées dans la recherche OU pour «retard» et «retard» comme mots clés.

J'aimerais un tweet comme celui-ci si possible.

** Quelle? De plus, Tato est en retard, mais w delay est la valeur par défaut w **

** D'une manière ou d'une autre, le retard de Toyoko est en quelque sorte **

C'est un tweet merveilleusement inutile et bon. De tels tweets n'élimineront pas le retard, mais ils peuvent être utilisés pour obtenir des informations.

Combien d'itinéraires rechercher

Dans mon cas, Tokyu est réputé pour ses retards, je vais donc enquêter. Nous avons également créé un dictionnaire pour chaque itinéraire, y compris les itinéraires qui fonctionnent directement les uns par rapport aux autres.

train = {
		u"Tato" : { "count" : 0 , "flag" : 0},
		u"Toyoko" : { "count" : 0 , "flag" : 0},
		u"Oi" : { "count" : 0 , "flag" : 0},
		u"Meguro" : { "count" : 0 , "flag" : 0},
		u"Hanzomon" : { "count" : 0 , "flag" : 0},
		u"Tobu Sky Tree" : { "count" : 0 , "flag" : 0},
		u"Sous-centre" : { "count" : 0 , "flag" : 0},
		u"Tojo" : { "count" : 0 , "flag" : 0},
		u"Seibu Ikebukuro" : { "count" : 0 , "flag" : 0},
		u"Mita" : { "count" : 0 , "flag" : 0}
		}

count est le nombre de hits de nom de route à partir de 100 tweets. Pour le drapeau, saisissez 1 lorsque vous tweetez. (= Pour éviter les tweets continus)

Comme tous ceux qui le comprennent, la ligne Nanboku, qui est directement connectée à la ligne Meguro, et le chemin de fer à grande vitesse Saitama ont disparu pour une raison quelconque. ~~ Je l'ai omis. Je pensais que je ne serais pas si tard.

Recherchez et prévoyez ces derniers.

une fonction

J'ai créé une fonction de comptage et de tweet. count C'est une fonction qui compte le nombre de hits d'itinéraire à partir de tweets.

def count_tweet(lines, word):
	count = 0
	for line in lines:
		if line.find(word) > -1:
			count = count + 1
	return count

lines est l'entrée du fichier.

train[u"Tato"]["count"] = count_tweet(lines, u"Tato")

Utilisez-le comme ça. tweet C'est une fonction de tweeter.

def tweet(count, word, flag):
	if count > 10 and flag == 0:
		api.update_status(status=str(now.hour)+u"Temps"+str(now.minute)+u"Obtenez des informations minutieuses"+word+u"Possibilité de retard")
		flag = 1
	else:
		flag = 0
	return flag

Dans cette fonction, on estime qu'il existe une possibilité de retard lorsque 11 comptes ou plus.

Si je tweet, je mets un drapeau pour que la prochaine fois que je me réfère à cette fonction, je passe toujours à else. Cela empêchera les tweets consécutifs. Je pense qu'il y a en fait une manière différente ...

train[u"Tato"]["flag"] = tweet(train[u"Tato"]["count"], 	u'Tato', train[u"Tato"]["flag"])

Utilisez-le comme ça.

Résultat d'exécution

L'affichage sera également affiché sur la console.

(Capture.PNG)

La Tobu Sky Tree Line est longue, j'ai donc choisi la ligne Isezaki. Les tweets seront créés sur la Tobu Sky Tree Line.

Résultat du Tweet

Ce sera comme ça. キャプチャ2.PNG

Détails

Utilisez le mode veille dans la boucle while, arrêtez-vous pendant 300 secondes (= 5 minutes), puis retournez-le.

En mettant du temps dans le tweet, nous essayons d'empêcher le même tweet.

J'écrirai le code ici.

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

import tweepy
import codecs
import datetime
from time import sleep

#Définir diverses clés
CONSUMER_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX"
CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

#Créer une instance d'API
api = tweepy.API(auth)
#Rechercher du contenu
keywords =[u'retard', u'retard']
query = ' OR '.join(keywords)

#Nombre de contenu de recherche
def count_tweet(lines, word):
	count = 0
	for line in lines:
		if line.find(word) > -1:
			count = count + 1
	return count

#Jugement du Tweet
def tweet(count, word, flag):
	if count > 5 and flag == 0:
		api.update_status(status=str(now.hour)+u"Temps"+str(now.minute)+u"Obtenez des informations minutieuses"+word+u"Possibilité de retard")
		flag = 1
	else:	
		flag = 0
	return flag

train = {
		u"Tato" : { "count" : 0 , "flag" : 0},
		u"Toyoko" : { "count" : 0 , "flag" : 0},
		u"Oi" : { "count" : 0 , "flag" : 0},
		u"Meguro" : { "count" : 0 , "flag" : 0},
		u"Hanzomon" : { "count" : 0 , "flag" : 0},
		u"Tobu Sky Tree" : { "count" : 0 , "flag" : 0},
		u"Sous-centre" : { "count" : 0 , "flag" : 0},
		u"Tojo" : { "count" : 0 , "flag" : 0},
		u"Seibu Ikebukuro" : { "count" : 0 , "flag" : 0},
		u"Mita" : { "count" : 0 , "flag" : 0}
		}

while 1:
	f = open('XXXXXX.txt','w')
	print "--------------------------------------------------------------------------------"
	#Obtenir l'heure actuelle
	now = datetime.datetime.today()
	
	#Affichage de l'heure actuelle
	print(str(now.hour)+u'Temps'+str(now.minute)+u'Minutes'+str(now.second)+u'Obtenez une seconde information')
	
	#Entrez 100 tweets sur la dernière recherche de requête
	for tweet in api.search(q=query, count=100):
		try:
			f.write(tweet.text.encode("utf-8"))
			f.write("\n")
		except:
			pass
	f.close()

	#Codecs ouverts pour éviter les fichiers déformés
	f_in = codecs.open('XXXXXX.txt','r','utf-8')
	#Obtenir ligne par ligne
	lines = f_in.readlines()

	train[u"Tato"]["count"] = count_tweet(lines, u"Tato")
	train[u"Toyoko"]["count"] = count_tweet(lines, u"Toyoko")
	train[u"Oi"]["count"] = count_tweet(lines, u"Oi")
	train[u"Meguro"]["count"] = count_tweet(lines, u"Meguro")
	train[u"Hanzomon"]["count"] = count_tweet(lines, u"Hanzomon")
	train[u"Tobu Sky Tree"]["count"] = count_tweet(lines, u"Tobu Sky Tree")
	train[u"Sous-centre"]["count"] = count_tweet(lines, u"Sous-centre")
	train[u"Tojo"]["count"] = count_tweet(lines, u"Tojo")
	train[u"Seibu Ikebukuro"]["count"] = count_tweet(lines, u"Seibu Ikebukuro")
	train[u"Mita"]["count"] = count_tweet(lines, u"Mita")


	print(u'Ligne ville rurale:'+ str(train[u"Tato"]["count"])    +' counts')
	print(u'Ligne Toyoko:'+ str(train[u"Toyoko"]["count"])    +' counts')
	print(u'Ligne Oimachi:'+ str(train[u"Oi"]["count"])    +' counts')
	print(u'Ligne Meguro:'+ str(train[u"Meguro"]["count"])    +' counts')
	print(u'Ligne Hanzomon:'+ str(train[u"Hanzomon"]["count"])  +' counts')
	print(u'Ligne Tobu Isezaki:'+ str(train[u"Tobu Sky Tree"]["count"])+' counts')
	print(u'Ligne Fukutoshin:'+ str(train[u"Sous-centre"]["count"])  +' counts')
	print(u'Ligne Tobu Tojo:'+ str(train[u"Tojo"]["count"])    +' counts')
	print(u'Ligne Seibu Ikebukuro:'+ str(train[u"Seibu Ikebukuro"]["count"]) +' counts')
	print(u'Ligne Toei Mita:'+ str(train[u"Mita"]["count"])    +' counts')


	train[u"Tato"]["flag"] = tweet(train[u"Tato"]["count"], 	u'Tato', 	train[u"Tato"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Toyoko"]["count"], 	u'Toyoko', 	train[u"Toyoko"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Oi"]["count"], 	u'Oi町', 	train[u"Oi"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Meguro"]["count"], 	u'Meguro線', 	train[u"Meguro"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Hanzomon"]["count"],	u'Hanzomon', 	train[u"Hanzomon"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Tobu Sky Tree"]["count"], u'Tobu Sky Treeライン', train[u"Tobu Sky Tree"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Sous-centre"]["count"], 	u'Vice-capital', 	train[u"Sous-centre"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Tojo"]["count"], 	u'Tojo', 	train[u"Tojo"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Seibu Ikebukuro"]["count"], u'Seibu Ikebukuro', train[u"Meguro"]["flag"])
	train[u"Tato"]["flag"] = tweet(train[u"Mita"]["count"], 	u'Mita', 	train[u"Meguro"]["flag"])
	
	
	print "--------------------------------------------------------------------------------"
	f_in.close()
	sleep(300)
print("finish.")

Résumé

Il existe divers facteurs qui causent des retards ferroviaires. Si vous suspendez la conduite en raison de blessures, d'un problème de signal, d'une catastrophe naturelle, etc., il faudra beaucoup de temps pour que l'horaire soit perturbé. Je n'y pense pas.

Il est fort possible que vous soyez 10 minutes en retard aux heures de pointe du matin, et si vous le remarquez chez vous plutôt qu'après votre arrivée à la gare, votre marge de manœuvre sera assez différente. Il nous est absolument impossible de revenir à l'horaire normal que le train soit en retard. Ce que vous pouvez faire, c'est ce que vous faites. Vérité universelle.

J'ai ce programme en cours d'exécution tout le temps sur mon Raspberry Pi 2 à la maison.

Je l'ai écrit pendant longtemps, mais c'est la fin. Si vous avez des erreurs ou des suggestions, veuillez laisser un commentaire.

Recommended Posts

Obtenez des informations sur les retards sur Twitter et tweet
Obtenez l'historique des tweets de célébrités sur Twitter
Recevez uniquement des tweets d'images sur Twitter
[Memo] Tweet sur Twitter avec Python
Obtenez des signets Twitter sur CentOS en utilisant Selenium
Programme pour obtenir les images préférées de Twitter
Voir les informations sur les fichiers et les dossiers sur python
Obtenez des images d'utilisateurs spécifiques sur Twitter
Utiliser l'API Twitter (enregistrement de compte API et acquisition de tweet)
twitter avec python3
Obtenez des informations sur les 100 utilisateurs techniques de Twitter les plus influents au monde avec python.
Obtenir les données utilisateur Twitter
délais - Informations sur les différents mécanismes de délai / sommeil du noyau
Étapes pour mesurer la couverture et obtenir des badges sur codecov.io
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Tweetez le triple pronostic de la course de bateaux sur Twitter
Obtenez des tweets Twitter, des followers, des followers, des likes, avec urllib et beautifulSoup
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
[Linux] Obtenir des informations sur les ressources Linux
Nombre de personnages sur Twitter
[google-oauth] Obtenir des informations sur l'utilisateur
Informations de raclage Web sur les programmes de rire et notification en ligne
Les débutants acquièrent des informations sur les balises Qiita et visualisent et considèrent le TOP10.
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"
Rationalisez la collecte d'informations avec l'API Twitter et les robots Slack
Les débutants de l'API Google Maps et de l'API Twitter ont créé "Tweet Map"
Collecte d'informations sur Twitter avec Python (intégration de MySQL et Python)
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack