利用LCUAPI查询LOL好友添加时长
如果看不懂代码里的部分内容,建议先阅读一下我博客写的LCU通信原理简介:https://alphaft.me/tags/LeagueClient/# 原理
在LOL的商城里,好友之间赠送礼物有这么一个条件
> 超过14天的好友能赠送礼物
要判断是否超过14天,必定在某个地方储存了成为好友的日期。幸运的是,LCU的 REST API中提供了查询方法
> GET /lol-store/v1/giftablefriends
返回样例:
```JSON
[
{
"friendsSince": "2015-06-06 19:51:10",
"nick": "53263468",
"oldFriends": true,
"summonerId": 4012653853
},
{
...
...
},
....
]
```
数据注释:
| key | value |
| ----------- | ------------------------ |
| friendSince | 成为好友的时间,精确到秒 |
| nick | 好友昵称 |
| oldFriends| 到目前时间是否够14天 |
| summonerId| summonerId |
有这些就很好搞了,接下来写个DEMO试试
# DEMO
代码效果放在哔哩哔哩了
https://www.bilibili.com/video/BV1eK4y147od/
代码如下
**因为要获取程序的命令行参数,所以需要管理员权限**
```python
import requests
import subprocess
from datetime importdatetime
class LCU:
def __init__(self):
'''
init params
'''
self.port = None
self.host = '127.0.0.1'
self.token = None
self.protocol = 'https'
self.url = None
self.pid = None
def getParam(self):
'''
From https://github.com/minhluu2000/Project-Lego and changed a little
Get necessary for client-specific info through CommandLine
'''
raw_output = subprocess.check_output(
['wmic', 'PROCESS', 'WHERE', "name='LeagueClientUx.exe'", 'GET', 'commandline']).decode('gbk')
# Use GBK in case of Chinese character in path
app_port = raw_output.split('--app-port=')[-1].split(' ').strip('\"')
auth_token = raw_output.split('--remoting-auth-token=')[-1].split(' ').strip('\"')
url = self.protocol + '://' + 'riot:' + auth_token + '@' + self.host + ':' + app_port
return app_port, auth_token, url
def init(self):
'''
Init the instance
'''
while True:
if not self.checkProcess():
print('未检测到LeagueClient.exe')
else:
self.pid = self.checkProcess()
self.port, self.token, self.url = self.getParam()
break
def giftablefriends(self):
'''
/lol-store/v1/giftablefriends
:return:
[
{
"friendsSince": "2015-06-06 19:51:10",
"nick": "53263468",
"oldFriends": true,
"summonerId": 4012653853
},
....
]
'''
rest = "/lol-store/v1/giftablefriends"
request = requests.get(self.url + rest, verify=False)
infolist = request.json()
return infolist
def getFriendDate(self, reverse=False):
infolist = self.giftablefriends()
date_now_tuple = datetime.now().timetuple()
date_now = datetime(date_now_tuple.tm_year, date_now_tuple.tm_mon, date_now_tuple.tm_mday)
for infodict in infolist:
date = infodict['friendsSince']
date_old_tuple = datetime.strptime(date, '%Y-%m-%d %H:%M:%S').timetuple()
date_old = datetime(date_old_tuple.tm_year, date_old_tuple.tm_mon, date_old_tuple.tm_mday)
interval = (date_now-date_old).days
infodict['interval'] = interval
#infolist_sorted = sorted(infolist, key=lambda hey:hey['interval'])排序后新建列表
infolist.sort(key=lambda profile:profile['interval'], reverse=False)
print(infolist)
for infodict in infolist:
date = infodict['friendsSince']
nick = infodict['nick']
interval = infodict['interval']
print(f'你和 {nick} 在 {date} 成为了好友, 距今已经 {interval}天')
lcu = LCU()
lcu.init()
lcu.getFriendDate()
``` Perry 发表于 2020-7-2 20:01
有没有自动选英雄的API自动确定的
这个在REST API里似乎是有的
http://www.mingweisamuel.com/lcu-schema/tool/#/Plugin%20lol-champ-select
我记得国内也有部分作者做过秒选器
https://github.com/pseudonym117/YasuNO
这个项目是避免自己选取亚索
https://github.com/pipe01/legendary-rune-maker
这个项目功能很多,其中包含了自动接受,自动BAN,自动选英雄,可以参考一下 有没有自动选英雄的API自动确定的 楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗? bushiri 发表于 2020-7-6 23:33
楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗?
这个是国服自己的活动,和LCU本身无关。不做这个。 bushiri 发表于 2020-7-6 23:33
楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗?
这个只涉及到封包。。。。 很简单的 想做 一个 好友上线提醒的功能 有没有API谢楼主 Dumeng 发表于 2020-7-31 13:20
想做 一个 好友上线提醒的功能 有没有API谢楼主
我没找到类似的,目前LCU的好友状态更新也是各种问题,感觉做不出来 本帖最后由 Dumeng 于 2020-8-1 20:02 编辑
BakaFT 发表于 2020-8-1 14:50
我没找到类似的,目前LCU的好友状态更新也是各种问题,感觉做不出来
我在掌盟 发现有 好友在线状态 但是实在不会再安卓里抓https
----2020年8月1日20:02:03
解决了,,pc wegame fd抓包 Perry 发表于 2020-7-11 08:01
这个只涉及到封包。。。。 很简单的
能有偿做一下吗?
页:
[1]
2