ProHoster > блог > интернет вести > Како да делегирате едноставни извештаи на робот. Пишување бот во Python и Google BigQuery
Како да делегирате едноставни извештаи на робот. Пишување бот во Python и Google BigQuery
Дали имате задачи кои се повторуваат ден по ден, недела по недела? На пример, пишување извештаи. Барате податоци, ги анализирате, визуелизирате (направете графикони, графикони), а потоа ги испраќате до вашиот шеф. Но, што ако сето ова беше автоматизирано?
Во ова упатство ќе создадеме бот за Telegram кој ќе помогне да се автоматизира известувањето. И најкул работа е што целата програма ќе се состои од само 50 линии код! Ако креирате бот за Telegram за прв пат, тогаш треба да го прочитате и овој пост.
Ако сакаме да ја користиме услугата, треба да го поврземе Google BigQuery API. За да го направите ова, одиме на Google Developers Console и креирајте нов проект (или изберете постоечки).
Во контролната табла, изберете ENABLE APIS AND SERVICES и побарајте BigQuery API.
Изберете Овозможи за да го поврзете API.
Креирајте клуч за сметка
Ајде да одиме повторно на Google Developers Console, изберете го табот Ингеренции, Креирај ингеренции и клуч за сметка за услуга.
Потоа - Нова сметка за услуга и внесете го името во полето Име на сметката на услугата.
Од паѓачката листа Улоги, изберете Проект > Сопственик, а потоа Креирај.
Датотеката што автоматски ќе се преземе се нарекува creds.json.
Поставете GOOGLE_APPLICATION_CREDENTIALS, наведувајќи ја патеката до creds.json во терминалот.
Оваа функција ќе го врати барањето како податочна рамка.
Визуелизирање податоци
За да го решите овој проблем, изберете matplotlib.
увезете matplotlib.pyplot како plt
Ни требаат пет параметри, каде што x е податокот за оската x, x_label е насловот за оската, y е податокот за y-оската, y_label е насловот за оската и насловот е насловот на целата визуелизација.
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
Зачувајте ја сликата
Сега ајде да користиме две функции за да создадеме визуелизација и да ја зачуваме.
Секојдневно ќе го испраќаме бројот на објави објавени. Прво пишуваме барање.
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
"""
Барањето помага да се собираат податоци за две недели, почнувајќи од 2 декември 2018 година.
Го користиме овој датум затоа што 2018-12-02 е најновиот податок снимен во bigquery-public-data.stackoverflow.post_history, во други случаи можете да го користите CURRENT_DATE() за да ги добиете најновите податоци.
Повикајте ја функцијата query_to_bigquery за да ги добиете податоците.
податочна рамка = query_to_bigquery (прашање)
Потоа ја користиме колоната со податоци за датум за оската x, а колоната total_posts за y-оската.
x = податочна рамка['датум'].tolist()
y = податочна рамка['total_posts'].tolist()
Ја визуелизираме со помош на функцијата visualize_bar_chart и ја зачувуваме како слика.
Овој код го завиткаме во функција наречена 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')
Испратете слика
За да испратите извештај до примачот, треба да го знаете параметарот chat_id.
Ние користиме userinfobot и напишете /start. Ботот одговара со потребните информации, chat_id е содржан во полето id.
Сега да ја креираме функцијата send_image. Ќе ја користи функцијата get_and_save_image за да ја преземе и зачува сликата. И тогаш испраќаме сè до правилниот контакт.
Конечно, создаваме друга функција, главната, за да ја стартуваме апликацијата. Не заборавајте да го смените YOUR_TOKEN за ботот.
Запомнете: оваа програма автоматски ќе ја испрати сликата во времето што ќе го наведете. На пример, секој ден ќе испраќаме извештај во девет часот наутро.