dota2api的介绍与使用

简介

TI8比赛刚刚过去,趁热介绍一个dota2的python包,叫dota2api,在上面能查到公开的一些比赛数据。dota2api是一个python模块,由一个外国人将V社提供的官方API封装而成,查看其源码请戳这。

安装

pip安装

通过pip安装

$ pip install dota2api

源码安装

如果pip安装不成功,可从github处下载源码,执行其中的setup文件进行安装

$ git clone https://github.com/joshuaduffy/dota2api/ && cd dota2api/
$ python setup.py install

使用

参照原文

对象

dota2api.Initialise

 class dota2api.Initialise(api_key=None, executor=None, language=None, logging=None, raw_mode=None)

从始至终都要调用的一个对象,通过它内置的一些方法获取数据,除api_key外,其他都为非必需参数。

api_key

api_key的获取

使用你的steam账号从这获取api_key,如果以前从没有注册过,随便写个域名就行了,重点是密钥后面的字符串,我们就是用它来通过steam获取Dota2的数据信息。
dota2api的介绍与使用_第1张图片

api_key的使用

注意api_key为一个字符串变量

  1. 直接初始化
>>> import dota2api
>>> api = dota2api.Initialise("你的api_key", raw_mode=True)
  1. 设置为环境变量
    注意环境变量的名称必须为D2_API_KEY
  • linux
$  export D2_API_KEY='your api_key'
  • windows
    。。。不知道为啥,明明设置好了还是显示没有定义,还是老老实实用第一种方法(不知道哪位大神愿意解释一哈)
    dota2api的介绍与使用_第2张图片
    这里写图片描述
注意
  • 每个API_KEY被限制在每天访问100,00( 十万)次
  • 如果匹配服务器正忙或频繁调用API可能会遭遇503错误,请等待30s后重试

其他参数介绍

  • executor   默认为None,不用管它
  • language 传入字符集名称,默认为None,即使用en_US字符集。可传入zh_CN即可表示为中文
  • logging 是否打印输出日志,默认为None,不打印。
  • raw_mode 是否将输出变为可读的数据,默认为True。感觉就是输出格式好看了一点

方法

get_game_items

get_game_items()

获取全部装备信息

返回值实例

{'items': [{'id': 1,
   'name': 'item_blink',
   'cost': 2250,
   'secret_shop': 0,
   'side_shop': 1,
   'recipe': 0,
   'localized_name': '闪烁匕首',
   'url_image': 'http://cdn.dota2.com/apps/dota2/images/items/blink_lg.png'},
  {'id': 2,
   'name': 'item_blades_of_attack',
   'cost': 430,
   'secret_shop': 0,
   'side_shop': 0,
   'recipe': 0,
   'localized_name': '攻击之爪',
   'url_image': 'http://cdn.dota2.com/apps/dota2/images/items/blades_of_attack_lg.png'},
  {'id': 3,
   'name': 'item_broadsword',
   'cost': 1200,
   ...}
   'status':200}

说明

  • items  所有装备信息组成一个列表存储在此字段中
    • id 装备id
    • name 装备名称,注意
    • cost 购买装备所花费金钱
    • secret_shop 是否在神秘商店出售
    • side_shop 是否在边路商店出售
    • recipe 是否需要合成卷轴
    • localized_name 装备官方全称,例如这件装备是跳刀,如果初始化时未指定language参数,这个字段的值就为Blink Dagger,如果指定language参数为zh_CN,那么这个字段的值就为闪烁匕首
    • url_image 装备图片所在url,已不可用
  • status 请求状态码

get_heroes

get_heroes()

获取所有英雄信息

返回值实例

{'heroes': [{'name': 'npc_dota_hero_antimage',
   'id': 1,
   'localized_name': '敌法师',
   'url_small_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/antimage_sb.png',
   'url_large_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/antimage_lg.png',
   'url_full_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/antimage_full.png',
   'url_vertical_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/antimage_vert.jpg'},
  {'name': 'npc_dota_hero_axe',
   'id': 2,
   'localized_name': '斧王',
   'url_small_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/axe_sb.png',
   'url_large_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/axe_lg.png',
   'url_full_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/axe_full.png',
   'url_vertical_portrait': 'http://cdn.dota2.com/apps/dota2/images/heroes/axe_vert.jpg'},
  {'name': 'npc_dota_hero_bane',
   'id': 3,
   'localized_name': '祸乱之源',
   ...}
 'status': 200,
 'count': 116}

说明

  • heroes 所有英雄的信息组成一个列表存储在此字段中
    • name 英雄名称
    • id 英雄id
    • localized_name 英雄官方名全称,例如敌法的英文名是Anti-Mage,中文名是敌法师
    • url_small_portrait 英雄小头像
    • url_large_portrait 英雄大头像
    • url_full_portrait 英雄超大型头像
    • url_vertical_portrait 英雄超大型头像,长度大于宽度
  • status 网页状态码
  • count 英雄数量

get_league_listing

get_league_listing()

获取所有联赛信息

返回值实例

{'leagues': [{'name': '“乐者为王”Dota 2联赛',
   'leagueid': 1212,
   'description': '64支巴西顶尖的业余战队将争夺首届“乐者为王”Dota 2联赛的冠军头衔。',
   'tournament_url': 'https://binarybeast.com/xDOTA21404228/',
   'itemdef': 10541},
  {'name': 'joinDOTA联赛第3赛季',
   'leagueid': 1640,
   'description': 'Dota 2全球赛事,面向所有玩家!激烈的比赛中不乏高手的顶尖对决,也有业余战队的精彩过招。每售出一张门票奖金都将增加1.00美元!',
   'tournament_url': 'http://www.joindota.com/en/leagues/',
   'itemdef': 10742},
  {'name': 'Killing Spree:北美系列赛',
   'leagueid': 25,
   'description': 'Killing Spree是长期的战队争霸活动,参赛队伍是四支来自北美的顶尖战队。每支队伍想要获胜必须一路奋战,连赢三场,达到“大杀特杀(killing spree)”。比赛由NEO Dota主办。',
   ...}

说明

  • leagues 返回值仅含的一个字段,所有联赛信息按时间顺序组成一个列表储存在此字段中
    • name 联赛全称,TI8中文全称为2018年国际邀请赛公开预选赛,英文全称为The International 2018 Open Qualifiers
    • leagueid 联赛id
    • description 联赛简介
    • tournament_url 联赛简介url
    • itemdef 似乎这个数越大,比赛日期就越靠后

get_match_details

get_match_details(match_id=None, **kwargs)

获取比赛详细信息,其中match_id即比赛编号,为必选参数。

返回值实例

{'players': [{'account_id': 125581247,
   'player_slot': 0,
   'hero_id': 109,
   'item_0': 1,
   'item_1': 46,
   'item_2': 63,
   'item_3': 116,
   'item_4': 236,
   'item_5': 154,
   'backpack_0': 0,
   'backpack_1': 0,
   'backpack_2': 0,
   'kills': 7,
   'deaths': 5,
   'assists': 11,
   'leaver_status': 0,
   'last_hits': 338,
   'denies': 24,
   'gold_per_min': 546,
   'xp_per_min': 540,
   'level': 21,
   'hero_damage': 19005,
   'tower_damage': 1047,
   'hero_healing': 0,
   'gold': 1652,
   'gold_spent': 17510,
   'scaled_hero_damage': 12613,
   'scaled_tower_damage': 611,
   'scaled_hero_healing': 0,
   'ability_upgrades': [{'ability': 5621, 'time': 948, 'level': 1},
    {'ability': 5619, 'time': 1032, 'level': 2},
    {'ability': 5621, 'time': 1134, 'level': 3},
	    ...]
    ...]
 'radiant_win': False,
 'duration': 2188,
 'pre_game_duration': 90,
 'start_time': 1535249730,
 'match_id': 4080856812,
 'match_seq_num': 3539243234,
 'tower_status_radiant': 4,
 'tower_status_dire': 2036,
 'barracks_status_radiant': 3,
 'barracks_status_dire': 63,
 'cluster': 113,
 'first_blood_time': 153,
 'lobby_type': 1,
 'human_players': 10,
 'leagueid': 9870,
 'positive_votes': 14848,
 'negative_votes': 859,
 'game_mode': 2,
 'flags': 1,
 'engine': 1,
 'radiant_score': 34,
 'dire_score': 35,
 'radiant_team_id': 15,
 'radiant_name': 'PSG.LGD',
 'radiant_logo': 927056072280704321,
 'radiant_team_complete': 1,
 'dire_team_id': 2586976,
 'dire_name': 'OG',
 'dire_logo': 862855679982708969,
 'dire_team_complete': 0,
 'radiant_captain': 101695162,
 'dire_captain': 19672354,
 'picks_bans': [{'is_pick': False, 'hero_id': 67, 'team': 0, 'order': 0},
  {'is_pick': False, 'hero_id': 19, 'team': 1, 'order': 1},
  {'is_pick': False, 'hero_id': 12, 'team': 0, 'order': 2},
  {'is_pick': False, 'hero_id': 6, 'team': 1, 'order': 3},
  {'is_pick': False, 'hero_id': 58, 'team': 0, 'order': 4},
	  ...]
   'lobby_name': 'Practice',
 'game_mode_name': 'Captains Mode',
 'cluster_name': 'US West'}

说明

  • players 比赛选手信息组成一个列表储存在这个字段中

    • account_id 选手的账号id

    • player_slot 一个8位二进制数,第一位代表选手的队伍,最后三位代表在团队的位置(注意返回的为一个十进制数,需要进行转码)

      play_plot状态码

    • hero_id 选手挑选的英雄id

    • hero_name 英雄全称

    • item_0,item_1,item_2,item_3,item_4,item_5 比赛结束时选手装备栏物品对应的id

    • item_0_name,item_1_name,item_2_name,item_3_name,item_4_name,item_5_name 装备栏物品对应名称(如果item_3=0那么将不会有item_3_name这个字段)

    • backpack_0,backpack_1,backpack_2 比赛结束时选手三个背包栏中物品对应id

    • kills 杀人数

    • deaths 死亡数

    • assists 助攻数

    • denies 反补数

    • gold_per_min GPM,每分钟金钱

    • xp_per_min XPM,每分钟经验

    • level 比赛结束时英雄等级

    • hero_damage 对敌方造成的总伤害量

    • tower_damage 对敌方塔造成的总伤害量

    • hero_healing 总治疗量

    • gold 比赛结束时金钱

    • gold_spent 总花费金钱

    • ability_upgrades 升级技能树

      • ability 技能代号
      • time 升级时间
      • level 级别
  • radiant_win 天辉方是否取得胜利,1代表是,0代表否

  • duration 比赛持续时间,以s为单位

  • pre_game_duration 赛前ban-pick消耗时间

  • start_time 开始时间,为一个10位的时间戳

  • match_id 比赛编号

  • match_seq_num

  • tower_status_radiant 天辉方防御塔状态,一个16位的二进制数(注意返回的为一个十进制数,需要进行转码)。

  • tower_status_dire 夜魇方防御塔状态,一个16位的二进制数(注意返回的为一个十进制数,需要进行转码)。
    dota2api的介绍与使用_第3张图片

  • barracks_status_radiant 天辉方兵营状态,一个8位的二进制数(注意返回的为一个十进制数,需要进行转码)

  • barracks_status_dire 夜魇方兵营状态,一个8位的二进制数(注意返回的为一个十进制数,需要进行转码)
    dota2api的介绍与使用_第4张图片

  • first_blood_time 一血时间(s)

  • leagueid 联赛id

  • radiant_score 天辉方杀人数

  • dire_score 夜魇方杀人数

  • radiant_team_id 天辉方队伍id

  • radiant_name 天辉方队伍名称

  • dire_team_id 夜魇方队伍id

  • dire_name 夜魇方队伍名称

  • radiant_captain

  • picks_bans 比赛BP情况

    • is_pick 是否为选人
    • hero_id BP的英雄
    • team 所属队伍,0表示天辉,1表示夜魇
  • game_mode_name 游戏模式名称

get_match_history

get_match_history(account_id=None, **kwargs)

获取历史比赛信息

参数

  • account_id 玩家ID,只显示该玩家最近的比赛信息
  • hero_id 英雄ID,只显示最近的关于该英雄的比赛信息
  • league_id 联赛ID,只显示该联赛中的比赛信息
  • start_at_match_id 比赛ID,只显示时间早于该比赛的比赛信息
  • matches_requested 设置显示比赛的场数,默认为100
  • tournament_games_only 限制显示的比赛为官方举办的锦标赛

返回值实例

{'status': 1,
 'num_results': 100,
 'total_results': 500,
 'results_remaining': 400,
 'matches': [{'match_id': 4109095754,
   'match_seq_num': 3561915451,
   'start_time': 1536499629,
   'lobby_type': 4,
   'radiant_team_id': 0,
   'dire_team_id': 0,
   'players': [{'account_id': 4294967295, 'player_slot': 0, 'hero_id': 49},
    {'account_id': 872413016, 'player_slot': 1, 'hero_id': 36},
    {'account_id': 4294967295, 'player_slot': 2, 'hero_id': 111},
    {'account_id': 4294967295, 'player_slot': 3, 'hero_id': 69},
    {'account_id': 4294967295, 'player_slot': 4, 'hero_id': 65},
    {'player_slot': 128, 'hero_id': 2},
    {'player_slot': 129, 'hero_id': 15},
    {'player_slot': 130, 'hero_id': 20},
    {'player_slot': 131, 'hero_id': 4},
    {'player_slot': 132, 'hero_id': 37}]},
  {'match_id': 4109094705,
   'match_seq_num': 3561913149,
   'start_time': 1536499598,
   'lobby_type': 0,
   'radiant_team_id': 0,
   'dire_team_id': 0,
   ...}]
 }

说明

  • num_results 显示的比赛信息数目
  • total_results 全部符合条件的比赛信息数目
  • results_remaining 剩余未显示的比赛信息数目
  • matches 包含比赛信息的列表
    • match_id 比赛ID
    • start_time 比赛开始时间的时间戳
    • lobby_type 匹配模式状态码
      dota2api的介绍与使用_第5张图片
    • player 玩家信息
      • account_id 玩家ID
      • player_slot 见player_slot说明
      • hero_id 英雄ID

实例

说明

get_player_summaries

get_player_summaries(steamids=None, **kwargs)

获取玩家steam账号的主页,头像,在线状态等信息

返回值实例

{'players': [{'steamid': '76561198067128891',
   'communityvisibilitystate': 2,
   'profilestate': 1,
   'personaname': 'sqm',
   'lastlogoff': 1536298714,
   'profileurl': 'https://steamcommunity.com/id/106863163/',
   'avatar': 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/07/0770d08f36d7a9aa5272a2e2ff5be29ebc7dd55a.jpg',
   'avatarmedium': 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/07/0770d08f36d7a9aa5272a2e2ff5be29ebc7dd55a_medium.jpg',
   'avatarfull': 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/07/0770d08f36d7a9aa5272a2e2ff5be29ebc7dd55a_full.jpg',
   'personastate': 0}]}

参数

  • steamids 一个包含玩家32位ID的列表,如果是64位会被强行转为32位

注意还有个64位ID,steamID_64 = steamID_32 + 76561197960265728

说明

  • steamid 玩家64位的steamID
  • communityvisibilitystate 资料可见性状态码
    dota2api的介绍与使用_第6张图片
  • personaname steam账号名称
  • lastlogoff 玩家最后一次登陆steam时间戳
  • profileurl 玩家主页url
  • avatar,avatarmedium,avatarfull 玩家不同大小的头像
  • personastate 玩家在线状态码
    dota2api的介绍与使用_第7张图片

get_team_info_by_team_id

get_team_info_by_team_id(start_at_team_id=None, **kwargs)

获取一系列按ID升序排列的战队信息

返回值实例

{'status': 1,
 'teams': [{'name': 'PSG.LGD',
   'tag': 'PSG.LGD',
   'time_created': 1338727837,
   'calibration_games_remaining': 3,
   'logo': 927056072280704321,
   'logo_sponsor': 965345547605295955,
   'country_code': 'cn',
   'url': '',
   'games_played': 1400,
   'player_0_account_id': 89217927,
   'player_1_account_id': 89399750,
   'player_2_account_id': 89407113,
   'player_3_account_id': 89598554,
   'player_4_account_id': 92590479,
   'player_5_account_id': 94296097,
   'player_6_account_id': 94738847,
   'admin_account_id': 118678359}]}

参数

  • start_at_team_id 按ID指定从某个战队开始显示
  • teams_requested 限制显示的战队数目

说明

  • status 状态码,成功获取战队信息则为1,否则为其他数值
  • teams 包含战队信息的数组
    • name 战队名称
    • tag 战队简称
    • time_created 战队成立时间戳
    • country_code 战队所属的国家,ISO 3166-1 country code。见维基百科
    • games_played 当前队员在该战队进行的总比赛数
    • player_0_account_id,player_1_account_id… 战队当前队员steamID
    • admin_account_id 战队team admin(团队管理员???)ID

get_tournament_prize_pool

get_tournament_prize_pool(leagueid=None)

获取联赛奖金池信息

实例

{'prize_pool': 25532177,
'league_id': 9870,
'status': 200}

说明

  • prize_pool 奖金池总金额

update_game_items

update_game_items()

说明

将从get_game_items方法得到的返回值保存,替代安装模块中的ref\items.json文件

update_heroes

update_heroes()

说明

将从get_heroes方法得到的返回值保存,替代安装模块中的ref\heroes.json文件

get_live_league_games

get_live_league_games()

获取正在直播的比赛信息,也就是DOTA2客户端那个观战列表里的比赛

说明

见原文

get_top_live_games

get_top_live_games(partner='')

获取客户端观战人数排名前十的比赛

说明

见原文

你可能感兴趣的:(python,学习笔记,Python,Dota2,Data)