ProHoster > Blog > ynternet nijs > Hoe kinne jo ienfâldige rapporten delegearje oan in robot. Skriuw in bot yn Python en Google BigQuery
Hoe kinne jo ienfâldige rapporten delegearje oan in robot. Skriuw in bot yn Python en Google BigQuery
Hawwe jo taken dy't dei nei dei, wike nei wike werhelje? Bygelyks it skriuwen fan rapporten. Jo freegje gegevens oan, analysearje it, visualisearje it (meitsje grafiken, diagrammen), en stjoer it dan nei jo baas. Mar wat as dit alles automatisearre wie?
Yn dizze tutorial sille wy in bot meitsje foar Telegram dy't sil helpe om rapportaazje te automatisearjen. En it coolste ding is dat it hiele programma sil bestean út mar 50 rigels koade! As jo foar it earst in bot meitsje foar Telegram, dan moatte jo dizze ek lêze post.
As wy de tsjinst wolle brûke, moatte wy de Google BigQuery API ferbine. Om dit te dwaan geane wy nei Google ûntwikkelders konsole en meitsje in nij projekt (of selektearje in besteand).
Selektearje yn it kontrôlepaniel APIS EN TSJINSTEN ynskeakelje en sykje nei BigQuery API.
Selektearje ynskeakelje om de API te ferbinen.
Meitsje in akkount kaai
Litte wy wer nei Google ûntwikkelders konsole, selektearje it ljepblêd Bewizen, Bewiis oanmeitsje en Kaai foar tsjinstkonto.
Dan - Nij tsjinst account, en fier de namme yn it Service account namme fjild.
Selektearje yn 'e útklaplist Rol Projekt > Eigner, dan oanmeitsje.
It bestân dat automatysk ynladen wurdt hjit creds.json.
Stel GOOGLE_APPLICATION_CREDENTIALS yn, spesifisearje it paad nei creds.json yn 'e terminal.
Dizze funksje sil it fersyk weromjaan as in gegevensframe.
Visualisearjen fan gegevens
Om dit probleem op te lossen, kies matplotlib.
ymportearje matplotlib.pyplot as plt
Wy moatte fiif parameters, dêr't x is de x-as gegevens, x_label is de titel foar de as, y is de y-as gegevens, y_label is de titel foar de as, en titel is de titel fan de hiele fisualisaasje.
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
Bewarje de ôfbylding
Litte wy no twa funksjes brûke om in fisualisaasje te meitsjen en op te slaan.
Wy stjoere it oantal berjochten alle dagen publisearre. Earst skriuwe wy in fersyk.
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
"""
De query helpt gegevens te sammeljen foar twa wiken fanôf 2 desimber 2018.
Wy brûke dizze datum omdat 2018-12-02 is de lêste gegevens opnommen yn bigquery-public-data.stackoverflow.post_history, yn oare gefallen kinne jo brûke CURRENT_DATE () te krijen de nijste gegevens.
Rop de query_to_bigquery-funksje op om de gegevens te krijen.
dataframe = query_to_bigquery(query)
Dan brûke wy de datumgegevenskolom foar de x-as, en de kolom total_posts foar de y-as.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Wy fisualisearje it mei de funksje visualize_bar_chart en bewarje it as in ôfbylding.
Wy wrap dizze koade yn in funksje neamd 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')
Stjoer in ôfbylding
Om in rapport nei de ûntfanger te stjoeren, moatte jo de parameter chat_id witte.
Wy brûke userinfobot en typ /start. De bot reagearret mei de nedige ynformaasje, chat_id stiet yn it id-fjild.
Litte wy no de send_image-funksje oanmeitsje. It sil de get_and_save_image-funksje brûke om de ôfbylding op te heljen en te bewarjen. En dan stjoere wy alles nei it goede kontakt.
Uteinlik meitsje wy in oare funksje, haad, om de applikaasje te starten. Ferjit net YOUR_TOKEN te feroarjen foar de bot.
Unthâld: dit programma sil de ôfbylding automatysk ferstjoere op it momint dat jo oantsjutte. Wy stjoere bygelyks alle dagen om njoggen oere in ferslach.