public/Get-FootballFixtureLineup.ps1
function Get-FootballFixtureLineup { <# .EXAMPLE Get-FootballFixtureLineup -Header $HeaderObject -Token $Token -StartDate 2025-08-03 -Path C:\sportsmonk #> [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [Object]$Header, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$Path, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$Token, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$StartDate ) process{ $ErrorActionPreference = 'Stop' try { New-Directory -Path "$Path\temp\lineups" New-Directory -Path "$Path\temp\lineups-data" Remove-Item -Path "$Path\temp\lineups\*" -Recurse -Force -Confirm:$false $FilesToProcess = Get-ChildItem -Path "$Path\sportsmonk-predictions" -Recurse -Filter '*.csv' -File | Where-Object {$_.FullName -like '*231*'} | Where-Object {$_.FullName -like "*$StartDate*"} foreach ($FileToProcess in $FilesToProcess) { $FootballFixtures = Import-Csv -Path $($FileToProcess.FullName) -ErrorAction Stop $FixtureName = $($FixtureData.name).Replace(' ','-').ToLower() foreach ($FootballFixture in $FootballFixtures) { $FixtureName = $($FootballFixture.FixtureName).Replace(' ','-').ToLower() $FileExists = Test-Path -Path "$Path\temp\lineups-data\$StartDate-$FixtureName.csv" if ($FileExists) { $FixtureLineupData = Import-Csv -Path "$Path\temp\lineups-data\$StartDate-$FixtureName.csv" -ErrorAction Stop if ($($FixtureLineupData.Count) -ge 1) { Write-Warning -Message "$FixtureName lineup data exists" continue } # if } # if $FixtureId = $($FootballFixture.FixtureId) $Uri = "https://api.sportmonks.com/v3/football/fixtures/$($FixtureId)?api_token=$Token&include=scores;formations;metadata;lineups.detailedposition&filters=lineupTypes:11" $Response = Invoke-RestMethod $Uri -Method 'GET' -Headers $Header $FixtureData = $($Response.data) $FixtureLinups = $($FixtureData.lineups) $FixtureFormations = $($FixtureData.formations) $HomeFormation = $FixtureFormations | Where-Object {$_.location -eq 'home'} $AwayFormation = $FixtureFormations | Where-Object {$_.location -eq 'away'} $HomeLineup = $FixtureLinups | Where-Object {$_.team_id -eq $($HomeFormation.participant_id)} $AwayLineup = $FixtureLinups | Where-Object {$_.team_id -eq $($AwayFormation.participant_id)} $Lineups =@($HomeLineup,$AwayLineup) $PSObjects =@() foreach ($Lineup in $Lineups) { foreach ($Position in $Lineup) { $DetailedPosition = $($Position.detailedposition) $PSObject = [PSCustomObject]@{ fixture_name = $($FixtureData.name) starting_at = $($FixtureData.starting_at) team_id = $($Lineup.team_id)[0] formation_field = $($Position.formation_field) formation_position = $($Position.formation_position) player_name = $($Position.player_name) jersey_number = $($Position.jersey_number) position = $($DetailedPosition.name) } $PSObjects += $PSObject } # foreach } # foreach $FixtureName = $($FixtureData.name).Replace(' ','-').ToLower() $HomeTeamFormation = $($HomeFormation.formation) $AwayTeamFormation = $($AwayFormation.formation) if ($HomeTeamFormation -eq '' -or $AwayTeamFormation -eq '') { Write-Warning -Message "Formation missing $FixtureName" continue } # if $PSObjects | Export-Csv -Path "$Path\temp\lineups-data\$StartDate-$FixtureName.csv" -ErrorAction Stop $Params =@{ DataFile = "$Path\temp\lineups-data\$StartDate-$FixtureName.csv" TemplateFile = "$Path\git-hub\sportsmonk-api\templates\social_media_lineup_1.txt" OutputFile = "$Path\temp\lineups\$StartDate-$FixtureName-lineups.txt" } Set-Location -Path "$Path\git-hub\sportsmonk-api\scripts" -ErrorAction Stop .\populate-team-lineups.ps1 @Params -HomeFormation $HomeTeamFormation -AwayFormation $AwayTeamFormation } # foreach } # foreach } catch { "$($MyInvocation.MyCommand.Name): $_.Exception.Message" } # try catch } # process } # function |