Я пытаюсь создать бота Discord, который ищет информацию о пользователе на основе заданных параметров в команде с использованием JSON API.

Допустим, я хочу найти пользователя с именем mellin111

API для этого будет https://www.habbo.com/api/ public / users? name = mellin111. также я использую SimpleJSON от bunny83 https://github.com/Bunny83/SimpleJSON

Вот часть моего кода:

[Command("search", RunMode = RunMode.Async)]

        public async Task Search([Remainder] string echo)
        {
            string url = @"https://www.habbo.com/api/public/users?name=" + echo;
            // GET request
            WebClient ipcon = new WebClient();
            string response = ipcon.DownloadString(url);
            // Parse json
            dynamic json = JSON.Parse(response);

            var eb = new EmbedBuilder();
            eb
            .WithTitle("Search Result")
            .AddField("**Habbo IGN: **", "" + json["name"], false)
            .AddField("**Motto: **", "" + json["motto"], false)
            .AddField("**Member since: **", "" + json["memberSince"], false)
            .WithFooter("made with 💖)
            //.WithThumbnailUrl("https://www.habbo.com/habbo-imaging/avatarimage?size=m&figure=" + json["figureString"])
            .WithCurrentTimestamp()
            .WithColor(Color.Gold);
            await ReplyAsync(embed: eb.Build());
         }

Хотя в этом коде нет ошибок, похоже, он не возвращает ответ. есть ли другой способ получить данные из api?

0
Efren Pineda 6 Сен 2020 в 12:56

1 ответ

Лучший ответ

Кажется, что API ограничивает запросы от определенных клиентов.
Если вы установите нормальный пользовательский агент, он, похоже, будет работать нормально.

Пример прямо из документации класса WebClient:

var url = "https://www.habbo.com/api/public/users?name=mellin111";
var ipcon = new WebClient();
ipcon.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
var response = ipcon.DownloadString(url);
var json = JSON.Parse(response);
var yup_this_works = (DateTime)json["memberSince"];
//works assuming the "SimpleJSON" class is used like this, I havent personally used it
0
0x464e 6 Сен 2020 в 11:45