ProHoster > Blogs > interneta ziņas > Kā deleģēt vienkāršas atskaites robotam. Bota rakstīšana programmās Python un Google BigQuery
Kā deleģēt vienkāršas atskaites robotam. Bota rakstīšana programmās Python un Google BigQuery
Vai jums ir uzdevumi, kas atkārtojas dienu no dienas, nedēļu pēc nedēļas? Piemēram, ziņojumu rakstīšana. Jūs pieprasāt datus, analizējiet tos, vizualizējiet (veidojiet grafikus, diagrammas) un pēc tam nosūtiet to savam priekšniekam. Bet ja tas viss būtu automatizēts?
Šajā apmācībā mēs izveidosim Telegram robotprogrammu, kas palīdzēs automatizēt ziņošanu. Un pats foršākais ir tas, ka visa programma sastāvēs tikai no 50 koda rindām! Ja telegrammas robotu veidojat pirmo reizi, jums vajadzētu izlasīt arī šo post.
Ja vēlamies izmantot pakalpojumu, mums ir jāpievieno Google BigQuery API. Lai to izdarītu, mēs ejam uz Google izstrādātāju konsoles un izveidojiet jaunu projektu (vai atlasiet esošu).
Vadības panelī atlasiet IESPĒJOT API UN PAKALPOJUMU un meklējiet BigQuery API.
Atlasiet Iespējot, lai izveidotu savienojumu ar API.
Izveidojiet konta atslēgu
Iesim vēlreiz Google izstrādātāju konsoles, atlasiet cilni Akreditācijas dati, Izveidot akreditācijas datus un pakalpojuma konta atslēgu.
Pēc tam — Jauns pakalpojuma konts un laukā Pakalpojuma konta nosaukums ievadiet nosaukumu.
Nolaižamajā sarakstā Loma atlasiet Projekts > Īpašnieks un pēc tam — Izveidot.
Fails, kas tiks automātiski lejupielādēts, tiek saukts par creds.json.
Iestatiet GOOGLE_APPLICATION_CREDENTIALS, terminālī norādot ceļu uz creds.json.
Lai atrisinātu šo problēmu, izvēlieties matplotlib.
importēt matplotlib.pyplot kā plt
Mums ir nepieciešami pieci parametri, kur x ir x ass dati, x_label ir ass nosaukums, y ir y ass dati, y_label ir ass nosaukums un nosaukums ir visas vizualizācijas nosaukums.
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
Saglabājiet attēlu
Tagad izmantosim divas funkcijas, lai izveidotu vizualizāciju un saglabātu to.
Publicēto ziņu skaitu nosūtīsim katru dienu. Vispirms mēs uzrakstām pieprasījumu.
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
"""
Vaicājums palīdz apkopot datus par divām nedēļām, sākot no 2. gada 2018. decembra.
Mēs izmantojam šo datumu, jo 2018-12-02 ir jaunākie dati, kas ierakstīti failā bigquery-public-data.stackoverflow.post_history, citos gadījumos varat izmantot CURRENT_DATE(), lai iegūtu jaunākos datus.
Lai iegūtu datus, izsauciet funkciju query_to_bigquery.
datu rāmis = query_to_bigquery(query)
Pēc tam mēs izmantojam datuma datu kolonnu x asij un sleju total_posts y asij.
x = datu rāmis['datums'].tolist()
y = datu rāmis['total_posts'].tolist()
Mēs to vizualizējam, izmantojot visualize_bar_chart funkciju, un saglabājam kā attēlu.
Mēs iesaiņojam šo kodu funkcijā 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')
Nosūtiet attēlu
Lai nosūtītu ziņojumu adresātam, jums jāzina parametrs chat_id.
Mēs izmantojam lietotāja infobots un ierakstiet /sākt. Bots atbild ar nepieciešamo informāciju, id laukā ir ietverts chat_id.
Tagad izveidosim funkciju send_image. Tas izmantos funkciju get_and_save_image, lai izgūtu un saglabātu attēlu. Un tad mēs visu nosūtām pareizajam kontaktam.