Основная цель: Автоматизированно собирать данные о PackageID через библиотеку SteamKit (github.com/SteamRE/SteamK..., используя асинхронные запросы, прокси и последующую запись информации в базу данных.
Основные требования к реализации: * Получение ключевых полей: * AppID (числовое значение) * Название (name) * Тип (type) * allow_gifting (bool) * Список ограниченных стран (purchaserestrictedcountries) * Работа с библиотекой SteamKit для реализации взаимодействия со Steam API. * Возможность легко расширить или изменить перечень извлекаемых полей при необходимости.
Пример для тестирования: store.steampowered.com/su... Извлекаемая информация (в формате JSON) должна содержать поля: * appid: 2322010 * name: God of War Ragnarök * type: game * allow_gifting: True * purchaserestrictedcountries: Список стран в виде строки (например, "AF AX AL DZ ...")
Обеспечение асинхронного режима и пакетной обработки с использованием прокси * Запросы к Steam API должны отправляться асинхронно. * Предусмотреть механизм ограничения количества одновременных запросов (например по 200 запросов за раз). * Эффективное использование прокси (например каждый запрос использует рандомный прокси из списка) * Устойчивость к большому объёму обрабатываемых PackageID: приложение не должно “падать” или замедляться при значительном количестве ID. * Логирование неудачных запросов и попыток переподключения с новым прокси
Обработка ошибок * Предусмотреть лог ошибок: недоступность Steam API, неправильные ответы, отсутствие packageid, время ожидания (timeout) и другие, в случае возникновения. * Реализовать повторные попытки/ретраи при неудачных запросах (например, несколько раз по 1 секунде, если так и не получили ответа, то возвращать пустые ответы).
Взаимодействие с базой данных * Получение списка packageID, которые необходимо обработать. * Сохранение результатов парсинга в БД на SQL.
Тестирование – Проверить стабильность работы скрипта на 1000+ PackageID в БД
Доп. инфо: gist.github.com/Js41637/3... (не проверялся, возможно готовый шаблон для парсинга, может упростить задачу)