使用 discord 机器人从 MAL 中检索用户统计信息
Retrieving User stats from MAL with a discord bot
我正在尝试找到一种方法来从给定用户的 "My Anime List" 个人资料中检索用户统计信息,但不知道如何检索数据。我想从他们的个人资料中找到他们完成的、正在观看的、掉落的等(使用 MyAnimeList.net/profile/<insert user name here>
找到)。
我该怎么做?
官方 MyAnimeList API 没有任何用于获取用户个人资料信息的端点。您可以做的是抓取网页。
- 值得庆幸的是,MyAnimeList 可以检索 XML 用户配置文件,因此它比解析 HTML 容易得多。 Here's an example.
- 检索 XML 配置文件后,您可以使用
System.Xml
命名空间中的 classes/methods 在 C# 中解析它,例如 XDocument.Parse()
。在 Whosebug 上有很多资源可以帮助您做到这一点。
如果您一开始就不确定如何从网络上获取这些数据,我建议您查看像 RestSharp or Flurl. They abstract a way a lot of the boilerplate for getting info from the web for you so you can just focus on coding. If you want to skip both the XML parsing and web requests altogether, you can let a library 这样的库。
为了让您的 Discord.NET 机器人保持清洁,我建议您使用 MyAnimeListService
class 来执行此 Web request/scraping。然后您可以将其注入您正在为您的(我假设)!anime
命令使用的模块,并专注于在那里使用 MAL 配置文件数据。这样,您就可以将获取数据的逻辑与将数据呈现给 Discord 用户的逻辑分开。您可以在 Discord.NET here 中阅读有关依赖注入的内容。假设您使用的是 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
}
}
我正在尝试找到一种方法来从给定用户的 "My Anime List" 个人资料中检索用户统计信息,但不知道如何检索数据。我想从他们的个人资料中找到他们完成的、正在观看的、掉落的等(使用 MyAnimeList.net/profile/<insert user name here>
找到)。
我该怎么做?
官方 MyAnimeList API 没有任何用于获取用户个人资料信息的端点。您可以做的是抓取网页。
- 值得庆幸的是,MyAnimeList 可以检索 XML 用户配置文件,因此它比解析 HTML 容易得多。 Here's an example.
- 检索 XML 配置文件后,您可以使用
System.Xml
命名空间中的 classes/methods 在 C# 中解析它,例如XDocument.Parse()
。在 Whosebug 上有很多资源可以帮助您做到这一点。
如果您一开始就不确定如何从网络上获取这些数据,我建议您查看像 RestSharp or Flurl. They abstract a way a lot of the boilerplate for getting info from the web for you so you can just focus on coding. If you want to skip both the XML parsing and web requests altogether, you can let a library 这样的库。
为了让您的 Discord.NET 机器人保持清洁,我建议您使用 MyAnimeListService
class 来执行此 Web request/scraping。然后您可以将其注入您正在为您的(我假设)!anime
命令使用的模块,并专注于在那里使用 MAL 配置文件数据。这样,您就可以将获取数据的逻辑与将数据呈现给 Discord 用户的逻辑分开。您可以在 Discord.NET here 中阅读有关依赖注入的内容。假设您使用的是 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
}
}