Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Ma haysaa hawlo soo noqnoqda maalinba maalinta ka dambaysa, toddobaadba toddobaadka ka dambeeya? Tusaale ahaan, qorista warbixinnada. Waxaad codsataa xogta, falanqeyso, sawirto (samayso garaafyo iyo jaantusyo), ka dibna u dir madaxaaga. Laakiin maxaa dhacaya haddii aad waxyaalahan oo dhan otomaatig ka dhigto?

Tababarkan, waxaan ku abuuri doonaa bot Telegram kaas oo kaa caawin doona si toos ah warbixinta. Qeybta ugu fiicanna waa, barnaamijka oo dhan wuxuu noqon doonaa oo kaliya 50 khadadka code! Haddii aad abuureyso bot Telegram markii ugu horeysay, waxaa laga yaabaa inaad sidoo kale rabto inaad midkan akhrido. dhajin.

Skillbox waxay ku talinaysaa: Koorso wax ku ool ah Soo saare Python meel eber ah.

Waxaan xusuusineynaa: dhammaan akhristayaasha "Habr" - qiimo dhimis ah 10 rubles marka la qorayo koorso kasta oo Skillbox ah iyadoo la adeegsanayo koodhka xayeysiinta "Habr".

Aan bilowno

Ku rakibida maktabadaha

Waan isticmaali doonaa google-cloud-bigquery si aad xogta uga soo ceshato Google BigQuery matplotlib, kabuubsan и pandas waxay kaa caawin doontaa sawirida xogta. Python-telegram-bot xogta dhammaatay waxay u diri doontaa Telegram.

pip3 ku rakib google-cloud-bigquery matplotlib numpy pandas python-telegram-bot

Isku xirka Google BigQuery API

Haddii aan rabno inaan isticmaalno adeegga, waxaan u baahanahay inaan ku xirno Google BigQuery API. Si tan loo sameeyo, u tag Qalabixiyaha Google Developers oo samee mashruuc cusub (ama dooro mid jira).

Qaybta kantaroolka, dooro ENABLE APIS AND SERVICES oo raadi BigQuery API.

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Dooro Awood in lagu xidho API-ga

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Samee furaha akoontiga

Mar kale ayaanu dhoofaynaa Qalabixiyaha Google Developers, dooro tabka aqoonsiga, Abuur aqoonsiga iyo furaha akoonka adeega.

Kadibna - Akoonka Adeegga Cusub, oo goobta magaca akoonka Adeegga geli magaca.

Liiska hoos-u-dhaca doorka, dooro Project> Mulkiilaha, ka dibna Abuur.

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Faylka si toos ah loo soo dejin doono waxaa loo yaqaan creds.json.

Deji GOOGLE_APPLICATION_CREDENTIALS adiga oo cadaynaya dariiqa loo maro creds.json ee ku yaala terminaalka.

dhoofi GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

Haddii wax waliba si fiican u dhaceen, waa waqtigii la bilaabi lahaa qorista barnaamijka.

Abuuritaanka codsi

Tababarkan, waxaanu u isticmaali doonaa xogta bigquery-public-data.stackoverflow, iyo warbixinteena, waxaanu dooran doonaa tirada qoraalada maalinlaha ah.

Dhammaantood way fududahay.

Weydii miiska -> Arag xogta -> Keydi aragtida -> Dir sawirka

Aan abuurno hal shaqo si aan u qeexno dun kasta.

Weydiinta BigQuery

Marka hore, aan soo dejino maktabadda.

ka google.cloud soo dejinta bigquery

Waxaan abuurnaa shaqo la yiraahdo query_to_bigquery, halkaasoo halbeeggu yahay weydiin.

def query_to_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    result = query_job.result()
    dataframe = result.to_dataframe()
    return dataframe

Shaqadani waxay u soo celin doontaa waydiinta qaab xogeed ahaan.

Xogta sawirida

Si loo xaliyo dhibaatadan, waxaan dooran matplotlib.

soo dejiso matplotlib.pyplot sida plt

Waxaan u baahanahay shan cabbir, halka x ay tahay xogta dhidibka x, x_label waa ciwaanka dhidibka, y waa xogta dhidibka y, y_label waa ciwaanka dhidibada, ciwaankana waa ciwaanka muuqaalka oo dhan.

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

Kaydinta sawirka

Hadda aan isticmaalno laba hawlood si aan u abuurno muuqaal oo aan u badbaadino.

Waxaan soo diri doonaa tirada qoraallada la daabacay maalin kasta. Marka hore, waxaan qori doonaa su'aal

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
        """

Weydiinta waxay ururinaysaa xogta laba toddobaad, laga bilaabo Disembar 2, 2018.

Waxaan isticmaalnaa taariikhdaan sababtoo ah 2018-12-02 waa xogtii ugu dambeysay ee lagu duubay bigquery-public-data.stackoverflow.post_history, haddii kale waxaad isticmaali kartaa CURRENT_DATE() si aad u hesho xogta cusub.

Waxaan u yeernaa shaqada query_to_bigquery si aan xogta u helno.

dataframe = su'aal_to_bigquery( waydiin)

Waxaan markaa u isticmaalnaa tiirka taariikhda dhidibka x iyo tiirka guud_posts ee dhidibka y.

x = qaab-dhismeedka xogta ['taariikhda'].tolist()
y = qaab-dhismeedka xogta ['total_posts'].tolist()

Waxaan u sawirnaa annagoo isticmaalna shaqada visualize_bar_chart oo waxaan u kaydinnaa sawir ahaan.

plt = visualize_bar_chart
plt.savefig('viz.png')

Waxaan ku duubnaa summadan hawl la yiraahdo 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')

diraya sawir

Si aad warbixin ugu dirto qaataha, waxaad u baahan tahay inaad ogaato qiyaasta chat_id.

Waxaan isticmaalnaa userinfobot oo ku qor/bilow. Botku wuxuu kaga jawaabayaa macluumaadka loo baahan yahay, chat_id wuxuu ku jiraa goobta aqoonsiga.

Hadda waxaan abuurnaa shaqada send_image. Waxay isticmaali doontaa shaqada get_and_save_image si ay u soo ceshato oo u kaydiso sawirka. Kadibna waxaan u direynaa xiriirka saxda ah.

def send_image(bot, update):
    get_and_save_image()
    chat_id = 'CHAT_ID_RECEIVER'
    bot.send_photo(chat_id=chat_id, photo=open('viz.png','rb'))

Barnaamijka ugu muhiimsan

Ugu dambeyntii, samee shaqo kale, ugu weyn, si aad u bilowdo codsiga. Ha iloobin inaad u bedesho YOU_TOKEN bot.

Xusuusnow: barnaamijkani wuxuu si toos ah u soo diri doonaa sawirka wakhtiga aad sheegtay. Tusaale ahaan, waxaanu soo diri doonaa warbixinta 9:00 subaxnimo maalin kasta.

def main():
    updater = Updater('YOUR_TOKEN')
    updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
    updater.start_polling()
    updater.idle()
 
if __name__ == '__main__':
    main()

Ugu dambayntii, codsigeynu wuxuu u ekaan doonaa sidan:

from google.cloud import bigquery
from telegram.ext import Updater
 
import matplotlib.pyplot as plt
import numpy as np
import datetime
 
def query_to_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    result = query_job.result()
    dataframe = result.to_dataframe()
    return dataframe
 
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
 
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')
 
def send_image(bot, update):
    get_and_save_image()
    chat_id = 'CHAT_ID_RECEIVER'
    bot.send_photo(chat_id=chat_id, photo=open('viz.png', 'rb'))
 
def main():
    updater = Updater('YOUR_TOKEN')
    updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
    updater.start_polling()
    updater.idle()
 
if __name__ == '__main__':
main()

Kaydi faylka oo u magacow main.py.

Bilaw codsiga adiga oo gelaya taliska soo socda ee terminalka:

Python3 ugu weyn.py

Wax walba waa diyaar. Hadda waxaan haynaa bot ka kooban 50 xariiq oo kood ah oo soo saara warbixino anaga oo aan faragelin.

Aan hubino bot-ka halkan, adoo dooranaya amarka/dir

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Waxaad ka heli kartaa koodka la dhammeeyey my GitHub.

Skillbox waxay ku talinaysaa:

Source: www.habr.com

U soo iibso martigelin lagu kalsoonaan karo oo loogu talagalay bogagga leh ilaalinta DDoS, VPS VDS servers 🔥 Iibso martigelin degel oo lagu kalsoonaan karo oo leh ilaalinta DDoS, VPS VDS servers | ProHoster