Guest Posted October 29, 2020 Posted October 29, 2020 (edited) Всем привет!Недавно гильдиям исполнилось 3 года и мы с EvilSkyV сделали парсер гильдий для постов одной группы. Сейчас я решил поделиться этим парсером со всеми, чтобы все могли в любой момент узнать всю интересующую их информацию. Ниже будет инструкция по установке парсера. Заходим на оф. сайт PythonКачаем питонУстанавливаемСкачиваем файл или открываем текстовый документ и вставляем код ниже (сохранить нужно как угодно, но в конце .py [не русское ру])Если хотите, можете отредактировать код.Добавляем Api DevЗапускаемЖдем 3-4 часа (можно делать что угодно, но не закрывать файл/консоль/хз где вы будете открывать этот файл)Профит. Ссылка на файл: *тык* Код: #импорт библиотек :) from requests import get from time import sleep #импорт библиотек :) api = "&token=ВАШ /API DEV ТОКЕН СЮДА" #ваш /api dev токен. #тип переменные. можно было и без них, но мне так удобнее. end_line = 0 guilds = 0 errors = 0 total_coins = 0 total_exp = 0 total_players = 0 admin = 0 chief = 0 warden = 0 moder = 0 organizer = 0 dev = 0 youtube = 0 maplead = 0 builder = 0 immortal = 0 holy = 0 premium = 0 vip = 0 players = 0 x = 0 rankss = ["PLAYER", "VIP", "PREMIUM", "HOLY", "IMMORTAL", "BUILDER", "MAPLEAD", "YOUTUBE", "DEV", "ORGANIZER", "MODER", "WARDEN", "CHIEF", "ADMIN"] rankz = [players, vip, premium, holy, immortal, builder, maplead, youtube, dev, organizer, moder, warden, chief, admin] #тип переменные. можно было и без них, но мне так удобнее. while x < 10: #пока гильдии есть. x += 1 #прибавляем кол-во гильдий. req_guild = get("https://api.vimeworld.ru/guild/get?id=" + str(x) + api).json() #берем инфу с api вайма. if "error" in req_guild: #тут мы проверяем есть ли ошибка. if "error_code" in req_guild["error"]: #ошибка возникает если гильдия не найдена (удалена/не создана). guilds += 1 #guilds - кол-во гильдий. errors += 1 #errors - кол-во ошибок. end_line += 1 #end_line - если слишком много ошибок, то это скорее всего конец списка гильдий. на момент 2020.10.29 их около 30к. Если будет меньше 30к и останавливать программу, вбахайте 200-300. if end_line > 100: #проверка если это происходит. break #блок кода, а следовательно вывод всей инфы ниже. else: #бывает также ситуация, когда прокает "error" в нике, названии гильдии или другой фигне и, если 2 уровень проверки дал нам знать, что это не ошибка, продолжаем сбор информации. guilds += 1 #прибавляем гильдию в общий список. total_coins += req_guild["totalCoins"] #собираем общее кол-во монет. total_coins += req_guild["totalExp"] #собираем общее кол-во опыта. total_players += len(req_guild["members"]) #собираем общее кол-во игроков. for i in range(len(req_guild["members"])): #а тут начинаются цыганские фокусы. for j in range(len(rankss)): #тут идет проверка на превилегию. if req_guild["members"][i]["user"]["rank"] == rankss[j]: #инфа о игроках с различными привилегиями выведется ниже. rankz[j] += 1 end_line = 0 #нужно сбросить end_line, чтобы программа не остановилась. мы же не хотим остановиться на 200 или 300 гильдии? else: #дальше код полностью повторяется, только в случае ниже "error" вообще нигде не присутствует. guilds += 1 total_coins += req_guild["totalCoins"] total_exp += req_guild["totalExp"] total_players += len(req_guild["members"]) for i in range(len(req_guild["members"])): for j in range(len(rankss)): if req_guild["members"][i]["user"]["rank"] == rankss[j]: rankz[j] += 1 end_line = 0 print(x) #тут просто выводится id гильдии. можно поменять x на любую интересующую вас информацию, но учтите, что в erorr нельзя просмотреть название гильдии и другую информацию. sleep(.24) #так как у нас всего 300 запросов в минуту, нам нужно ограничение. 0.24 секунд достаточно print(f"Всего было создано {str(guilds - end_line)} гильдий.") #а тут мы просто выводим информацию print(f"Из них удалено {str(errors - end_line)}.") print(f"Осталось {str(guilds - errors)} гильдий.") print(" ") print(f"За все время было набрано {str(total_exp)} опыта и {str(total_coins)} коинов.") print(" ") print(f"На данный момент во гильдиях {str(total_players)} игроков.") print(f"Из них {str(rankz[0])} Игроков, {str(rankz[0])} VIP, {str(rankz[2])} Premium, {str(rankz[3])} Holy, {str(rankz[4])} Immortal, {str(rankz[5] + rankz[6])} Билдеров, {str(rankz[7])} Ютуберов, {str(rankz[8])} Разработчиков, {str(rankz[9])} Организаторов, {rankz[10]} Модераторов, {rankz[11]} Проверенных модераторов, {rankz[12]} Главных модераторов, {rankz[13]} Админов.") input() #конец. нажмите "Enter", чтобы закрыть программу. Надеюсь вам когда-нибудь понадобится это. Удачи. :huh: Edited October 30, 2020 by ZrangoYT
Guest Posted October 30, 2020 Posted October 30, 2020 услада для глазда уж... немного стыдна)да уж... немного стыдна)но код изначально делался чисто для меня, поэтому я и позволил себе такую "красоту"
Nordia Posted October 30, 2020 Posted October 30, 2020 да уж... немного стыдна)но код изначально делался чисто для меня, поэтому я и позволил себе такую "красоту"очень часто вижу подобное на питоне
Guest Posted October 30, 2020 Posted October 30, 2020 (edited) очень часто вижу подобное на питонеПотому что дыаааа) через 3-4 часа скину норм код, тк ща в шк Edited October 30, 2020 by ZrangoYT
BestPlayTop Posted November 1, 2020 Posted November 1, 2020 Почему-то нет проверки на ошибку связанную с тем, что закончился лимит запросов в минуту, вопрос - почему?
I_Virus_I Posted November 1, 2020 Posted November 1, 2020 Почему-то нет проверки на ошибку связанную с тем, что закончился лимит запросов в минуту, вопрос - почему?sleep(.24) #так как у нас всего 300 запросов в минуту, нам нужно ограничение. 0.24 секунд достаточно
BestPlayTop Posted November 1, 2020 Posted November 1, 2020 (edited) sleep(.24) #так как у нас всего 300 запросов в минуту, нам нужно ограничение. 0.24 секунд достаточноВсё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняются Edited November 1, 2020 by BestPlayTop
I_Virus_I Posted November 1, 2020 Posted November 1, 2020 Всё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняютсяТы думаешь я не знаю об этом? Он решил сделать так решение этой проблемы, чем получать заголовок запроса
BestPlayTop Posted November 1, 2020 Posted November 1, 2020 Ты думаешь я не знаю об этом? Он решил сделать так решение этой проблемы, чем получать заголовок запроса А, извиняюсь, не думал что это взято с кода. Тоже такое себе решение этой проблемы на самом деле (это адресованно автору) I_Virus_I 1
Guest Posted November 1, 2020 Posted November 1, 2020 Всё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняютсяХм, хорошая идея. Буду использовать в будущем.Но мой способ также имеет право на жизнь.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now