ProHoster > Blog > internetes hírek > Hogyan delegáljunk egyszerű jelentéseket egy robotra. Bot írása Pythonban és Google BigQueryben
Hogyan delegáljunk egyszerű jelentéseket egy robotra. Bot írása Pythonban és Google BigQueryben
Vannak olyan feladatai, amelyek napról napra, hétről hétre ismétlődnek? Például jelentések írása. Adatokat kér, elemzi, vizualizálja (grafikonokat, diagramokat készít), majd elküldi a főnökének. De mi lenne, ha mindez automatizált lenne?
Ebben az oktatóanyagban létrehozunk egy botot a Telegram számára, amely segít automatizálni a jelentéseket. A legmenőbb pedig az, hogy a teljes program mindössze 50 sornyi kódból áll majd! Ha először hoz létre botot a Telegram számára, akkor ezt is el kell olvasnia posta.
Ha használni akarjuk a szolgáltatást, csatlakoztatnunk kell a Google BigQuery API-t. Ehhez megyünk Google Developers Console és hozzon létre egy új projektet (vagy válasszon egy meglévőt).
A vezérlőpulton válassza az API-K ÉS SZOLGÁLTATÁSOK ENGEDÉLYEZÉSE lehetőséget, és keresse meg a BigQuery API-t.
Az API csatlakoztatásához válassza az Engedélyezés lehetőséget.
Hozzon létre egy fiókkulcsot
Menjünk újra Google Developers Console, válassza ki a Hitelesítési adatok lapot, majd a Hitelesítési adatok létrehozása és a szolgáltatásfiók kulcsát.
Ezután – Új szolgáltatásfiók, és írja be a nevet a Szolgáltatásfiók neve mezőbe.
A Szerepkör legördülő listából válassza a Projekt > Tulajdonos, majd a Létrehozás lehetőséget.
Az automatikusan letöltött fájl neve creds.json.
Állítsa be a GOOGLE_APPLICATION_CREDENTIALS alkalmazást, és adja meg a creds.json elérési útját a terminálban.
A probléma megoldásához válassza a Matplotlib lehetőséget.
importálja a matplotlib.pyplot fájlt plt-ként
Öt paraméterre van szükségünk, ahol x az x tengely adata, x_címke a tengely címe, y az y tengely adata, y_címke a tengely címe, cím pedig a teljes vizualizáció címe.
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
Mentse el a képet
Most két függvény segítségével készítsünk vizualizációt és mentsük el.
A megjelent bejegyzések számát naponta elküldjük. Először kérést írunk.
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 lekérdezés segít 2. december 2018-tól kezdődően két hét adatgyűjtésben.
Azért használjuk ezt a dátumot, mert 2018-12-02 a bigquery-public-data.stackoverflow.post_history fájlban rögzített legfrissebb adat, más esetekben a CURRENT_DATE() segítségével kaphatja meg a legújabb adatokat.
Az adatok lekéréséhez hívja meg a query_to_bigquery függvényt.
adatkeret = query_to_bigquery(query)
Ezután a dátum adatoszlopot használjuk az x tengelyhez, és a total_posts oszlopot az y tengelyhez.
x = adatkeret['dátum'].tolist()
y = dataframe['total_posts'].tolist()
A visualize_bar_chart függvény segítségével vizualizáljuk és képként mentjük el.
Ezt a kódot a get_and_save_image függvénybe csomagoljuk.
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')
Kép küldése
Ahhoz, hogy jelentést küldhessen a címzettnek, ismernie kell a chat_id paramétert.
Használjuk userinfobot és írja be a /start. A bot válaszol a szükséges információkkal, a chat_id az id mezőben található.
Most hozzuk létre a send_image függvényt. A get_and_save_image függvényt fogja használni a kép lekéréséhez és mentéséhez. Ezután mindent elküldünk a megfelelő kapcsolattartónak.