Afficher les horaires du système de localisation des bus Morioka dans Pythonista

En apprenant Pythonista, j'ai écrit un programme pour lire et traiter des pages Web.

Système de localisation de bus Morioka

Système de localisation des bus de la ville de Morioka, page d'informations sur le fonctionnement des bus (http: :) où vous pouvez rechercher les horaires des bus </ i> opérant dans la ville de Morioka //gps.iwatebus.or.jp/pc/index.htm) est un service Web pratique qui vous permet de rechercher les horaires si vous connaissez le nom de l'arrêt de bus où vous montez et descendez. Cependant, lorsqu'il était affiché sur Safari sur l'iPhone, il était inopinément gênant car il était difficile de rechercher et de spécifier l'arrêt de bus et les caractères affichés étaient petits. (Impression personnelle) En guise de contre-mesure, j'ai créé une application Workflow et je l'ai utilisée pour vérifier le code de l'arrêt de bus que j'utilise souvent et j'utilise l'API pour capturer, traiter et afficher les données. J'ai décidé de l'essayer avec Pythonista.

Un programme qui fonctionne pour le moment

À titre d'étude, j'ai réalisé un programme pour traiter et afficher les données Web obtenues à partir de l'API en spécifiant le code d'arrêt de bus. (Vous pouvez trouver le code de l'arrêt de bus à partir de la source de la page pour sélectionner l'arrêt de bus à bord. Je l'ai traité en CSV, mais je m'abstiendrai de le publier)

La source ne fonctionne qu'avec la série Pythonista 2.7. Dans le nouveau Pythonista 3, urllib2 n'a pas pu être importé et ne fonctionnait pas. (Ajout: comme cela fonctionne avec les informations reçues dans le commentaire, j'ai ajouté la source ci-dessous.)

bistable.py


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

import urllib2
import re
import codecs

ps = re.compile(r'<.*?>')
pnbsp = re.compile(r'&nbsp')
prt = re.compile(r'^\n')

URL1 = 'http://gps.iwatebus.or.jp/bls/pc/jikoku_jk.jsp?'
ride = "jjg=1&jtr=241"  #Code devant la gare de Morioka
goff = "kjg=1&ktr=383". #Code devant Morioka Hachimangu

getURL = URL1 + ride + '&' + goff
r = urllib2.urlopen(getURL)
webdata.decode('sjis')
wdata = ps.sub('',webdata)
wdata = pnbsp.sub('',wdata)
wdata = prt.sub('',wdata)
wdata.replace(" ","")
wdata.replace(";","\r")
alldata = wdata.split("\r")

od = ""
hr = ""
for ld in alldata:
	ld.decode('sjis')
	wd = ld.lstrip()
	if (len(wd) >1): #Ne traitez pas les lignes avec un seul caractère
		if wd == '<!--' or wd == '-->': #Ignorez la balise de commentaire multiligne telle qu'elle reste
			pass
		elif (len(wd) == 2): #Les lignes à deux caractères sont probablement le temps
			if not wd == ';;': #Données de temps sauf s'il y a deux lignes de point-virgule
				hr = '[' + wd + ']:' #Stocker les données de temps
		elif wd[0] == ";": #Les lignes commençant par un point-virgule sont des données "minute"
			od = od + hr + wd.replace(";",'') + "\r" #Concaténer les données de temps et les données de minute
		else:
			od = od + wd.replace(";",'') + "\r" #Concaténer des données autres que celles ci-dessus en supprimant le point-virgule

alldata = od.split("\r") #Créer un tableau (liste) séparé par des sauts de ligne
od = ""
for ld in alldata:
	if (len(ld) > 0):
		if ld[0:5] == '[24]:': #S'il n'y a pas de données "minute" après 24h00, "samedi" et "jour férié" seront joints, donc divisez-les.
			if ld[7] in '0123456789': #Si la valeur après 24h00 est une valeur numérique, traitez-la comme une donnée minute
				od = od + ld + "\r\n"
			else:
				od = od + ld[5:len(ld)] + "\r\n" #Puisqu'il n'y a pas de données de minute, elles sont supprimées à 24h00
		elif ('[;' in ld): #Ignorez les lignes de déchets qui sortent pendant le processus
			pass
		elif ('[' in ld) and len(ld) == 6: #Ignorez les lignes de déchets qui sortent pendant le processus
			pass
		else:
			od = od + ld + "\r\n"

print od.decode('sjis') #Décaler le résultat du traitement-Convertir en JIS et écrire sur la sortie standard

Postscript: Pythonista3 incluait également une bibliothèque de la série 2.x, donc je pensais trouver une méthode de commutation plus tard, mais dans les commentaires, dites-moi comment exécuter la série python 2.x sur Pythonista3. J'ai fait. De plus, depuis que j'ai examiné la source et refacturé et ajouté des commentaires, je vais ajouter la source qui fonctionne sur Pythonista3.

busTimeTable3.py


#!python2
# -*- coding: utf-8 -*-

import urllib2
import re
import codecs

URL1 = 'http://gps.iwatebus.or.jp/bls/pc/jikoku_jk.jsp?'
ride = "jjg=1&jtr=241"  #--Code d'arrêt de bus à la gare de Morioka
goff = "kjg=1&ktr=383"  #--Code d'arrêt de bus devant Hachimangu

getURL = URL1 + ride + '&' + goff
r = urllib2.urlopen(getURL)
webdata = r.read()     #Chargement des données Web
webdata.decode('sjis')  #Les données changent-Puisque c'est jis, décode-le
wdata = re.sub(r'<.*?>', '',webdata)  #Effacer les balises HTML
wdata = re.sub(r'&nbsp','', wdata)  # &Effacer nbsp (laissez le point-virgule exprès)
wdata.replace(' ','')   #Effacer les blancs
wdata.replace(';','\r')   #Convertir le point-virgule en saut de ligne
alldata = wdata.split('\r')   #Créer un tableau (liste) séparé par des sauts de ligne
 
od = ""
hr = ""
for ld in alldata:
    ld.decode('sjis')
    wd = ld.lstrip()
    if (len(wd) >1):   #Ne traitez pas les lignes avec un seul caractère
        if wd == '<!--' or wd == '-->':   #Ignorer la balise de commentaire multiligne telle qu'elle reste
            pass
        elif (len(wd) == 2):   #Les lignes à deux caractères sont probablement le temps
            if not wd == ';;':   #Données de temps sauf s'il y a deux lignes de point-virgule
                hr = '[' + wd + ']:'   #Stocker les données de temps
        elif wd[0] == ";":   #Les lignes commençant par un point-virgule sont des données "minute"
            od = od + hr + wd.replace(";",'') + "\r"  #Concaténer les données de temps et les données de minute
        else:
            od = od + wd.replace(";",'') + "\r"   #Concaténer des données autres que celles ci-dessus en supprimant le point-virgule
			
alldata = od.split("\r")  #Créer un tableau (liste) séparé par des sauts de ligne
od = ""
for ld in alldata:
    if (len(ld) > 0):
        if ld[0:5] == '[24]:':  #S'il n'y a pas de données "minute" après 24h00, "samedi" et "jour férié" seront joints, donc divisez-les.
            if ld[7] in '0123456789':  #Si la valeur après 24h00 est une valeur numérique, traitez-la comme une donnée minute
                od = od + ld + "\r\n"
            else:
                od = od + ld[5:len(ld)] + "\r\n"  #Puisqu'il n'y a pas de données de minute, elles sont supprimées à 24h00
        elif ('[;' in ld):  #Ignorez les lignes de déchets qui sortent pendant le processus
            pass
        elif ('[' in ld) and len(ld) == 6:  #Ignorez les lignes de déchets qui sortent pendant le processus
            pass
        else:
            od = od + ld + "\r\n"

print od.decode('sjis')  #Décaler le résultat du traitement-Convertir en JIS et écrire sur la sortie standard

Recommended Posts

Afficher les horaires du système de localisation des bus Morioka dans Pythonista
[IOS] Modifiez la durée d'affichage de chaque image de l'animation GIF dans Pythonista3.
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
Affichage en temps réel de la progression du traitement côté serveur sur le navigateur (implémentation de la barre de progression)
L'histoire de la participation à AtCoder
Affichage de la forme d'onde audio en Python
L'histoire du "trou" dans le fichier
[Android] Afficher des images sur le Web dans la fenêtre info de Google Map
Afficher le statut de l'infection COVID 19 au Japon avec Splunk (version GitHub)
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
J'ai essayé de toucher des méthodes liées au toucher dans le module de scène de pythonista
[Comprendre en 3 minutes] Le début de Linux
Vérifiez le comportement du destroyer en Python
Django ~ Affichons-le sur le navigateur ~
Afficher Python 3 dans le navigateur avec MAMP
L'importance de Lint comme le pense Pythonista
Le résultat de l'installation de python sur Anaconda
Afficher aléatoirement les cartes à jouer dans la scène Pythonista +
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
Statut de chaque système de traitement Python en 2020
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python
Essayez d'afficher la séquence de Fibonacci dans différentes langues comme pratique d'algorithme
Affichage des données d'informations de position en Python --Essayez de tracer avec la bibliothèque d'affichage de carte (folium) -
Correspondance de l'événement selon lequel le résultat de form.is_valid () est toujours False dans le système Django2
Essayez d'afficher les données ferroviaires des informations numériques des terres nationales en 3D