Задать вопрос
@oskolkova

Как получить статистику бота в Телеграмме или как перевести с python на php?

Добрый день, подскажите пожалуйста как можно перевести следующий код с python на php ( код нужен для получения статистики использования бота в Телеграмме ) :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import csv
import datetime
import os
import pandas as pd

users_type = {
    1: 'пользователь',
    2: 'пользователя',
    3: 'пользователя',
    4: 'пользователя'
}
day_type = {
    1: 'день',
    2: 'дня',
    3: 'дня',
    4: 'дня'
}

# remove txt file
def remove(user_id):
    path = os.getcwd() + '/%s.txt' % user_id
    os.remove(path)


# write data to csv
def statistics(user_id, command):
    data = datetime.datetime.today().strftime("%Y-%m-%d")
    with open('data.csv', 'a', newline="", encoding='UTF-8') as fil:
        wr = csv.writer(fil, delimiter=';')
        wr.writerow([data, user_id, command])


# make report
def analysis(bid, user_id):
    season = int(bid[1])
    df = pd.read_csv('data.csv', delimiter=';', encoding='utf8')
    number_of_users = len(df['id'].unique())
    number_of_days = len(df['data'].unique())

    message_to_user = 'Статистика использования бота за %s %s: \n' % (season, day_type.get(season, 'дней'))
    message_to_user += 'Всего статистика собрана за %s %s: \n' % (number_of_days, day_type.get(season, 'дней'))
    if season > number_of_days:
        season = number_of_days
        message_to_user += 'Указанное вами количество дней больше,чем имеется\n' \
                           'Будет выведена статистика за максимальное возможное время\n'

    df_user = df.groupby(['data', 'id']).count().reset_index().groupby('data').count().reset_index()
    list_of_dates_in_df_user = list(df_user['data'])
    list_of_number_of_user_in_df_user = list(df_user['id'])
    list_of_dates_in_df_user = list_of_dates_in_df_user[-season:]
    list_of_number_of_user_in_df_user = list_of_number_of_user_in_df_user[-season:]
    df_command = df.groupby(['data', 'command']).count().reset_index()
    unique_commands = df['command'].unique()
    commands_in_each_day = []
    list_of_dates_in_df_command = list(df_command['data'])
    list_of_number_of_user_in_df_command = list(df_command['id'])
    list_of_name_of_command_in_df_command = list(df_command['command'])
    commands_in_this_day = dict()
    for i in range(len(list_of_dates_in_df_command)):
        commands_in_this_day[list_of_name_of_command_in_df_command[i]] = list_of_number_of_user_in_df_command[i]
        if i + 1 >= len(list_of_dates_in_df_command) or list_of_dates_in_df_command[i] != list_of_dates_in_df_command[i + 1]:
            commands_in_each_day.append(commands_in_this_day)
            commands_in_this_day = dict()
    commands_in_each_day = commands_in_each_day[-season:]

    if 'пользователи' in bid:
        message_to_user += 'За всё время бота использовало: ' + '%s' % number_of_users \
                   + ' %s ' % users_type.get(number_of_users, 'пользователей') + '\n' \
                                                                                 'Пользователей за последние %s %s: \n' % (
                       season, day_type.get(season, 'дней'))
        for days, number, comm_day in zip(list_of_dates_in_df_user, list_of_number_of_user_in_df_user, commands_in_each_day):
            message_to_user += 'Дата:%s Количество:%d Из них новых:%s\n' % (days, number, comm_day.get('/start', 0))
    if 'команды' in bid:
        message_to_user += 'Статистика команд за последние %s %s: \n' % (season, day_type.get(season, 'дней'))
        for days, commands in zip(list_of_dates_in_df_user, commands_in_each_day):
            message_to_user += 'Дата:%s\n' % days
            for i in unique_commands:
                if i in commands:
                    message_to_user += '%s - %s раз\n' % (i, commands.get(i))
                else:
                    message_to_user += '%s - 0 раз\n' % i
                    
    if 'txt' in bid or 'тхт' in bid:
        with open('%s.txt' % user_id, 'w', encoding='UTF-8') as fil:
            fil.write(message_to_user)
            fil.close()
    else:
        return message_to_user


Или может подскажите каким образом можно получать эту статистику, может есть какие-то рабочие сервисы или источники с объяснением как написать код на php. Заранее, спасибо.
  • Вопрос задан
  • 159 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Winsik
@Winsik
сис.админ, недопрограммист :)
Приведённый выше кусок кода сам учитывает статистику использования себя и потом выдаёт обобщённые результаты, что вам мешает на пхп реализовать похожий функционал, если бот уже работает ? запоминаем в файл или бд обращения, потом по команде от пользователя рапортуем результаты
Ответ написан
Комментировать
@ambal245
Статистику Google Analytics можно подключить при помощи Measurement Protocol.
Прописать на каждую команду бота такую функцию пример на php:
$analytics = file_get_contents("https://www.google-analytics.com/collect?v=1&tid=UA-XXXXXXX&t=pageview&dp=%2Fstart")

параметр dp это команда в вашем боте.

Но на использование этого протокола лежит ограничение. Если к вашему боту будет большое обращение к командам (от пользователей), то статистика собираться не будет. 500 обращений за сеанс и 200 000 обращений на пользователя в день. Так как бот расположен на определенном сервере с одним IP, то израсходовать лимит не составит большого труда.

Лучший вариант собрать статистику и отобразить ее - это Mysql.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы