ugly display, can update elo and riot id

main
Benjamin Kraft 4 months ago
parent fd50796b4e
commit 090985b931
  1. 70
      public/elotracker/RiotRequest.php
  2. 180
      public/elotracker/Tracker.php
  3. 18
      public/elotracker/index.php
  4. 6
      public/elotracker/update.php
  5. BIN
      public/favicon.ico
  6. 1
      public/util/dotenv.php

@ -0,0 +1,70 @@
<?php
class RiotRequest {
protected string $endpoint;
protected array $headers = array();
protected array $queries = array();
protected string $host = "https://euw1.api.riotgames.com";
public array $responseHeader = array();
public int $responseCode;
private bool $triedEUNE = false;
public function __construct($endpoint) {
$this->endpoint = $endpoint;
}
public function useRouting(): void {
$this->host = "https://europe.api.riotgames.com";
}
public function setHeaders($headers): void {
$this->headers = $headers;
}
public function setQueries($queries): void {
$this->queries = $queries;
}
protected function getHeaderString(): string {
$api_key = getenv("RIOT_API_KEY");
$header = "X-Riot-Token: $api_key\r\n";
foreach ($this->headers as $key => $value) {
$header .= "$key: $value\r\n";
}
return $header;
}
private function getFinalURL(): string {
$queryString = "?";
foreach ($this->queries as $key => $value) {
$queryString .= "$key=$value&";
}
$url = $this->host . "/" . $this->endpoint . $queryString;
return str_replace(" ", "", $url);
}
public function run() {
$opts = [
"http" => [
"method" => "GET",
"header" => $this->getHeaderString()
]
];
$context = stream_context_create($opts);
$url = $this->getFinalURL();
$result = @file_get_contents($url, false, $context);
$this->responseHeader = $http_response_header;
preg_match_all("/HTTP\/\d\.\d\s+(\d+)\s+/", $this->responseHeader[0], $matches);
$this->responseCode = intval($matches[1][0]);
if ($this->responseCode == 404 && !$this->triedEUNE) {
$this->host = "https://eun1.api.riotgames.com";
$this->triedEUNE = true;
return $this->run();
}
return json_decode($result);
}
}

@ -0,0 +1,180 @@
<?php
require_once "../util/mysql_connect.php";
require_once "RiotRequest.php";
class Tracker {
private MySQLConnection $conn;
/**
* @var Account[]
*/
public array $accounts;
/**
* @var Elo[][]
*/
public array $entries;
public function __construct() {
$this->conn = new MySQLConnection();
$this->readAccounts();
$this->readEntries();
}
private function readAccounts(): void {
$accounts = [];
$sql = $this->conn->query("SELECT * FROM `accounts`");
while ($row = $sql->fetch_assoc()) {
$account = new Account();
$account->puuid = $row["puuid"];
$account->gameName = $row["gameName"];
$account->tagLine = $row["tagLine"];
$accounts[$account->puuid] = $account;
}
$this->accounts = $accounts;
}
private function readEntries(): void {
$sql = $this->conn->query("
SELECT accounts.puuid AS puuid, date, tier, `rank`, points
FROM accounts LEFT JOIN elo_entries ON id = accountId
ORDER BY accounts.puuid, date
");
$result = [];
while ($row = $sql->fetch_assoc()) {
$puuid = $row["puuid"];
$date = $row["date"];
if (!isset($result[$puuid]))
$result[$puuid] = [];
if (!$date)
continue;
$elo = new Elo();
$elo->tier = $row["tier"];
$elo->rank = $row["rank"];
$elo->points = $row["points"];
$result[$puuid][$date] = $elo;
}
$this->entries = $result;
}
public function update(): void {
foreach ($this->accounts as $puuid => $account) {
$account->updateRiotID();
$account->addNewEloEntry($this->entries[$puuid]);
}
}
}
class Account {
public string $puuid;
public string $gameName;
public string $tagLine;
/**
* @param Elo[] $eloEntries
*/
public function addNewEloEntry(array &$eloEntries): void {
$summonerId = (new RiotRequest("lol/summoner/v4/summoners/by-puuid/$this->puuid"))->run()->id;
$fetchedLeagues = (new RiotRequest("lol/league/v4/entries/by-summoner/$summonerId"))->run();
$currentElo = end($eloEntries);
foreach ($fetchedLeagues as $fetchedElo) {
if ($fetchedElo->queueType === "RANKED_SOLO_5x5" && ($fetchedElo->wins + $fetchedElo->losses >= 5)) {
if (!$currentElo ||
$currentElo->tier !== $fetchedElo->tier ||
$currentElo->rank !== $fetchedElo->rank ||
$currentElo->points !== $fetchedElo->leaguePoints){
$currentElo = new Elo();
$currentElo->tier = $fetchedElo->tier;
$currentElo->rank = $fetchedElo->rank;
$currentElo->points = $fetchedElo->leaguePoints;
$date = (new DateTime("now"))->format("Y-m-d H:i:s");
$eloEntries[$date] = $currentElo;
$conn = new MySQLConnection();
$sqlAccountId = $conn->query("
SELECT id
FROM `accounts`
WHERE puuid = '$this->puuid'
")->fetch_assoc()["id"];
$conn->prepare("
INSERT INTO `elo_entries`
(accountId, date, tier, `rank`, points)
VALUES (?, ?, ?, ?, ?)
")->execute([
$sqlAccountId, $date, $currentElo->tier, $currentElo->rank, $currentElo->points
]);
}
}
}
}
public function updateRiotID(): void {
$request = new RiotRequest("riot/account/v1/accounts/by-puuid/$this->puuid");
$request->useRouting();
$result = $request->run();
if ($request->responseCode == 200) {
$this->gameName = $result->gameName;
$this->tagLine = $result->tagLine;
$conn = new MySQLConnection();
$conn->query("
UPDATE `accounts`
SET `gameName` = '$this->gameName', `tagLine` = '$this->tagLine'
WHERE `puuid` = '$this->puuid'
");
}
}
}
class Elo {
public string $tier;
public string $rank;
public int $points;
public function value() : int {
$tiers = [
"CHALLENGER" => 2800,
"GRANDMASTER" => 2800,
"MASTER" => 2800,
"DIAMOND" => 2400,
"EMERALD" => 2000,
"PLATINUM" => 1600,
"GOLD" => 1200,
"SILVER" => 800,
"BRONZE" => 400,
"IRON" => 0,
];
$ranks = [
"I" => 300,
"II" => 200,
"III" => 100,
"IV" => 0,
];
$tier = $this->tier;
if ($tier === "MASTER" || $tier === "GRANDMASTER" || $tier === "CHALLENGER")
return $tiers[$tier] + $this->points;
return $tiers[$tier] + $ranks[$this->rank] + $this->points;
}
}

@ -7,8 +7,22 @@
</head>
<body>
<?php
require "../util/mysql_connect.php";
$conn = new MySQLConnection();
require_once "Tracker.php";
$tracker = new Tracker();
foreach ($tracker->accounts as $puuid => $account){
$entries = $tracker->entries[$puuid];
if (sizeof($entries) > 0){
echo "<h3>$account->gameName#$account->tagLine</h3>";
foreach ($entries as $date => $elo){
$eloValue = $elo->value();
echo "$date = $eloValue<br>";
}
}
}
?>
</body>

@ -0,0 +1,6 @@
<?php
require_once "Tracker.php";
$tracker = new Tracker();
$tracker->update();

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

@ -2,3 +2,4 @@
foreach (parse_ini_file($_SERVER['DOCUMENT_ROOT']."/../.env") as $key => $value)
putenv("$key=$value");
unset($key, $value);

Loading…
Cancel
Save