diff --git a/data/img/logo_white_with_name_transparent.png b/data/img/logo_white_with_name_transparent.png
new file mode 100644
index 0000000..3749393
Binary files /dev/null and b/data/img/logo_white_with_name_transparent.png differ
diff --git a/docker-compose.yml b/docker-compose.yml
index b4a696a..98691c5 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,14 +3,12 @@ services:
redis:
image: redis
container_name: orariotreni_redis
- volumes:
+ volumes:
- ./redis-data:/data
- expose:
- - "6379"
-
+
+
bot:
build: .
container_name: orariotreni_bot
links:
- redis
-
diff --git a/requirements.txt b/requirements.txt
index 1906d5b..2c2a87c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,6 +3,6 @@ botogram2
wikipedia
dateutils
progressbar2
-plotly==2.0.8
+matplotlib
image
pyowm
diff --git a/src/updates/callback.py b/src/updates/callback.py
index f1bddbe..3b02573 100644
--- a/src/updates/callback.py
+++ b/src/updates/callback.py
@@ -40,6 +40,9 @@ def process_callback(bot, cb, u):
api = viaggiatreno.API()
utils = viaggiatreno.Utils()
+ if cb.query[-1] == '@':
+ cb.query = cb.query[0:-1]
+
if cb.query == "home":
u.state("home")
text = (
@@ -49,7 +52,7 @@ def process_callback(bot, cb, u):
"\nPremi uno dei tasti qui sotto per iniziare"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{'inline_keyboard': [
@@ -66,17 +69,17 @@ def process_callback(bot, cb, u):
text = (
"Informazioni sul bot"
"\nLink utili"
- "\nβ π€ Contatta lo sviluppatore su Telegram per avere assistenza gratuita "
+ "\nβ π€ Contatta lo sviluppatore su Telegram per avere assistenza gratuita "
"o per proporre una nuova funzione"
- "\nβ Entra nel π’ Canale ufficiale per ricevere news e aggiornamenti "
+ "\nβ Entra nel π’ Canale ufficiale per ricevere news e aggiornamenti "
"in anteprima sul bot"
- "\nβ π° Dona quello che vuoi per tenere il bot online e per supportare "
+ "\nβ π° Dona quello che vuoi per tenere il bot online e per supportare "
"il lavoro dello sviluppatore"
- "\nβ Dai un'occhiata o contribuisci al codice sorgente su π GitHub"
- "\nβ Visualizza le π Statistiche di utilizzo del bot!"
+ "\nβ Dai un'occhiata o contribuisci al codice sorgente su π GitHub"
+ "\nβ Visualizza le π Statistiche di utilizzo del bot!"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{'inline_keyboard': [
@@ -99,7 +102,10 @@ def process_callback(bot, cb, u):
users = []
for user in r.keys("user:*"):
- users.append(int(user[5:]))
+ try:
+ users.append(int(user[5:]))
+ except:
+ pass
active_users = 0
total_users = 0
@@ -142,18 +148,18 @@ def process_callback(bot, cb, u):
text = (
"π Statistiche"
- "\nββ π€ Utenti"
+ "\nββ π€ Utenti"
"\nUtenti attivi: {au}"
"\nUtenti totali: {tu}"
- "\nββ π¬ Comandi"
+ "\nββ π¬ Comandi"
"\nComando /start: {sc} (tu {psc})"
"\nTastiere inline: {cc} (tu {pcc})"
"\nRichieste inline: {iq} (tu {piq})"
- "\nββ πβπ¨ Query"
+ "\nββ πβπ¨ Query"
"\nTreni cercati per numero: {tr_bynum} (tu {ptr_bynum})"
"\nTreni cercati per itinerario: {tr_byiti} (tu {ptr_byiti})"
"\nStazioni cercate per nome: {st} (tu {pst})"
- "\nββ π
Circolazione ferroviaria"
+ "\nββ π
Circolazione ferroviaria"
"\nTreni di oggi: {tt}"
"\nTreni circolanti: {ct}"
"\nUltimo aggiornamento: {lu}"
@@ -167,7 +173,7 @@ def process_callback(bot, cb, u):
lu=format_timestamp(viaggiatreno_stats['ultimoAggiornamento'], "%H:%M"))
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "parse_mode": "HTML",
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "parse_mode": "HTML",
"text": text, "reply_markup":
json.dumps(
{"inline_keyboard": [
@@ -184,7 +190,7 @@ def process_callback(bot, cb, u):
"\n\nVuoi cercare il treno 1οΈβ£ per numero di treno o π€ per itinerario?"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{"inline_keyboard": [
@@ -204,7 +210,7 @@ def process_callback(bot, cb, u):
"\nInserisci il numero di treno (senza nessuna sigla prima, per esempio 9650
)"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{"inline_keyboard":
@@ -223,7 +229,7 @@ def process_callback(bot, cb, u):
"\nInserisci, come prima cosa, la stazione di partenza"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{"inline_keyboard":
@@ -243,7 +249,7 @@ def process_callback(bot, cb, u):
"\nInserisci il nome della stazione che vuoi cercare"
)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{"inline_keyboard":
@@ -257,7 +263,7 @@ def process_callback(bot, cb, u):
raw = api.call("news", 0, "it")
text = format.formatNews(raw)
bot.api.call("editMessageText", {
- "chat_id": cb.chat.id, "message_id": cb.message.message_id, "text": text,
+ "chat_id": cb.chat.id, "message_id": cb.message.id, "text": text,
"parse_mode": "HTML", "reply_markup":
json.dumps(
{"inline_keyboard": [
@@ -274,7 +280,8 @@ def process_callback(bot, cb, u):
departure_station, train = arguments[0].split('_')[0:2]
del(arguments[0])
- raw = api.call('andamentoTreno', departure_station, train)
+ departure_station = departure_station.split('-')[0]
+ raw = api.andamentoTreno(departure_station, train)
if not arguments:
u.increaseStat('stats_trains_bynum')
@@ -282,7 +289,7 @@ def process_callback(bot, cb, u):
text = format.formatTrain(raw)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -298,18 +305,22 @@ def process_callback(bot, cb, u):
elif not arguments[0]:
text = format.formatTrain(raw)
- bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
- 'parse_mode': 'HTML', 'reply_markup':
- json.dumps(
- {"inline_keyboard": [
- [{"text": "π Aggiorna le informazioni", "callback_data": cb.query}],
- [{"text": "π Fermate", "callback_data": "@".join(cb.query.split("@")[:-1]) + "@stops"},
- {"text": "π Grafico ritardo", "callback_data": cb.query + "@graph"}],
- [{"text": "β¬
οΈ Torna indietro", "callback_data": "home"}]
- ]}
- )
- })
+ try:
+ bot.api.call('editMessageText', {
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
+ 'parse_mode': 'HTML', 'reply_markup':
+ json.dumps(
+ {"inline_keyboard": [
+ [{"text": "π Aggiorna le informazioni", "callback_data": cb.query}],
+ [{"text": "π Fermate", "callback_data": "@".join(cb.query.split("@")[:-1]) + "@stops"},
+ {"text": "π Grafico ritardo", "callback_data": cb.query + "@graph"}],
+ [{"text": "β¬
οΈ Torna indietro", "callback_data": "home"}]
+ ]}
+ )
+ })
+ except APIError:
+ pass
+ cb.notify('')
return
elif arguments[0] == "update":
@@ -317,7 +328,7 @@ def process_callback(bot, cb, u):
try:
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -337,7 +348,7 @@ def process_callback(bot, cb, u):
inline_keyboard = format.getStopsInlineKeyboard(raw, cb.query)
text = "Lista fermate del treno {x}".format(x=raw['compNumeroTreno'])
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": inline_keyboard}
@@ -349,7 +360,7 @@ def process_callback(bot, cb, u):
text = format.formatTrainStop(raw, int(arguments[1]))
inline_keyboard = format.generateTrainStopInlineKeyboard(raw, int(arguments[1]))
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'disable_web_page_preview': True, 'reply_markup':
json.dumps({"inline_keyboard": inline_keyboard})
})
@@ -387,7 +398,7 @@ def process_callback(bot, cb, u):
"\nInserisci ora la stazione di arrivo"
)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -409,7 +420,7 @@ def process_callback(bot, cb, u):
b=datetime.now().strftime("%H:%M"))
)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -427,7 +438,7 @@ def process_callback(bot, cb, u):
text = format.formatStation(station_name, station)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -445,7 +456,7 @@ def process_callback(bot, cb, u):
elif len(arguments) == 1 and arguments[0] == "wiki":
text = format.formatStation(station_name, station, withWikiSummary=True)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -467,7 +478,7 @@ def process_callback(bot, cb, u):
inline_keyboard = format.generateStationPagesInlineKeyboard([0, format.ELEMENTS_FOR_PAGE], format.getPagesCount(raw),
station, arguments[0])
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'disable_web_page_preview': True, 'reply_markup':
json.dumps(
{"inline_keyboard": inline_keyboard}
@@ -489,7 +500,7 @@ def process_callback(bot, cb, u):
int(arguments[1])], format.getPagesCount(raw),
station, arguments[0])
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'disable_web_page_preview': True, 'reply_markup':
json.dumps(
{"inline_keyboard": inline_keyboard}
@@ -520,7 +531,7 @@ def process_callback(bot, cb, u):
b=datetime.now().strftime("%H:%M"))
)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -556,7 +567,7 @@ def minifyStation(__str):
raw = api.call('soluzioniViaggioNew', station_a, station_b, date)
text = format.formatItinerary(raw)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'disable_web_page_preview': True, 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -575,7 +586,7 @@ def minifyStation(__str):
"\nSeleziona un opzione:"
)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id,
'text': text, 'parse_mode': 'HTML', 'reply_markup':
json.dumps(
{'inline_keyboard': [
@@ -597,7 +608,7 @@ def minifyStation(__str):
"\nInvia il testo formattato in HTML del post globale"
)
bot.api.call('editMessageText', {
- 'chat_id': cb.chat.id, 'message_id': cb.message.message_id, 'text': text,
+ 'chat_id': cb.chat.id, 'message_id': cb.message.id, 'text': text,
'parse_mode': 'HTML', 'disable_web_page_preview': True, 'reply_markup':
json.dumps(
{"inline_keyboard": [
@@ -635,7 +646,7 @@ def process_inline_callback(bot, cb, u):
departure_station, train = arguments[0].split('_')[0:2]
del(arguments[0])
- raw = api.call('andamentoTreno', departure_station, train)
+ raw = api.andamentoTreno(departure_station, train)
if not arguments:
u.increaseStat('stats_trains_bynum')
diff --git a/src/updates/deeplinking.py b/src/updates/deeplinking.py
index ae4c73f..ac9967f 100644
--- a/src/updates/deeplinking.py
+++ b/src/updates/deeplinking.py
@@ -39,7 +39,7 @@ def process_deeplinking(bot, message, args):
if arguments[0] == "train":
departure_station, train = arguments[1].split('_')[0:2]
- raw = api.call('andamentoTreno', departure_station, train)
+ raw = api.andamentoTreno(departure_station, train)
u.increaseStat('stats_trains_bynum')
diff --git a/src/updates/inline.py b/src/updates/inline.py
index a090d69..d1ecd59 100644
--- a/src/updates/inline.py
+++ b/src/updates/inline.py
@@ -55,10 +55,10 @@ def default_answer():
"\nβΊ Cerca treni, stazioni e itinerari in qualsiasi chat"
"\nPer usare questa funzione basta che scrivi @{username} query
in qualsiasi chat: "
"si aprirΓ un pop-up da dove potrai selezionare il risultato desiderato."
- "\nββοΈ Cerca treni e stazioni"
+ "\nββοΈ Cerca treni e stazioni"
"\nScrivi il numero del treno o il nome della stazione, "
"per esempio @{username} 9650
o @{username} Roma Termini
"
- "\nββοΈ Cerca itinerari"
+ "\nββοΈ Cerca itinerari"
"\nScrivi la stazione di partenza, un trattino - e la stazione di arrivo: "
"per esempio @{username} Milano Centrale - Roma Termini
"
"\nGli itinerari cercati inline sono basati sull'orario attuale"
@@ -91,10 +91,10 @@ def not_found_answer():
"\nβΊ Cerca treni, stazioni e itinerari in qualsiasi chat"
"\nPer usare questa funzione basta che scrivi @{username} query
in qualsiasi chat: "
"si aprirΓ un pop-up da dove potrai selezionare il risultato desiderato."
- "\nββοΈ Cerca treni e stazioni"
+ "\nββοΈ Cerca treni e stazioni"
"\nScrivi il numero del treno o il nome della stazione, "
"per esempio @{username} 9650
o @{username} Roma Termini
"
- "\nββοΈ Cerca itinerari"
+ "\nββοΈ Cerca itinerari"
"\nScrivi la stazione di partenza, un trattino - e la stazione di arrivo: "
"per esempio @{username} Milano Centrale - Roma Termini
"
"\nGli itinerari cercati inline sono basati sull'orario attuale"
@@ -131,7 +131,7 @@ def not_found_answer():
inline_results = []
for result in results:
- raw = api.call('andamentoTreno', result[1], iq.query)
+ raw = api.andamentoTreno(result[1], iq.query)
text = format.formatTrain(raw)
inline_results.append(
{
diff --git a/src/updates/messages.py b/src/updates/messages.py
index 0bca964..5b210f4 100644
--- a/src/updates/messages.py
+++ b/src/updates/messages.py
@@ -61,7 +61,7 @@ def process_messages(bot, message, u):
elif len(results) == 1:
u.increaseStat('stats_trains_bynum')
- raw = api.call('andamentoTreno', results[0][1], message.text) # andamentoTreno; departure station; number
+ raw = api.andamentoTreno(results[0][1], message.text) # andamentoTreno; departure station; number
u.addRecentElement('trains', results[0][1] + "_" + message.text + "@" + raw['compNumeroTreno'])
text = format.formatTrain(raw)
bot.api.call('sendMessage', {
diff --git a/src/viaggiatreno/format.py b/src/viaggiatreno/format.py
index 33ab0df..aadb7e0 100644
--- a/src/viaggiatreno/format.py
+++ b/src/viaggiatreno/format.py
@@ -27,13 +27,11 @@
from datetime import datetime
import botogram
-import plotly
-import plotly.graph_objs as go
-import plotly.plotly as py
import pyowm
import wikipedia
from PIL import Image
from wikipedia.exceptions import PageError
+import matplotlib.pyplot as plt
import config
from . import dateutils
@@ -42,8 +40,7 @@
api = viaggiatreno.API()
utils = viaggiatreno.Utils()
bot = botogram.create(config.BOT_TOKEN)
-owm = pyowm.OWM(config.OWM_API_KEY)
-plotly.tools.set_credentials_file(username=config.PLOTLY_USERNAME, api_key=config.PLOTLY_API_KEY)
+owm = pyowm.OWM(config.OWM_API_KEY).weather_manager()
wikipedia.set_lang("it")
@@ -104,7 +101,7 @@ def getWeather(station_id: str):
return ""
code = owm.weather_at_coords(station_coords[station_id]["lat"], station_coords[station_id]["lon"])\
- .get_weather().get_weather_code()
+ .weather.weather_code
path = os.getcwd() + '/'.join(['', 'data', 'owm', 'weather_codes_it.json'])
with open(path, 'r') as fp:
@@ -259,7 +256,7 @@ def formatDepartures(raw: dict, station: str, xrange: int):
platform = "sconosciuto (errore Trenitalia)"
text += (
- "\n\nββ Treno {n} ({href})"
+ "\n\nββ Treno {n} ({href})"
"\nπ Destinazione: {d}"
"\nπ€ Binario: {b}"
"\nπ Orario di partenza: {dt}"
@@ -313,7 +310,7 @@ def formatArrivals(raw: dict, station: str, xrange: int):
platform = "sconosciuto (errore Trenitalia)"
text += (
- "\n\nββ Treno {n} ({href})"
+ "\n\nββ Treno {n} ({href})"
"\nπ Origine: {d}"
"\nπ€ Binario: {b}"
"\nπ Orario di arrivo: {dt}"
@@ -347,16 +344,17 @@ def formatItinerary(raw: dict):
break
x += 1
- text += "\n\nββ Soluzione {n}".format(n=x)
+ text += "\nβββ Soluzione {n}".format(n=x)
duration = solution.get('durata', 'sconosciuta')
- text += "\nπ Durata: {t}".format(t=duration if duration is not None else 'sconosciuta')
+ text += "\nβπ Durata: {t}".format(t=duration if duration is not None else 'sconosciuta')
for vehicle in solution['vehicles']:
start_time = datetime.strptime(vehicle['orarioPartenza'], '%Y-%m-%dT%H:%M:%S').strftime('%H:%M')
end_time = datetime.strptime(vehicle['orarioArrivo'], '%Y-%m-%dT%H:%M:%S').strftime('%H:%M')
- text += "\nβ Treno {n} ({href})".format(n=vehicle['numeroTreno'], href=gDLHREF(gTCQ(vehicle)))
- text += "\nπ Stazione di partenza: {d} ({dh})".format(d=vehicle['origine'], dh=start_time)
- text += "\nπ Stazione di arrivo: {a} ({ah})".format(a=vehicle['destinazione'], ah=end_time)
+ text += "\nβ£β {t} {n} ({href})".format(t=vehicle['categoriaDescrizione'], n=vehicle['numeroTreno'], href=gDLHREF(gTCQ(vehicle)))
+ text += "\nβ π Stazione di partenza: {d} ({dh})".format(d=vehicle['origine'], dh=start_time)
+ text += "\nβ π Stazione di arrivo: {a} ({ah})".format(a=vehicle['destinazione'], ah=end_time)
+ text +="\nβ"
return text
@@ -374,7 +372,7 @@ def __toBool(__str: str) -> bool:
if not __toBool(news['primoPiano']):
continue
text += (
- "\n\n{pinned}ββ {title}"
+ "\n\n{pinned}ββ {title}"
"\nData: {date}"
"\n{text}"
.format(
@@ -390,7 +388,7 @@ def __toBool(__str: str) -> bool:
continue
text += (
- "\n\n{pinned}ββ {title}"
+ "\n\n{pinned}ββ {title}"
"\nData: {date}"
"\n{text}"
.format(
@@ -530,8 +528,9 @@ def generateTrainGraph(raw: dict):
def apply(a, b):
base = Image.open(a)
logo = Image.open(b)
- logo.thumbnail((120, 120), Image.ANTIALIAS)
- base.paste(logo, (580, 5), mask=logo)
+ logo.thumbnail((150, 150), Image.ANTIALIAS)
+ img_width, img_height = base.size
+ base.paste(logo, (0, -15), mask=logo)
base.save(a)
stops = []
@@ -547,28 +546,21 @@ def apply(a, b):
if len(stops) < 2 or len(delays) < 2:
return False
- line = go.Scatter(
- x=stops,
- y=delays,
- name='Ritardo',
- line=dict(
- color='rgb(205, 12, 24)',
- width=2,
- )
- )
-
- title = 'Ritardo del treno {train}'.format(train=raw['compNumeroTreno'])
- layout = dict(
- title=title,
- xaxis=dict(title='Fermata'),
- yaxis=dict(title='Ritardo (minuti)')
- )
+ title = 'Ritardo del treno {train}'.format(train=raw['compNumeroTreno'])
+ fig, ax = plt.subplots(dpi=200)
- filename = os.getcwd() + ''.join(
- random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(10)) + '.png'
+ ax.axhline(y=0, color='gray', linestyle='--')
+ if any(x >= 60 for x in delays):
+ ax.axhline(y=60, color='red', linestyle='--')
- fig = dict(data=[line], layout=layout)
- py.image.save_as(fig, filename=filename)
+ ax.plot(stops, delays, marker='o')
+ ax.set_title(title)
+ ax.set_xticks(stops, stops, rotation=45, ha='right')
+ ax.set_ylabel('Ritardo (minuti)')
- apply(filename, os.getcwd() + "/data/img/logo_white_with_name.png")
+ fig.tight_layout()
+ filename = os.getcwd() + '/' + ''.join(
+ random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(10)) + '.png'
+ fig.savefig(filename)
+ apply(filename, os.getcwd() + "/data/img/logo_white_with_name_transparent.png")
return filename
diff --git a/src/viaggiatreno/viaggiatreno.py b/src/viaggiatreno/viaggiatreno.py
index c7d6a78..aa06714 100644
--- a/src/viaggiatreno/viaggiatreno.py
+++ b/src/viaggiatreno/viaggiatreno.py
@@ -100,9 +100,9 @@ def _decode_lines(s, linefunc):
def _decode_cercaNumeroTrenoTrenoAutocomplete(s):
def linefunc(line):
- r = re.search('^(\d+)\s-\s(.+)\|(\d+)-(.+)$', line)
+ r = re.search('^(\d+)\s-\s(.+)\|(\d+)-(\w+)-(\d+)', line)
if r is not None:
- return r.group(2, 4)
+ return r.group(2, 4, 5)
return _decode_lines(s, linefunc)
@@ -128,6 +128,7 @@ def __init__(self, **options):
'partenze': _decode_json,
'arrivi': _decode_json,
'news': _decode_json,
+ 'cercaNumeroTreno': _decode_json,
}
self.__default_decoder = lambda x: x
@@ -139,7 +140,7 @@ def call(self, function, *params, **options):
plain = options.get('plainoutput', self.__plainoutput)
verbose = options.get('verbose', self.__verbose)
- base = 'http://www.viaggiatreno.it/viaggiatrenonew/resteasy/viaggiatreno/'
+ base = 'http://www.viaggiatreno.it/infomobilita/resteasy/viaggiatreno/'
path = '/'.join(quote(str(p)) for p in params)
url = base + function + '/' + path
@@ -156,3 +157,17 @@ def call(self, function, *params, **options):
return data
else:
return self.__checkAndDecode(function, data)
+
+ def cercaNumeroTreno(self, numeroTreno):
+ return self.call('cercaNumeroTreno', numeroTreno)
+
+ def andamentoTreno(self, codOrigine, numeroTreno, dataPartenza=None):
+ if dataPartenza is None:
+ infoTreni = self.call('cercaNumeroTrenoTrenoAutocomplete', numeroTreno)
+
+ for infoTreno in infoTreni:
+ if codOrigine == infoTreno[1]:
+ dataPartenza = infoTreno[2]
+ break
+
+ return self.call('andamentoTreno', codOrigine, numeroTreno, dataPartenza)