Не работает парсер базы героев игры Dota 2
Всем привет! Нужна помощь с кодом на Python: написал парсер базы героев игры Dota 2, но информацию он не выдает.
import requests
import json
def get_heroes():
response = requests.get('https://api.opendota.com/api/heroes')
if response.status_code == 200:
heroes_data = response.json()
heroes = [hero['localized_name'] for hero in heroes_data]
return heroes
else:
return []
def get_hero_info():
url = "https://api.opendota.com/api/heroes"
response = requests.get(url)
heroes_data = response.json()
return heroes_data
def get_hero_versus(hero_id, hero_data):
url = f"https://api.opendota.com/api/heroes/{hero_id}/matchups"
response = requests.get(url)
hero_versus_data = response.json()
versus_heroes = []
for hero in hero_versus_data:
if hero['games_played'] > 0:
versus_heroes.append({
'hero_id': hero['hero_id'],
'games_played': hero['games_played'],
'wins': hero['wins'],
'win_rate': round(hero['wins'] / hero['games_played'] * 100, 2)
})
sorted_versus_heroes = sorted(versus_heroes, key=lambda x: x['win_rate'], reverse=True)
return sorted_versus_heroes
def get_hero_by_name(hero_name, hero_data):
for hero in hero_data:
if hero['localized_name'].lower() == hero_name.lower():
return hero
return None
def print_hero_info(hero, versus_heroes):
if hero:
print(f"Информация о герое {hero['localized_name']}:")
print(f"Полномочия героя: {hero['roles']}")
print()
if versus_heroes:
best_versus = versus_heroes[0]
worst_versus = versus_heroes[-1]
heroes_data = get_hero_info()
best_versus_hero = get_hero_by_name(str(best_versus['hero_id']), heroes_data)
worst_versus_hero = get_hero_by_name(str(worst_versus['hero_id']), heroes_data)
print(f"Лучший противник героя {hero['localized_name']}:")
if best_versus_hero:
print(f"Герой: {best_versus_hero['localized_name']}")
print(f"Сыграно матчей: {best_versus['games_played']}")
print(f"Побед: {best_versus['wins']}")
print(f"Процент победы: {best_versus['win_rate']}%")
else:
print("Информация о лучшем противнике отсутствует.")
print()
print(f"Худший противник героя {hero['localized_name']}:")
if worst_versus_hero:
print(f"Герой: {worst_versus_hero['localized_name']}")
print(f"Сыграно матчей: {worst_versus['games_played']}")
print(f"Побед: {worst_versus['wins']}")
print(f"Процент победы: {worst_versus['win_rate']}%")
else:
print("Информация о худшем противнике отсутствует.")
else:
print("Нет информации о противниках.")
else:
print("Герой не найден.")
def main():
heroes_data = get_hero_info()
while True:
hero_name = input("Введите имя героя (для выхода введите 'exit'): ")
if hero_name.lower() == "exit":
break
hero = get_hero_by_name(hero_name, heroes_data)
if hero:
versus_heroes = get_hero_versus(hero['id'], heroes_data)
print_hero_info(hero, versus_heroes)
else:
print("Герой не найден.")
if __name__ == "__main__":
main()
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
def get_hero_by_id(hero_name, hero_data):
for hero in hero_data:
if hero['id'] == hero_name:
return hero
return None
def print_hero_info(hero, versus_heroes, heroes_data):
...
best_versus = versus_heroes[0]
worst_versus = versus_heroes[-1]
best_versus_hero = get_hero_by_id(best_versus['hero_id'], heroes_data)
worst_versus_hero = get_hero_by_id(worst_versus['hero_id'], heroes_data)
...
def main():
...
print_hero_info(hero, versus_heroes, heroes_data)
...