ProHoster > Блог > interretaj novaĵoj > Kiel delegi simplajn raportojn al roboto. Skribante bot en Python kaj Google BigQuery
Kiel delegi simplajn raportojn al roboto. Skribante bot en Python kaj Google BigQuery
Ĉu vi havas taskojn, kiuj ripetas tagon post tago, semajnon post semajno? Ekzemple, verkado de raportoj. Vi petas datumojn, analizas ĝin, bildigas ĝin (faru grafikaĵojn, diagramojn), kaj poste sendas ĝin al via estro. Sed kio se ĉio ĉi estus aŭtomatigita?
En ĉi tiu lernilo ni kreos bot por Telegramo, kiu helpos aŭtomatigi raportadon. Kaj la plej bonega afero estas, ke la tuta programo konsistos el nur 50 linioj de kodo! Se vi kreas roboton por Telegramo por la unua fojo, tiam vi ankaŭ devus legi ĉi tiun afiŝo.
Se ni volas uzi la servon, ni devas konekti la Google BigQuery API. Por fari tion ni iru al Google Developers-konzolo kaj kreu novan projekton (aŭ elektu ekzistantan).
En la kontrolpanelo, elektu AKTIVI API KAJ SERVOJ kaj serĉu BigQuery API.
Elektu Ebligi por konekti la API.
Kreu kontŝlosilon
Ni iru al denove Google Developers-konzolo, elektu la langeton Akreditaĵojn, Kreu akreditaĵojn kaj Ŝlosilon pri Serva konto.
Tiam - Nova serva konto, kaj enigu la nomon en la kampon pri nomo de Serva konto.
El la fallisto Rolo, elektu Projekto > Posedanto, tiam Krei.
La dosiero, kiu estos aŭtomate elŝutita, nomiĝas creds.json.
Agordu GOOGLE_APPLICATION_CREDENTIALS, specifante la vojon al creds.json en la terminalo.
Ni bezonas kvin parametrojn, kie x estas la x-aksa datumoj, x_label estas la titolo por la akso, y estas la y-aksa datumoj, y_label estas la titolo por la akso, kaj titolo estas la titolo de la tuta bildigo.
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
Konservu la bildon
Nun ni uzu du funkciojn por krei bildigon kaj konservi ĝin.
Ni sendos la nombron da afiŝoj eldonitaj ĉiutage. Unue ni skribas peton.
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
"""
La demando helpas kolekti datumojn dum du semajnoj ekde la 2-a de decembro 2018.
Ni uzas ĉi tiun daton ĉar 2018-12-02 estas la plej novaj datumoj registritaj en bigquery-public-data.stackoverflow.post_history, en aliaj kazoj vi povas uzi CURRENT_DATE() por akiri la plej novajn datumojn.
Voku la funkcion query_to_bigquery por akiri la datumojn.
datumkadro = demand_al_bigquery (demando)
Tiam ni uzas la datan datumkolumnon por la x-akso, kaj la total_posts-kolumnon por la y-akso.
x = datumkadro['dato'].tolist()
y = datumkadro ['total_afiŝoj'].tolist()
Ni bildigas ĝin per la funkcio visualize_bar_chart kaj konservas ĝin kiel bildon.
Ni envolvas ĉi tiun kodon en funkcio nomata 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')
Sendu bildon
Por sendi raporton al la ricevanto, vi devas scii la parametron chat_id.
Ni uzas uzantinfobot kaj tajpu /komencon. La bot respondas kun la necesaj informoj, chat_id estas enhavita en la id-kampo.
Nun ni kreu la funkcion send_image. Ĝi uzos la funkcion get_and_save_image por retrovi kaj konservi la bildon. Kaj tiam ni sendas ĉion al la ĝusta kontakto.