Cách dùng API của League of Legends
Bài viết này chia sẻ về cách sử dụng một số public API của tựa game Liên minh huyền thoại để phục vụ cho các dự án về dữ liệu cũng như những người có đam mê với bộ môn này.
Dạo này đang rảnh rỗi và muốn cải thiện kĩ năng của bản thân nên tôi có tự tìm tòi một số công nghệ mới. Tôi cũng không muốn chỉ học lí thuyết nên cũng có ý tưởng làm vài dự án machine learning cá nhân để áp dụng những công nghệ này. Trong quá trình lên ý tưởng thì tôi có để ý thấy tựa game tôi hay chơi là LOL có nguồn data lớn, cộng đồng lâu đời và cũng đã có nhiều ứng dụng phân tích dữ liệu game như OP.GG U.GG hay meta.tft. Nên tôi thử tìm hiểu một số phương pháp lấy dữ liệu của tựa game này thông qua API để mang ra phân tích, train model. Bài viết này sẽ mô tả chi tiết hơn từng phương pháp.
1. Nguồn API chính thức được cung cấp bởi Riot
Riot có cung cấp một trang web dành cho developer cung cấp các open API để các developer có thể phát triển các dự án của cá nhân tại đường link:
https://developer.riotgames.com/
Tại đây thì ngoài tựa game LOL ra, các game khác được riot phát hành như Valorant, TFT, LOR.
Ở đây cũng có kha khá các API cần thiết cho người dùng như tìm tên, tìm id, tìm thông tin trận đấu, tra lịch sử trận đấu. Những API này được viết khá chi tiết ở trang dev doc của Riot nên tôi sẽ không nói thêm ở đây.
Tuy là chính thức nhưng các API được công bố của Riot khá nghèo nàn về tài nguyên cũng như lượng dữ liệu, các thao tác mà người dùng có thể tương tác với game.
2. Các API không chính thức
Ngoài các API chính thức được Riot public thì còn nhiều API khác phục vụ cho việc thu thập dữ liệu trong trận đấu không được Riot công bố cụ thể nhưng được cộng đồng quan tâm và đóng góp rất nhiều. Bao gồm:
LCU’s API
Riot’s API
Về cụ thể các tính năng chi tiết bạn đọc có thể tham khảo ở link sau: https://github.com/KebsCS/lcu-and-riotclient-api
Lý do các API này được nhiều người dùng quan tâm hơn vì nó cung cấp nhiều dữ liệu cũng như nhiều thao tác với game hơn so với các API được công bố chính thức. Điều này khiến cho các API này cũng là nguồn dữ liệu lớn hơn với các dự án cá nhân. Về công dụng từng API thì trong bài viết này sẽ không đề cập thêm vì trong docs có khá đầy đủ và chi tiết.
Các bạn có thể tải app tại:
https://github.com/BlossomiShymae/Needlework.Net?tab=readme-ov-file
Trước khi dùng các bạn chỉ cần khởi động client LOL trước, app sẽ tự config các thông số khác và bạn chỉ cần cấu hình các parameter cho từng request là được.
Trong trường hợp các bạn muốn tìm hiểu sâu hơn:
2.1. URI và PORT
URI mặc định của LCU’s API và Riot’s API là 127.0.0.1. Đối với các API chính thức do Riot công bố thì port sẽ mặc định ở :2999. Ngoài ra các API của LCU và Riot’s Client sẽ được thay đổi với mỗi lần khởi động ứng dụng.
Có 2 cách để lấy các cổng port này
Cách 1: Các bạn có thể vào thư mục cài đặt game của LOL, thường thì nằm ở “C:\Riot Games\League of Legends”. File lockfile sẽ chứa trường thông tin theo dạng
Process Name : Process ID : Port : Password : Protocol
Cách 2: Mở cmd và sử dụng lệnh wmic PROCESS WHERE name='LeagueClientUx.exe' GET commandline. Sẽ có 2 port, 1 port của LCU và 1 port của Riot’s client. Tuỳ ứng dụng mà bạn chọn port theo cách dùng.
2.2 Xác thực
Trong headers của API sử dụng Auth Basics, username là riot và password nằm ở cờ “--remoting-auth-token” sau khi chạy lệnh wmic PROCESS WHERE name='LeagueClientUx.exe' GET commandline
2.3. Parameter từng request
Doc sẽ không ghi chi tiết parameter được cấu hình thế nào, nhưng ta có thể sử dụng proxy để xem request được thực hiện bởi league client thế nào và replicate lại.
Ở đây tôi dùng proxy Fiddler Classic. Mặc định sẽ không thể dùng proxy, vì khi bạn chạy lệnh lấy port ở trên, bạn có thể thấy có một cờ là “—no-proxy-server”. Để loại bỏ cờ này các bạn sẽ cần cài đặt
https://github.com/dragitz/simple-debugger
Sau khi cài đặt, các bạn có thể xem các request được thực hiện bởi league client thông qua Fiddler.