Получение пользовательской статистики из MAL с помощью бота Discord

Я пытаюсь найти способ получить статистику пользователя из профиля данного пользователя «Мой список аниме» и не могу понять, как получить данные. Я хочу найти их заполненные, просмотренные, удаленные и т. Д. В их профиле (Найдено с помощью MyAnimeList.net/profile/<insert user name here>).

Как бы я это сделал?


person Jack Ewens    schedule 10.09.2017    source источник
comment
Добро пожаловать в SO! Задавая вопрос, постарайтесь предоставить информацию о том, с какой именно проблемой вы столкнулись и что уже пробовали. См. Правила сообщества, чтобы задавать хорошие вопросы   -  person LightBender    schedule 10.09.2017
comment
Спасибо. Так что я могу получить веб-сайт достаточно легко, я просто не знаю, как получить определенные данные с полученной страницы. У каждого пользователя есть статистика в своем профиле. Это количество дней просмотра, средний балл, просмотр, завершение, ожидание, прекращение просмотра, план просмотра, общее количество записей, пересмотренные просмотры и эпизоды. Они отображаются на первой странице их профиля, и это данные, которые я хочу получить. Я, честно говоря, не знаю, с чего начать, чтобы получить данные, и поиск в Интернете мало помог.   -  person Jack Ewens    schedule 10.09.2017


Ответы (1)


Официальный API MyAnimeList не имеет конечных точек для получения информации профиля пользователя. Что вы можете сделать, так это очистить веб-страницу.

  • К счастью, MyAnimeList может извлекать XML для профилей пользователей, поэтому это намного проще, чем синтаксический анализ HTML. Вот пример.
  • После получения профиля XML вы можете проанализировать его на C #, используя классы / методы в пространстве имен System.Xml, например XDocument.Parse(). Здесь, в StackOverflow, есть много ресурсов, которые помогут в этом.

Если вы не знаете, как получить эти данные из Интернета в первую очередь, я бы порекомендовал изучить библиотеки вроде RestSharp или Flurl. Они абстрагируются от шаблонов для получения информации из Интернета для вас, так что вы можете просто сосредоточиться на кодировании. Если вы хотите полностью пропустить как синтаксический анализ XML, так и веб-запросы, вы можете разрешить библиотеку сделай это за тебя.

Чтобы ваш бот Discord.NET был чистым, я бы рекомендовал иметь класс MyAnimeListService, в котором вы выполняете этот веб-запрос / парсинг. Затем вы можете вставить его в модуль, который вы используете для своей (я предполагаю) команды !anime, и сосредоточиться на используя данные профиля MAL. Таким образом, вы отделяете логику получения данных от логики представления данных пользователям Discord. Вы можете прочитать о внедрении зависимостей в Discord.NET здесь. Предполагая, что вы используете C #, конечным результатом будет доступ к модулю следующим образом:

[Group("anime")]
public class AnimeModule : Module
{
    private AnimeModule(MyAnimeListService service)
    {
        Service = service;
    }

    private MyAnimeListService Service { get; }

    [Command]
    public async Task AnimeCommand(string username)
    {
        // call your service here
    }
}
person Borja Canseco    schedule 10.09.2017
comment
Спасибо. Извините за невероятно поздний ответ, я только что начал над ним работать. Ресурсы, на которые вы ссылались, были невероятно полезны. - person Jack Ewens; 23.10.2017