简介

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的数据信息。

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
    。。。不知道为啥,明明设置好了还是显示没有定义,还是老老实实用第一种方法(不知道哪位大神愿意解释一哈)

注意
  • 每个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位二进制数,第一位代表选手的队伍,最后三位代表在团队的位置(注意返回的为一个十进制数,需要进行转码)

    • 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位的二进制数(注意返回的为一个十进制数,需要进行转码)。

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

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

  • 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 匹配模式状态码
    • 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 资料可见性状态码
  • personaname steam账号名称
  • lastlogoff 玩家最后一次登陆steam时间戳
  • profileurl 玩家主页url
  • avatar,avatarmedium,avatarfull 玩家不同大小的头像
  • personastate 玩家在线状态码

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='')

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

说明

见原文

dota2api的介绍与使用相关推荐

  1. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  2. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  3. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  4. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  5. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  6. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  7. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  8. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

  9. Tensorrt一些优化技术介绍

    Tensorrt一些优化技术介绍 Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a ...

  10. 网路摄像头技术参数介绍

    网路摄像头技术参数介绍 星光级图像传感器 4MP (2592 × 1520) @30fps SmartH.265 / H.265+ / H.265 / SmartH.264 / H.264+ / H. ...

最新文章

  1. android获取地址api,如果在Android中使用位置API给出纬度和经度,如何获取地址
  2. python教程课后答案-python程序设计教程课后答案
  3. IBM---Java 多线程与并发编程专题
  4. android studio无线真机调试
  5. 数据接口测试工具 Postman 介绍
  6. java双引号的转义字符_JAVA中转义字符
  7. 打印三角形之细节讲解
  8. cs231n__4. Backpropagation and Neural Network
  9. 如果把去掉数组里面重复的项
  10. Daily scrum 12.19
  11. Centos rsync配置
  12. Matplotlib简介和pyplot的简单使用——subplot
  13. appium+python实现手势密码
  14. 7-2 前序序列创建二叉树
  15. 畅捷支付显示连接服务器失败,畅捷支付POS机常见错误码解决方法!
  16. 楚留香ai人脸识别_《楚留香》评测掌中快意恩仇的世界
  17. android 圆形头像方案,android圆形头像实现
  18. 坐标转换系列三 基于开源的proj4,封装成工具
  19. 8. Django 模型(二)
  20. Linux下PS1、PS2、PS3、PS4使用详解

热门文章

  1. 服务器进不去系统system,system是什么进程 system进程可以关闭吗
  2. python创建字符串数组_用zeep创建一个字符串数组参数?
  3. (L)小写l和(i)大写I的区分方法
  4. None of the configured nodes are available
  5. Makefile各类符号
  6. 利用BigDecimal类巧妙处理Double类型精度丢失
  7. 设置双击打开.ipynb文件
  8. 软件项目管理系统-进度管理
  9. pr EN2824 - Pr EN 2825- Pr EN 2826 是烟密度和烟气成分分析测试
  10. ERP实施技巧:用正确的方法做正确的事