En apprenant Pythonista, j'ai écrit un programme pour lire et traiter des pages Web.
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.
À 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' ')
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' ','', 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