ProHoster > Blog > nutizie internet > Cumu delegate rapporti simplici à un robot. Scrivemu un bot in Python è Google BigQuery
Cumu delegate rapporti simplici à un robot. Scrivemu un bot in Python è Google BigQuery
Avete travaglii chì si ripetenu ghjornu dopu ghjornu, settimana dopu settimana? Per esempiu, scrive rapporti. Richiede dati, analizà, visualisate (fate grafici, charts), è poi mandate à u vostru capu. Ma chì si tuttu questu era automatizatu?
In questu tutoriale creeremu un bot per Telegram chì aiuterà à automatizà a rappurtazione. È a cosa più bella hè chì tuttu u prugramma serà custituitu da solu 50 linee di codice! Sè vo site à creà un bot per Telegram per a prima volta, allora duvete ancu leghje questu post.
Se vulemu usà u serviziu, avemu bisognu di cunnette l'API Google BigQuery. Per fà questu andemu à Google Console Developers è creanu un novu prughjettu (o selezziunate un esistente).
In u pannellu di cuntrollu, selezziunate ENABLE APIS AND SERVICES è cercate BigQuery API.
Sceglite Enable per cunnette l'API.
Crea una chjave di u contu
Andemu di novu Google Console Developers, selezziunate a tabulazione Credenziali, Crea credenziali è Chjave di u contu di serviziu.
Allora - New contu serviziu, è entre u nomu in u campu di u nomu contu Service.
Da a lista di Rule, selezziunate Prughjettu> Proprietariu, dopu Crea.
U schedariu chì serà scaricatu automaticamente hè chjamatu creds.json.
Stabilisci GOOGLE_APPLICATION_CREDENTIALS, specificendu u percorsu à creds.json in u terminal.
Sta funzione torna a dumanda cum'è un quadru di dati.
Visualizà i dati
Per risolve stu prublema, sceglite matplotlib.
impurtà matplotlib.pyplot cum'è plt
Avemu bisognu di cinque paràmetri, induve x hè a data di l'assi x, x_label hè u titulu per l'assi, y hè a data di l'assi y, y_label hè u titulu per l'assi, è u titulu hè u titulu di a visualizazione sana.
def visualize_bar_chart(x, x_label, y, y_label, title):
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
index = np.arange(len(x))
plt.xticks(index, x, fontsize=5, rotation=30)
plt.bar(index, y)
return plt
Salvà l'imagine
Avà usemu duie funzioni per creà una visualizazione è salvà.
Manderemu u numeru di posti publicati ogni ghjornu. Prima scrivemu una dumanda.
query = """
SELECT DATE(creation_date) date, COUNT(*) total_posts
FROM `bigquery-public-data.stackoverflow.post_history`
GROUP BY 1
HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
ORDER BY 1
"""
A dumanda aiuta à cullà dati per duie settimane à partesi da u 2 di dicembre di u 2018.
Avemu aduprà sta data perchè 2018-12-02 hè l'ultime dati arregistrati in bigquery-public-data.stackoverflow.post_history, in altri casi pudete aduprà CURRENT_DATE () per uttene i dati più recenti.
Chjamate a funzione query_to_bigquery per uttene i dati.
dataframe = query_to_bigquery (interrogazione)
Allora usemu a colonna di data data per l'assi x, è a colonna total_posts per l'assi y.
x = dataframe ['data'].tolist()
y = dataframe ['total_posts'].tolist()
Visualizemu cù a funzione visualize_bar_chart è salvemu cum'è una maghjina.
Imbulighjamu stu codice in una funzione chjamata get_and_save_image.
def get_and_save_image():
query = """
SELECT DATE(creation_date) date, COUNT(*) total_posts
FROM `bigquery-public-data.stackoverflow.post_history`
GROUP BY 1
HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
ORDER BY 1
"""
dataframe = query_to_bigquery(query)
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
plt.savefig('viz.png')
Mandate una maghjina
Per mandà un rapportu à u destinatariu, avete bisognu di cunnosce u paràmetru chat_id.
Avemu aduprà userinfobot è scrive / start. U bot risponde cù l'infurmazioni necessarii, chat_id hè cuntenutu in u campu id.
Avà criemu a funzione send_image. Aduprà a funzione get_and_save_image per ricuperà è salvà l'imaghjini. E poi mandemu tuttu à u cuntattu currettu.
Infine, creamu una altra funzione, principale, per lancià l'applicazione. Ùn vi scurdate di cambià YOUR_TOKEN per u bot.
Ricurdativi: stu prugramma mandarà l'imaghjini automaticamente à u mumentu chì specificate. Per esempiu, manderemu un rapportu à nove ore di a matina ogni ghjornu.