Zeigen Sie den Fahrplan des Morioka-Busortungssystems in Pythonista an

Als Lernwerkzeug für Pythonista habe ich ein Programm zum Lesen und Verarbeiten von Webseiten geschrieben.

Morioka Bus Ortungssystem

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.

Ein Programm, das vorerst funktioniert

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'&nbsp')
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'&nbsp','', 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

Zeigen Sie den Fahrplan des Morioka-Busortungssystems in Pythonista an
[IOS] Ändern Sie die Anzeigezeit für jedes Bild der GIF-Animation in Pythonista3.
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Echtzeitanzeige des serverseitigen Verarbeitungsfortschritts im Browser (Implementierung des Fortschrittsbalkens)
Die Geschichte der Teilnahme an AtCoder
Audio-Wellenform-Anzeige in Python
Die Geschichte des "Lochs" in der Akte
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe versucht, berührungsbezogene Methoden im Szenenmodul von Pythonista zu berühren
[Verständnis in 3 Minuten] Der Beginn von Linux
Überprüfen Sie das Verhalten des Zerstörers in Python
Django ~ Lass es uns im Browser anzeigen ~
Zeigen Sie Python 3 im Browser mit MAMP an
Die Bedeutung von Lint, wie Pythonista denkt
Das Ergebnis der Installation von Python auf Anaconda
Zeigen Sie Spielkarten in der Pythonista + -Szene nach dem Zufallsprinzip an
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Status jedes Python-Verarbeitungssystems im Jahr 2020
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Versuchen Sie, die Fibonacci-Sequenz im Namen der Algorithmuspraxis in verschiedenen Sprachen anzuzeigen
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -
Entsprechung des Ereignisses, dass das Ergebnis von form.is_valid () im Django2-System immer falsch ist
Versuchen Sie, die Eisenbahndaten der nationalen Landnummern in 3D anzuzeigen