Перейти к публикации

VimeWorldGuildChecker [Python]


Гость

Рекомендованные сообщения

Всем привет!

Недавно гильдиям исполнилось 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:

Изменено пользователем ZrangoYT
Ссылка на комментарий

Почему-то нет проверки на ошибку связанную с тем, что закончился лимит запросов в минуту, вопрос - почему?

sleep(.24) #так как у нас всего 300 запросов в минуту, нам нужно ограничение. 0.24 секунд достаточно

Ссылка на комментарий

sleep(.24) #так как у нас всего 300 запросов в минуту, нам нужно ограничение. 0.24 секунд достаточно

Всё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняются

Изменено пользователем BestPlayTop
Ссылка на комментарий

Всё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняются

Ты думаешь я не знаю об этом? Он решил сделать так решение этой проблемы, чем получать заголовок запроса 

Ссылка на комментарий

Ты думаешь я не знаю об этом? Он решил сделать так решение этой проблемы, чем получать заголовок запроса 

А, извиняюсь, не думал что это взято с кода. Тоже такое себе решение этой проблемы на самом деле (это адресованно автору)

Ссылка на комментарий

Всё намного проще, там в заголовках тебе пишет сколько осталось до следующего сбрасывания лимита. Да и если пинга небольшая то 300 запросов быстро выполняются

Хм, хорошая идея. Буду использовать в будущем.

Но мой способ также имеет право на жизнь.

Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...