参考 OverWolf 里的 DotaPlus 插件,我们用 Qt 也可以打造一款类似功能的软件
界面的话我们仿照上图
然后是功能:
首先是识别出当前匹配到的敌我方玩家 ID
Windows 上,在路径 <Steam>/steamapps/common/dota 2 beta/game/dota/server_log.txt 保存了一些信息
我们可以从这个文件中读取到类似红色方框内的字符串,通过正则表达式去解析出当前匹配到的玩家的数字 ID
然后可以通过 OpenDota 网站提供的 API 获取到玩家的其他信息
比如访问 https://api.opendota.com/api/players/383493387/matches 就能得到数字 ID 为 383493387 的比赛记录
OpenDota 还提供了很多 API 接口,比如:
https://api.opendota.com/api/players/383493387/recentMatches 是玩家最近 20 场比赛记录
https://api.opendota.com/api/players/383493387 里的 avatarfull 字段包含了玩家的高清头像
我们可以通过 Qt 的 QNetworkAccessManager 类的 get 函数去请求网络数据
因为 OpenDota 使用了 HTTPS,所以我们需要安装 OpenSSL,否则会提示
1qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed我们可以通过以下代码来查看当前 Qt 使用的 OpenSSL 的版本
xxxxxxxxxx11qDebug()<< "QSslSocket=" << QSslSocket::sslLibraryBuildVersionString();然后可以去 http://slproweb.com/products/Win32OpenSSL.html 下载对应的版本
比如我下载的是下图标识的链接
下面就是演示获取头像 Url 的 Qt 代码
xxxxxxxxxx191QNetworkAccessManager *manager = new QNetworkAccessManager(this);2QNetworkRequest request(QUrl(QString("https://api.opendota.com/api/players/383493387")));3QNetworkReply *reply = manager->get(QNetworkRequest(request));4connect(reply, &QNetworkReply::finished, this, [=](){5 if(reply->error() != QNetworkReply::NoError)6 {7 qDebug() << "get data error! " << int(reply->error());8 }9 else10 {11 QByteArray ba = reply->readAll();12 QJsonDocument jsonDoucment = QJsonDocument::fromJson(ba);13 QJsonObject jsonObject = jsonDoucment.object();14 QJsonObject profileObject = jsonObject["profile"].toObject();15 QString avatarString = profileObject["avatarfull"].toString();16 qDebug() << avatarString;17 }18 reply->deleteLater();19});接下来就是新建一个名为 DotaPlus 的 Qt 工程,正式开始编码了……
花了两天周末时间,简单做了一下
代码我上传了百度网盘
链接: https://pan.baidu.com/s/1Xn3kmPJhfcnZsX8tERWLGA?pwd=v77a