Некоторые вопросы о Steam Web API от Valve - Извлечение истории матчей Dota 2

Я хотел написать небольшую программу для анализа матчей Dota 2, чтобы запрограммировать Hero Picking Tool. Если будет какое-то машинное обучение, мне еще предстоит решить

Я только что проверил документацию по Steam Web API и написал небольшую программу для получения данных и их записи в файл, но у меня большие проблемы с командами GetMatchHistoryBySequenceNum и GetMatchHistory... поэтому у меня есть два вопроса по этому поводу. Если бы кто-нибудь мог мне ответить, было бы супер!

  1. Я использовал эту "команду", чтобы получить список игр: https‍://api.steampowered.com/IDOTA2Match_205790/GetMatchHistoryBySequenceNum/v1/? Key=.. мой ключ

    Что означает IDOTA2Match_205790? Существует также версия этой команды, использующая IDOTA2Match_570, где я получаю разные результаты. Что делает IDOTA2Match_ID? Я никогда не нашел ничего об этом.

  2. Почему-то не работает параметр start_at_match_seq_num, у кого-нибудь была такая же проблема? Я всегда получаю одинаковые результаты. Я знаю, что нужен идентификатор последовательности вместо идентификатора совпадения, но идентификатор последовательности - это число от 0 до 100 при использовании GetMatchHistoryBySequenceNum.

  3. Дополнительная информация:

    Я хочу использовать GetMatchHistoryBySequenceNum вместо GetMatchHistory, потому что GetMatchHistory показывает странное поведение: он возвращает вам последние законченные игры, упорядоченные по времени начала, а не по времени окончания. Это крайне не подходит, потому что возвращает много игр с продолжительностью игры до 10 минут и редко - более 30 минут. (Для игроков в Dota) Я думаю (у меня есть подозрение), что это также причина, по которой такие сайты, как dotapicker.com, предпочитают бессмертных и других героев ранних игр.

Мой код здесь:

for($pages = 0 ; $pages<3; $pages++){

    for ($x = 0; $x <= 100; $x++){

        if(strpos($homepage, "match_id", $offset+10)==false){   
            break;
        }

        $match_id_str = "";
        $index1  = strpos($homepage, "match_id", $offset+10);
        $offset = $index1;

        #10 to 16: this is the letters after the search-word "match_id"  (the actual number)
        for ($x = 10; $x <= 16; $x++) {
            $match_id_str = $match_id_str.$homepage[$index1+$x];
        }

    }

    $cmd_url  = "https://api.steampowered.com/IDOTA2Match_205790/GetMatchHistoryBySequenceNum/v1/?key=My_key&start_at_match_seq_num=".match_id_str;
    $homepage = file_get_contents($cmd_url);
    file_put_contents($file, $homepage, FILE_APPEND);
}

Я надеюсь, что кто-то может мне помочь, я знаю, что это какая-то нишевая тема, но это также причина, почему так трудно найти информацию об этом.

1 ответ

Поздно на вечеринку, но я отвечу на случай, если кто-нибудь еще увидит этот пост.

Первая часть

С https://dev.dota2.com/showthread.php?t=58317:

Если вы разрабатываете свои фактические динамические вызовы API, (сначала убедитесь, что вы установили подходящий лимит запросов, как описано выше), рассмотрите возможность использования Dota2 Beta TEST API, который работает идентично Dota2 Beta API, за исключением того, что его URL-адреса отличаются:

Replace "IDOTA2Match_570" with "IDOTA2Match_205790"

Вторая часть

start_at_match_seq_num требует фактического идентификатора последовательности совпадения. Вы можете использовать GetMatchDetails конечная точка для получения порядкового номера конкретного совпадения.

https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails

Порядковый номер будет указан в объекте ответа как match_seq_num,

Другие вопросы по тегам