pubg/update/update_clan_members.ps1
2023-09-30 10:07:39 +02:00

128 lines
No EOL
4.1 KiB
PowerShell

. .\..\includes\ps1\lockfile.ps1
new-lock
if ($PSScriptRoot.length -eq 0) {
$scriptroot = Get-Location
}
else {
$scriptroot = $PSScriptRoot
}
# Read the content of the file as a single string
$fileContent = Get-Content -Path "$scriptroot/../config/config.php" -Raw
# Use regex to match the apiKey value
if ($fileContent -match "\`$apiKey\s*=\s*\'([^\']+)\'") {
$apiKey = $matches[1]
}
else {
Write-Output "API Key not found"
}
if ($fileContent -match "\`$clanmembers\s*=\s*array\(([^)]+)\)") {
# Remove quotes and split by comma to get individual members
$clanMembers = ($matches[1] -replace '"|\'', '' -split ","').replace(" ", "")
$clanMembersArray = $clanMembers.split(",").trim()
Write-Output "Clan Members: $($clanMembersArray -join ', ')"
}
else {
Write-Output "Clan members not found"
}
if ($clanMembersArray.count -ge 10 ) {
write-output "Currently not able to process more then 10 players"
exit
}
$headers = @{
'accept' = 'application/vnd.api+json'
'Authorization' = "$apiKey"
}
try {
$playerinfo = Invoke-RestMethod -Uri "https://api.pubg.com/shards/steam/players?filter[playerNames]=$clanMembers" -Method GET -Headers $headers
} catch {
write-output 'Sleeping for 61 seconds'
start-sleep -Seconds 61
$playerinfo = Invoke-RestMethod -Uri "https://api.pubg.com/shards/steam/players?filter[playerNames]=$clanMembers" -Method GET -Headers $headers
}
$playerinfo.data | convertto-json -depth 100 | Out-File "$scriptroot/../data/player_data.json"
$playerList = @()
$playerinfo.data | ForEach-Object {
$playerObject = [PSCustomObject]@{
PlayerName = $_.attributes.name
PlayerID = $_.id
}
$playerList += $playerObject
}
# Display the list
$playerList
$playeridstring = ""
foreach ($playerid in $playerinfo.data.id) {
$playeridstring += "$playerid,"
}
$playeridstring = $playeridstring.Substring(0, $playeridstring.Length - 1)
$playermodes = @(
"solo",
"duo",
"squad",
"solo-fpp",
"duo-fpp",
"squad-fpp"
)
# Initialize the master hashtable
$lifetimestats = @{}
foreach ($playmode in $playermodes) {
# Fetch stats for the current playmode
write-output "Getting data for players $playeridstring gameode $playmode"
try{
$stats = Invoke-RestMethod -Uri "https://api.pubg.com/shards/steam/seasons/lifetime/gameMode/$playmode/players?filter[playerIds]=$playeridstring" -Method GET -Headers $headers
} catch {
write-output 'sleeping for 61 seconds'
start-sleep -Seconds 61
$stats = Invoke-RestMethod -Uri "https://api.pubg.com/shards/steam/seasons/lifetime/gameMode/$playmode/players?filter[playerIds]=$playeridstring" -Method GET -Headers $headers
}
# Check if the playmode doesn't exist in the hashtable, then add it
if (-not $lifetimestats.ContainsKey($playmode)) {
$lifetimestats[$playmode] = @{}
}
foreach ($stat in $stats.data.relationships.player.data.id) {
# Fetch the player name for the current stat (account ID) from the dictionary
$playerName = $playerList | Where-Object { $_.PlayerID -eq $stat } | Select-Object -ExpandProperty PlayerName
write-output "Getting data for $playerName with gamemode $playmode"
# Fetch the specific stat data for the current stat
$specificStat = ($stats.data | where-object { $_.relationships.player.data.id -eq $stat }).attributes.gamemodestats.$playmode
# Create a new hashtable entry for the player and insert the specific stat data
if (-not $lifetimestats[$playmode].ContainsKey($playerName)) {
$lifetimestats[$playmode][$playerName] = @{}
}
$lifetimestats[$playmode][$playerName][$stat] = $specificStat
}
}
# Get current date and time
$currentDateTime = Get-Date
# Get current timezone
$currentTimezone = (Get-TimeZone).Id
# Format and parse the information into a string
$formattedString = "$currentDateTime - Time Zone: $currentTimezone"
$lifetimestats['updated'] = $formattedString
# Output the formatted string
$lifetimestats | convertto-json -Depth 100 | out-file "$scriptroot/../data/player_lifetime_data.json"
remove-lock