ProHoster > Blog > internetové zprávy > Jak delegovat jednoduché reporty na robota. Psaní robota v Pythonu a Google BigQuery
Jak delegovat jednoduché reporty na robota. Psaní robota v Pythonu a Google BigQuery
Máte úkoly, které se opakují den po dni, týden po týdnu? Například psaní zpráv. Vyžádáte si data, analyzujete je, vizualizujete (vytvářejte grafy, tabulky) a poté je pošlete svému šéfovi. Ale co když to všechno bylo automatizované?
V tomto tutoriálu vytvoříme robota pro Telegram, který pomůže automatizovat hlášení. A nejlepší na tom je, že celý program se bude skládat pouze z 50 řádků kódu! Pokud vytváříte robota pro Telegram poprvé, měli byste si také přečíst tento zveřejnit.
Pokud chceme službu využívat, potřebujeme připojit Google BigQuery API. K tomu jdeme do Google Developers Console a vytvořte nový projekt (nebo vyberte existující).
Na ovládacím panelu vyberte ENABLE APIS AND SERVICES a vyhledejte BigQuery API.
Chcete-li rozhraní API připojit, vyberte možnost Povolit.
Vytvořte klíč k účtu
Pojďme znovu Google Developers Console, vyberte kartu Pověření, Vytvořit přihlašovací údaje a Klíč servisního účtu.
Poté - Nový účet služby a zadejte název do pole Název účtu služby.
Z rozevíracího seznamu Role vyberte Projekt > Vlastník a poté Vytvořit.
Soubor, který bude automaticky stažen, se nazývá creds.json.
Nastavte GOOGLE_APPLICATION_CREDENTIALS a zadejte cestu k creds.json v terminálu.
Chcete-li tento problém vyřešit, vyberte matplotlib.
importovat matplotlib.pyplot jako plt
Potřebujeme pět parametrů, kde x jsou data na ose x, x_label je název pro osu, y je data na ose y, y_label je název pro osu a title je název celé vizualizace.
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
Uložte obrázek
Nyní pomocí dvou funkcí vytvoříme vizualizaci a uložíme ji.
Počet zveřejněných příspěvků budeme zasílat denně. Nejprve napíšeme žádost.
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
"""
Dotaz pomáhá shromažďovat data po dobu dvou týdnů od 2. prosince 2018.
Toto datum používáme, protože 2018-12-02 jsou nejnovější data zaznamenaná v bigquery-public-data.stackoverflow.post_history, v ostatních případech můžete k získání nejnovějších dat použít CURRENT_DATE().
Chcete-li získat data, zavolejte funkci query_to_bigquery.
datový rámec = query_to_bigquery(dotaz)
Pak použijeme datový sloupec pro osu x a sloupec total_posts pro osu y.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Ten vizualizujeme pomocí funkce visualize_bar_chart a uložíme jako obrázek.
Tento kód zabalíme do funkce nazvané 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šlete obrázek
Abyste mohli odeslat zprávu příjemci, potřebujete znát parametr chat_id.
Používáme userinfobot a zadejte /start. Bot odpoví potřebnými informacemi, chat_id je obsaženo v poli id.
Nyní vytvoříme funkci send_image. K načtení a uložení obrázku použije funkci get_and_save_image. A pak vše zašleme správnému kontaktu.