2024-10-30 22:26:44 +00:00
|
|
|
|
import logging
|
|
|
|
|
import requests
|
|
|
|
|
import json
|
|
|
|
|
import os
|
2024-10-30 20:48:18 +00:00
|
|
|
|
from telegram import Update, ReplyKeyboardMarkup
|
2024-10-30 22:26:44 +00:00
|
|
|
|
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler, MessageHandler, ConversationHandler, filters
|
|
|
|
|
from dotenv import load_dotenv
|
2024-10-30 20:48:18 +00:00
|
|
|
|
|
|
|
|
|
logging.basicConfig(
|
|
|
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
|
|
|
level=logging.INFO
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
2024-10-30 22:26:44 +00:00
|
|
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
|
bot_token = os.getenv('BOT_TOKEN')
|
|
|
|
|
ya_token = os.getenv('YA_TOKEN')
|
|
|
|
|
whitelisted = os.getenv('WHITELISTED')
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
ya_url = 'https://partner2.yandex.ru/api/statistics2/get.json'
|
|
|
|
|
msg_to_period = {
|
|
|
|
|
"Сегодня": "today",
|
|
|
|
|
"Вчера": "yesterday",
|
|
|
|
|
"Месяц": "30days"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2024-10-30 22:26:44 +00:00
|
|
|
|
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
|
|
|
if update.effective_user.username not in whitelisted:
|
|
|
|
|
await update.message.reply_text("Запрет")
|
|
|
|
|
return ConversationHandler.END
|
|
|
|
|
reply_keyboard = [["Сегодня", "Вчера", "Месяц"]]
|
2024-10-30 20:48:18 +00:00
|
|
|
|
await update.message.reply_text("Какую стату вывести", reply_markup=ReplyKeyboardMarkup(reply_keyboard))
|
2024-10-30 22:26:44 +00:00
|
|
|
|
return 0
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
|
2024-10-30 22:26:44 +00:00
|
|
|
|
async def ya_api(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
2024-10-30 20:48:18 +00:00
|
|
|
|
reply = await fetch_data(update.message.text)
|
|
|
|
|
await update.message.reply_text(reply)
|
2024-10-30 22:26:44 +00:00
|
|
|
|
return 0
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
|
|
|
|
|
async def fetch_data(msg_period: str) -> str:
|
|
|
|
|
response = requests.get(ya_url, headers={'Authorization': ya_token}, params={
|
|
|
|
|
'lang': 'ru',
|
|
|
|
|
'period': msg_to_period[msg_period],
|
|
|
|
|
'field': ['shows', 'hits_render', 'partner_wo_nds', 'cpmv_partner_wo_nds']
|
|
|
|
|
})
|
|
|
|
|
json_data = json.loads(response.text)
|
|
|
|
|
data = json_data['data']['totals']['2'][0]
|
|
|
|
|
return f"Данные за {msg_period}\n\n\
|
|
|
|
|
Подборы рекламы: {data['hits_render']}\n\
|
|
|
|
|
Видимые показы: {data['shows']}\n\
|
|
|
|
|
Вознаграждение партнеру за рекламу: {data['partner_wo_nds']} руб.\n\
|
|
|
|
|
Стоимость 1к видимых показов: {data['cpmv_partner_wo_nds']} руб."
|
|
|
|
|
|
|
|
|
|
|
2024-10-30 22:26:44 +00:00
|
|
|
|
async def cancel(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
|
|
|
await update.message.reply_text("домой")
|
|
|
|
|
return ConversationHandler.END
|
|
|
|
|
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
if __name__ == '__main__':
|
2024-10-30 22:26:44 +00:00
|
|
|
|
if ya_token is None:
|
|
|
|
|
logger.fatal("YA_TOKEN env variable is required")
|
|
|
|
|
exit(1)
|
|
|
|
|
if bot_token is None:
|
|
|
|
|
logger.fatal("BOT_TOKEN env variable is required")
|
|
|
|
|
exit(1)
|
|
|
|
|
if whitelisted is None:
|
|
|
|
|
logger.fatal("WHITELISTED env varialbe is required")
|
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
|
whitelisted = whitelisted.split(',')
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
application = ApplicationBuilder().token(bot_token).build()
|
2024-10-30 22:26:44 +00:00
|
|
|
|
|
|
|
|
|
conv_handler = ConversationHandler(
|
|
|
|
|
entry_points=[CommandHandler('start', start)],
|
|
|
|
|
states={
|
|
|
|
|
0: [MessageHandler(filters.Regex("^(Сегодня|Вчера|Месяц)$"), ya_api)]
|
|
|
|
|
},
|
|
|
|
|
fallbacks=[CommandHandler('cancel', cancel)]
|
|
|
|
|
)
|
|
|
|
|
application.add_handler(conv_handler)
|
|
|
|
|
|
2024-10-30 20:48:18 +00:00
|
|
|
|
application.run_polling()
|