ÅÄÖ GTFS RT
Hej
Jag har ett problem med åäö ur framförallt servicealerts för Östgötatrafiken. Jag vet inte om jag kan ha missat någon header för att få svaret bra encodat från början, men hur som ser svaret ut som nedan. Jag är högst osäker på om detta är specifikt ÖT problem eller om det är ett generellt problem i mitt pythonscript. Hoppas någon har nåt bra förslag.
Jag har dessutom svårt att hitta testmiljön för api anrop.
delar av api svar Ä=\303 vilket tyder på att jag skulle behöva decoda detta på något vis.
description_text {
translation {
text: " Aspn\303\244set - Berga centrum kl 13:14 \303\244r f\303\266rsenad cirka 10 minuter p\303\245 grund av fordonsfel. "
}
pythonscript
#-*- coding: utf-8 -*-
from google.transit import gtfs_realtime_pb2
import requests
headers={'accept':'application/zip','Accept-encoding':'br, gzip, deflate','If-Modified-Since': 'Mon, 13 Jul 2020 04:24:36 GMT','If-None-Match':'bfc13a64729c4290ef5b2c2730249c88ca92d82d','Method':'GET','ContentType':'application/zip'}
feed = gtfs_realtime_pb2.FeedMessage()
response = requests.get('https://opendata.samtrafiken.se/gtfs-rt/otraf/ServiceAlerts.pb?key=???????????????????????????????', headers=headers)
open('output.pb','wb').write(response.content)
feed.ParseFromString(response.content)
for entity in feed.entity:
if entity.HasField('id'):
print(entity)
Jag har ett problem med åäö ur framförallt servicealerts för Östgötatrafiken. Jag vet inte om jag kan ha missat någon header för att få svaret bra encodat från början, men hur som ser svaret ut som nedan. Jag är högst osäker på om detta är specifikt ÖT problem eller om det är ett generellt problem i mitt pythonscript. Hoppas någon har nåt bra förslag.
Jag har dessutom svårt att hitta testmiljön för api anrop.
delar av api svar Ä=\303 vilket tyder på att jag skulle behöva decoda detta på något vis.
description_text {
translation {
text: " Aspn\303\244set - Berga centrum kl 13:14 \303\244r f\303\266rsenad cirka 10 minuter p\303\245 grund av fordonsfel. "
}
pythonscript
#-*- coding: utf-8 -*-
from google.transit import gtfs_realtime_pb2
import requests
headers={'accept':'application/zip','Accept-encoding':'br, gzip, deflate','If-Modified-Since': 'Mon, 13 Jul 2020 04:24:36 GMT','If-None-Match':'bfc13a64729c4290ef5b2c2730249c88ca92d82d','Method':'GET','ContentType':'application/zip'}
feed = gtfs_realtime_pb2.FeedMessage()
response = requests.get('https://opendata.samtrafiken.se/gtfs-rt/otraf/ServiceAlerts.pb?key=???????????????????????????????', headers=headers)
open('output.pb','wb').write(response.content)
feed.ParseFromString(response.content)
for entity in feed.entity:
if entity.HasField('id'):
print(entity)
Följ inlägget
1
följare
Eftersom att du sparar response.content som binär data i filen borde den delen gå bra.
Det kan dock kanske vara att du måste använde .decode(encoding='utf-8') för att avkoda de parsade entiteter (alltså i den sista raden i din exempel-kod).
Ett exempel hittar du här: https://stackoverflow.com/questions/13110629/decoding-utf-8-strings-in-python.
Vi har inget testmiljö som är publikt tillgängligt.
Hälsningar,
Bert
script.py
#-*- coding: utf-8 -*-
from google.transit import gtfs_realtime_pb2
import requests
headers={'accept':'application/zip','Accept-encoding':'br, gzip, deflate','If-Modified-Since': 'Mon, 13 Jul 2020 04:24:36 GMT','If-None-Match':'bfc13a64729c4290ef5b2c2730249c88ca92d82d','Method':'GET','Conten>feed = gtfs_realtime_pb2.FeedMessage()
response = requests.get('https://opendata.samtrafiken.se/gtfs-rt/otraf/ServiceAlerts.pb?key=???????????????????????????????', headers=headers)
open('output.pb','wb').write(response.content)
feed.ParseFromString(response.content)
for entity in feed.entity:
if entity.HasField('id'):
text=entity.decode("utf-8")
print(text)
#-*- coding: utf-8 -*-
from google.transit import gtfs_realtime_pb2
import requests
headers={'accept':'application/zip','Accept-encoding':'br, gzip, deflate','If-Modified-Since': 'Mon, 13 Jul 2020 04:24:36 GMT','If-None-Match':'bfc13a64729c4290ef5b2c2730249c88ca92d82d','Method':'GET','ContentType':'application/zip'}
feed = gtfs_realtime_pb2.FeedMessage()
response = requests.get('https://opendata.samtrafiken.se/gtfs-rt/otraf/ServiceAlerts.pb?key=????????????????????????????????', headers=headers)
open('output.pb','wb').write(response.content)
feed.ParseFromString(response.content)
for entity in feed.entity:
if entity.HasField('id'):
## testat två varianter med och utan decodesom första argument.
txt=entity.decode("utf-8").encode("windows-1252").decode("utf-8")
print(entity)
Jag testade och det fungerar bra när man läser specifika fält. Det krånglar bara när man skriver ut hela meddelandet:
from google.transit import gtfs_realtime_pb2
import requests
headers={'accept':'application/zip','Accept-encoding':'br, gzip, deflate','If-Modified-Since': 'Mon, 13 Jul 2020 04:24:36 GMT','If-None-Match':'bfc13a64729c4290ef5b2c2730249c88ca92d82d','Method':'GET','ContentType':'application/zip'}
feed = gtfs_realtime_pb2.FeedMessage()
response = requests.get('https://opendata.samtrafiken.se/gtfs-rt/otraf/ServiceAlerts.pb?key=', headers=headers)
open('output.pb','wb').write(response.content)
feed.ParseFromString(response.content)
for entity in feed.entity:
if entity.HasField('alert'):
print(entity.alert.header_text.translation[0].text)
skriver ut
Hållplats Bollhusgatan avstängd 13 oktober - 30 januari
Hållplats Gusums centrum flyttas tillfälligt 16 - 29 januari
Krösatågen ersätts med buss mellan Linköping och Västervik 19 januari
Hälsningar,
Bert
Denna hjälp tog mig ett steg längre så nu kan jag få rätsida på åäö. Jag kommer hårdkoda en riktig .json från denna data för att sedan publicera realtidsdata och störningar på min avgångstavla som kommer täcka min buss och tågtrafik i samma vy. Klockrent att denna möjlighet finns även om vi hobby kodare kan ha det lite motigt ibland.
För närvarande har jag ett gäng frågor till, men de kommer tas i separata trådar om jag inte löser dem.
Trevlig helg.
Hälsningar,
Bert