Als Lernwerkzeug für Pythonista habe ich ein Programm zum Lesen und Verarbeiten von Webseiten geschrieben.
Morioka City Bus Ortungssystem, Seite mit Informationen zum Busbetrieb (http: :), auf der Sie den Fahrplan von </ i> Bussen in Morioka City durchsuchen können. //gps.iwatebus.or.jp/pc/index.htm) ist ein praktischer Webdienst, mit dem Sie den Fahrplan durchsuchen können, wenn Sie den Namen der Bushaltestelle kennen, an der Sie ein- und aussteigen. Als es jedoch auf Safari auf dem iPhone angezeigt wurde, war es unerwartet unpraktisch, da es schwierig war, die Bushaltestelle zu suchen und anzugeben, und die angezeigten Zeichen klein waren. (Persönlicher Eindruck) Als Gegenmaßnahme habe ich eine Workflow-App erstellt und damit den Code der Bushaltestelle überprüft, die ich häufig verwende, und die API zum Erfassen, Verarbeiten und Anzeigen der Daten verwendet. Ich habe beschlossen, es mit Pythonista zu versuchen.
Als Studie habe ich ein Programm erstellt, um die von der API erhaltenen Webdaten durch Angabe des Bushaltestellencodes zu verarbeiten und anzuzeigen. (Den Code der Bushaltestelle finden Sie an der Quelle der Seite, auf der Sie die Bushaltestelle für das Board auswählen können. Ich habe sie in CSV verarbeitet, werde sie jedoch nicht veröffentlichen.)
Die Quelle funktioniert nur mit der Pythonista 2.7-Serie. In der neuen Pythonista 3 konnte urllib2 nicht importiert werden und funktionierte nicht. (Ergänzung: Da es mit den im Kommentar erhaltenen Informationen funktioniert, habe ich die folgende Quelle hinzugefügt.)
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 vor der Morioka Station
goff = "kjg=1&ktr=383". #Code vor 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): #Verarbeiten Sie keine Zeilen mit nur einem Zeichen
if wd == '<!--' or wd == '-->': #Ignorieren Sie das mehrzeilige Kommentar-Tag, solange es verbleibt
pass
elif (len(wd) == 2): #Zweistellige Zeilen sind wahrscheinlich Zeit
if not wd == ';;': #Zeitdaten, sofern nicht zwei Semikolonzeilen vorhanden sind
hr = '[' + wd + ']:' #Zeitdaten speichern
elif wd[0] == ";": #Zeilen, die mit einem Semikolon beginnen, sind "winzige" Daten
od = od + hr + wd.replace(";",'') + "\r" #Verketten Sie Zeitdaten und Minutendaten
else:
od = od + wd.replace(";",'') + "\r" #Verketten Sie andere als die oben genannten Daten, indem Sie das Semikolon löschen
alldata = od.split("\r") #Erstellen Sie ein Array (eine Liste), das durch Zeilenumbrüche getrennt ist
od = ""
for ld in alldata:
if (len(ld) > 0):
if ld[0:5] == '[24]:': #Wenn nach 24:00 Uhr keine "Minuten" -Daten mehr vorhanden sind, werden "Samstag" und "Feiertag" angehängt. Teilen Sie diese also auf.
if ld[7] in '0123456789': #Wenn der Wert nach 24:00 ein numerischer Wert ist, behandeln Sie ihn als Minutendaten
od = od + ld + "\r\n"
else:
od = od + ld[5:len(ld)] + "\r\n" #Da es keine Minutenangaben gibt, werden diese um 24:00 Uhr gelöscht
elif ('[;' in ld): #Ignorieren Sie die Müllleitungen, die während des Vorgangs herauskommen
pass
elif ('[' in ld) and len(ld) == 6: #Ignorieren Sie die Müllleitungen, die während des Vorgangs herauskommen
pass
else:
od = od + ld + "\r\n"
print od.decode('sjis') #Verschieben Sie das Verarbeitungsergebnis-In JIS konvertieren und in die Standardausgabe schreiben
Nachtrag: Pythonista3 enthielt auch eine Bibliothek der 2.x-Serie, daher habe ich mir überlegt, später eine Umschaltmethode zu finden. In den Kommentaren erfahren Sie jedoch, wie Sie die Python 2.x-Serie auf Pythonista3 ausführen. Ich tat. Da ich die Quelle überprüft und Kommentare überarbeitet und hinzugefügt habe, werde ich auch die Quelle hinzufügen, die mit Pythonista3 funktioniert.
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" #--Bushaltestellencode am Bahnhof Morioka
goff = "kjg=1&ktr=383" #--Bushaltestellencode vor Hachimangu
getURL = URL1 + ride + '&' + goff
r = urllib2.urlopen(getURL)
webdata = r.read() #Laden von Webdaten
webdata.decode('sjis') #Daten sind Shift-Da es jis ist, dekodiere es
wdata = re.sub(r'<.*?>', '',webdata) #HTML-Tags löschen
wdata = re.sub(r' ','', wdata) # &Löschen Sie nbsp (lassen Sie das Semikolon absichtlich)
wdata.replace(' ','') #Leerzeichen löschen
wdata.replace(';','\r') #Konvertieren Sie das Semikolon in Zeilenumbruch
alldata = wdata.split('\r') #Erstellen Sie ein Array (eine Liste), das durch Zeilenumbrüche getrennt ist
od = ""
hr = ""
for ld in alldata:
ld.decode('sjis')
wd = ld.lstrip()
if (len(wd) >1): #Verarbeiten Sie keine Zeilen mit nur einem Zeichen
if wd == '<!--' or wd == '-->': #Ignorieren Sie das mehrzeilige Kommentar-Tag, solange es verbleibt
pass
elif (len(wd) == 2): #Zweistellige Zeilen sind wahrscheinlich Zeit
if not wd == ';;': #Zeitdaten, sofern nicht zwei Semikolonzeilen vorhanden sind
hr = '[' + wd + ']:' #Zeitdaten speichern
elif wd[0] == ";": #Zeilen, die mit einem Semikolon beginnen, sind "winzige" Daten
od = od + hr + wd.replace(";",'') + "\r" #Verketten Sie Zeitdaten und Minutendaten
else:
od = od + wd.replace(";",'') + "\r" #Verketten Sie andere als die oben genannten Daten, indem Sie das Semikolon löschen
alldata = od.split("\r") #Erstellen Sie ein Array (eine Liste), das durch Zeilenumbrüche getrennt ist
od = ""
for ld in alldata:
if (len(ld) > 0):
if ld[0:5] == '[24]:': #Wenn nach 24:00 Uhr keine "Minuten" -Daten mehr vorhanden sind, werden "Samstag" und "Feiertag" angehängt. Teilen Sie diese also auf.
if ld[7] in '0123456789': #Wenn der Wert nach 24:00 ein numerischer Wert ist, behandeln Sie ihn als Minutendaten
od = od + ld + "\r\n"
else:
od = od + ld[5:len(ld)] + "\r\n" #Da es keine Minutenangaben gibt, werden diese um 24:00 Uhr gelöscht
elif ('[;' in ld): #Ignorieren Sie die Müllleitungen, die während des Vorgangs herauskommen
pass
elif ('[' in ld) and len(ld) == 6: #Ignorieren Sie die Müllleitungen, die während des Vorgangs herauskommen
pass
else:
od = od + ld + "\r\n"
print od.decode('sjis') #Verschieben Sie das Verarbeitungsergebnis-In JIS konvertieren und in die Standardausgabe schreiben
Recommended Posts