ProHoster > Blog > internetne novice > Kako prenesti preprosta poročila na robota. Pisanje bota v Pythonu in Google BigQuery
Kako prenesti preprosta poročila na robota. Pisanje bota v Pythonu in Google BigQuery
Ali imate naloge, ki se ponavljajo dan za dnem, teden za tednom? Na primer pisanje poročil. Zahtevate podatke, jih analizirate, vizualizirate (naredite grafe, grafikone) in jih nato pošljete svojemu šefu. Kaj pa, če bi bilo vse to avtomatizirano?
V tej vadnici bomo ustvarili bota za Telegram, ki bo pomagal avtomatizirati poročanje. In najbolj kul je, da bo celoten program sestavljen iz samo 50 vrstic kode! Če prvič ustvarjate bota za Telegram, potem morate prebrati tudi to post.
Če želimo uporabljati storitev, moramo povezati Google BigQuery API. Da bi to naredili, gremo na Google Developers Console in ustvarite nov projekt (ali izberite obstoječega).
Na nadzorni plošči izberite OMOGOČI APIS IN STORITVE in poiščite BigQuery API.
Izberite Omogoči, da povežete API.
Ustvarite ključ računa
Pojdimo znova Google Developers Console, izberite zavihek Poverilnice, Ustvari poverilnice in Ključ računa storitve.
Nato - Nov račun storitve in vnesite ime v polje Ime računa storitve.
Na spustnem seznamu Vloga izberite Projekt > Lastnik in nato Ustvari.
Datoteka, ki bo samodejno prenesena, se imenuje creds.json.
Nastavite GOOGLE_APPLICATION_CREDENTIALS in navedite pot do creds.json v terminalu.
Potrebujemo pet parametrov, kjer so x podatki o osi x, x_label je naslov za os, y so podatki o y-osi, y_label je naslov za os in naslov je naslov celotne vizualizacije.
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
Shranite sliko
Zdaj pa uporabimo dve funkciji za ustvarjanje vizualizacije in njeno shranjevanje.
Pošiljali vam bomo dnevno število objavljenih objav. Najprej napišemo prošnjo.
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
"""
Poizvedba pomaga zbirati podatke za dva tedna od 2. decembra 2018.
Ta datum uporabljamo, ker je 2018-12-02 zadnji podatek, zabeležen v bigquery-public-data.stackoverflow.post_history, v drugih primerih pa lahko uporabite CURRENT_DATE(), da dobite najnovejše podatke.
Za pridobitev podatkov pokličite funkcijo query_to_bigquery.
dataframe = query_to_bigquery(poizvedba)
Nato uporabimo stolpec datumskih podatkov za os x in stolpec total_posts za os y.
x = podatkovni okvir['datum'].tolist()
y = dataframe['total_posts'].tolist()
Vizualiziramo ga s funkcijo visualize_bar_chart in shranimo kot sliko.
To kodo zavijemo v funkcijo, imenovano 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')
Pošlji sliko
Če želite poslati poročilo prejemniku, morate poznati parameter chat_id.
Uporaba userinfobot in vnesite /start. Bot odgovori s potrebnimi informacijami, chat_id je v polju id.
Zdaj pa ustvarimo funkcijo send_image. Za pridobitev in shranjevanje slike bo uporabil funkcijo get_and_save_image. In potem vse pošljemo na pravi kontakt.