-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Вітаємо Вас на retailhackathon !!
Для початку створюємо проект, встановлюємо python 3.6.2
і наступні бібліотеки:
- pyTelegramBotAPI
- git+https://github.com/datawizio/pythonAPI.git
Команда для встановлення pip3.6 install <package_name>
.
Також, для зручного написання коду на Python, можете використовувати jupyter
(встановлюється так само як попередні пакети).
Посилання на бібліотеку для роботи з Telegram API - pyTelegramBotAPI.
Створюємо нового бота за допомогою BotFather.
Пробуємо запустити:
import telebot
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Howdy, how are you doing?")
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, message.text)
bot.polling()
Після доробки код буде виглядати наступним чином:
import telebot
from telebot import types
from collections import namedtuple
from settings import TOKEN
from dwapi.datawiz import DW
import datetime
bot = telebot.TeleBot(TOKEN)
dw = DW()
info = dw.get_client_info()
client = namedtuple("Client", info.keys())
client = client(**info)
def convert_human_format(df, columns):
format_string = '{}: {} \n'
results = format_string.format(*columns)
for obj in df.to_dict('split')['data']:
results += format_string.format(*obj)
return results
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
markup = types.ReplyKeyboardMarkup()
markup.add(types.KeyboardButton('ТОП 10 товарів'))
markup.add(types.KeyboardButton('Оборот по магазинам'))
bot.send_message(message.chat.id, "Виберіть звіт!", reply_markup=markup)
@bot.message_handler(func=lambda message: 'ТОП 10 товарів' == message.text)
def top_products(message):
date_to = client.date_to.date()
date_from = client.date_to.date() - datetime.timedelta(days=30)
df = dw.get_products_sale(date_from=date_from, date_to=date_to, view_type='raw')
df = df.groupby('name').agg({'turnover': 'sum'}).sort_values('turnover', ascending=False).head(10).reset_index()
df['turnover'] = df['turnover'].round(2)
bot.send_message(message.chat.id, convert_human_format(df, columns=['Назва товара', 'Оборот']))
@bot.message_handler(func=lambda message: 'Оборот по магазинам' == message.text)
def turnover_by_shops(message):
df = dw.get_categories_sale(view_type='row', per_shop=True)
df = df.groupby('shop_name').agg({'turnover': 'sum'}).sort_values('turnover', ascending=False).head(10).reset_index()
df['turnover'] = df['turnover'].round(2)
result = convert_human_format(df, ['Назва магазина', 'Оборот'])
bot.send_message(message.chat.id, result)
bot.polling()
Публікуємо бота на Heroku.
Встановлюємо Heroku СLI.
Додаємо файл runtime.txt
, який буде вказувати, яку версію python ми використовуємо:
python-3.6.2
Додаємо файл requirements.txt
, в якому зберігається список потрібних бібліотек:
pyTelegramBotAPI
git+https://github.com/datawizio/pythonAPI.git
Додаємо файл Procfile
, в якому вказуємо команду для запуску:
worker: python bot.py
Додаємо файл .gitignore
для чистоти:
*.ipynb
.idea/
.ipynb_checkpoints/
__pycache__/
Виконуємо пару команд для опублікування проекту на Heroku.
# логінемся в heroku
heroku login
# створюємо проект
heroku create <name project>
# ініціалізуєм папку
git init
# підключаєм до репозиторію
heroku git:remote -a <name project>
# добавляємо файли до проекту
git add .
# комітимо
git commit -am "make it better"
# пушимо на heroku
git push heroku master
#стартуємо воркер
heroku ps:scale worker=1
Дякую за увагу!!!