BakaFT 发表于 2020-7-2 17:45

利用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()   
```

BakaFT 发表于 2020-7-2 20:11

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,自动选英雄,可以参考一下

Perry 发表于 2020-7-2 20:01

有没有自动选英雄的API自动确定的

bushiri 发表于 2020-7-6 23:33

楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗?

BakaFT 发表于 2020-7-9 10:06

bushiri 发表于 2020-7-6 23:33
楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗?

这个是国服自己的活动,和LCU本身无关。不做这个。

Perry 发表于 2020-7-11 08:01

bushiri 发表于 2020-7-6 23:33
楼主,那能不能自动领取菲欧娜新手礼包的?
方便联系QQ联系一下吗?

这个只涉及到封包。。。。 很简单的

Dumeng 发表于 2020-7-31 13:20

想做 一个 好友上线提醒的功能 有没有API谢楼主

BakaFT 发表于 2020-8-1 14:50

Dumeng 发表于 2020-7-31 13:20
想做 一个 好友上线提醒的功能 有没有API谢楼主

我没找到类似的,目前LCU的好友状态更新也是各种问题,感觉做不出来

Dumeng 发表于 2020-8-1 18:25

本帖最后由 Dumeng 于 2020-8-1 20:02 编辑

BakaFT 发表于 2020-8-1 14:50
我没找到类似的,目前LCU的好友状态更新也是各种问题,感觉做不出来
我在掌盟 发现有 好友在线状态 但是实在不会再安卓里抓https



----2020年8月1日20:02:03

解决了,,pc wegame    fd抓包

bushiri 发表于 2020-8-14 23:54

Perry 发表于 2020-7-11 08:01
这个只涉及到封包。。。。 很简单的

能有偿做一下吗?
页: [1] 2
查看完整版本: 利用LCUAPI查询LOL好友添加时长