Upload files to "/"

Initial commit.
main
cnicholas 2024-11-04 17:11:02 +00:00
parent 0336604457
commit 7f23c3d98a
3 changed files with 246 additions and 0 deletions

29
pisignage.ps1 Normal file
View File

@ -0,0 +1,29 @@
# Define PiSignage API endpoint and credentials
$piSignageAPIUrl = "https://cybertek.pisignage.com/api/session"
$email = "cole@cybertek.systems"
$password = "(OB4,k6@[{8}t#?M0}FD"
# Convert payload to JSON format
$payload = @{
email = $email
password = $password
getToken = "True"
} | ConvertTo-Json
# Set content type to JSON
$headers = @{
'Content-Type' = 'application/json'
}
# Send the POST request to retrieve the token
$response = Invoke-RestMethod -Uri $piSignageAPIUrl -Method Post -Headers $headers -Body $payload
# Extract the token from the response
$apiToken = $response.token
# Add token to headers for future requests
$headers['x-access-token'] = $apiToken
# Display token for verification
Write-Output "API Token: $apiToken"
Write-Output "Headers with token: $headers"

View File

@ -0,0 +1,187 @@
# PiSignage API Credentials and Endpoint
$piSignageAPIUrl = "https://cybertek.pisignage.com/api/session"
$email = "cole@cybertek.systems"
$password = "(OB4,k6@[{8}t#?M0}FD"
$youtubeApiKey = "AIzaSyAw6-9hHTAVh_2HI_iqIy2HOBh6gXcFbXs" # Replace with your actual YouTube API key
# Define Player Groups
$playerGroups = @("Gregory", "Colome", "Winner")
# Define YouTube Channels
$channels = @(
@{name="WION"; youtube_channel_id="UC_gUM8rL-Lrg6O3adPW9K1g"},
@{name="Celebrate"; youtube_channel_id="UCT7rpbRfATyFzrRLhRFMgLA"},
@{name="Winner"; youtube_channel_id="UCi_NFDGibun9FAi9AxaFYOg"},
@{name="Gregory"; youtube_channel_id="UCtVXpTODGQpXmUhuYyojChQ"},
@{name="Colome"; youtube_channel_id="UCWCjf47gUD7eyCesddHWdCA"},
@{name="Burke"; youtube_channel_id="UC7d8OoqxxSOKnW_HYzcaRhQ"}
)
# Function to Authenticate and Retrieve API Token
function Get-ApiToken {
$payload = @{
email = $email
password = $password
getToken = "True"
} | ConvertTo-Json
$headers = @{
'Content-Type' = 'application/json'
}
try {
$response = Invoke-RestMethod -Uri $piSignageAPIUrl -Method Post -Headers $headers -Body $payload
return $response.token
} catch {
Write-Output "Error obtaining API token: $_"
return $null
}
}
# Function to Check YouTube Channel for Live Broadcast
function Check-YoutubeChannel {
param (
[string]$channelId,
[string]$apiKey
)
$endpoint = "https://www.googleapis.com/youtube/v3/search"
$params = @{
part = "id"
type = "video"
eventType = "live"
maxResults = 1
channelId = $channelId
key = $apiKey
}
try {
$response = Invoke-RestMethod -Uri "$endpoint?$(($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$($_.Value)" }) -join "&")" -Method Get
return $response
} catch {
Write-Output "Error checking YouTube channel: $_"
return $null
}
}
# Function to Create a New Livestream Asset on PiSignage
function New-LivestreamAsset {
param (
[string]$liveBroadcastUrl,
[string]$apiToken
)
$assetData = @{
name = "YouTube Livestream"
filename = $liveBroadcastUrl
assetType = "video"
}
$headers = @{
'x-access-token' = $apiToken
'Content-Type' = 'application/json'
}
try {
$response = Invoke-RestMethod -Uri "https://cybertek.pisignage.com/api/assets" -Method Post -Headers $headers -Body ($assetData | ConvertTo-Json)
return $response._id
} catch {
Write-Output "Error creating livestream asset: $_"
return $null
}
}
# Function to Schedule the Livestream on Specified Groups
function Schedule-Livestream {
param (
[string]$assetId,
[string]$apiToken
)
$headers = @{
'x-access-token' = $apiToken
'Content-Type' = 'application/json'
}
foreach ($group in $playerGroups) {
$scheduleData = @{
playlist = @($assetId)
playerGroup = $group
}
try {
Invoke-RestMethod -Uri "https://cybertek.pisignage.com/api/groups/$group/schedule" -Method Post -Headers $headers -Body ($scheduleData | ConvertTo-Json)
Write-Output "Livestream scheduled for group: $group"
} catch {
Write-Output ("Error scheduling livestream for group: " + $group)
Write-Output ("Error details: " + $_.Exception.Message)
}
}
}
# Function to Remove Livestream Asset and Revert to Default Playlist
function Cleanup-Livestream {
param (
[string]$assetId,
[string]$apiToken
)
$headers = @{
'x-access-token' = $apiToken
'Content-Type' = 'application/json'
}
try {
Invoke-RestMethod -Uri "https://cybertek.pisignage.com/api/assets/$assetId" -Method Delete -Headers $headers
Write-Output "Livestream asset removed."
} catch {
Write-Output "Error deleting livestream asset: $_"
}
foreach ($group in $playerGroups) {
try {
Invoke-RestMethod -Uri "https://cybertek.pisignage.com/api/groups/$group/revert" -Method Post -Headers $headers
Write-Output "Reverted to default playlist for group: $group"
} catch {
Write-Output "Error reverting group $group to default playlist: $_"
}
}
}
# Main Code - Check Each Channel and Schedule Livestream if Found
$apiToken = Get-ApiToken
if (-not $apiToken) {
Write-Output "Unable to proceed without API token."
exit
}
foreach ($channel in $channels) {
$channelId = $channel.youtube_channel_id
$response = Check-YoutubeChannel -channelId $channelId -apiKey $youtubeApiKey
if ($response -and $response.items.Count -gt 0) {
$videoId = $response.items[0].id.videoId
$liveBroadcastUrl = "https://www.youtube.com/watch?v=$videoId"
# Schedule on PiSignage if not already scheduled
$assetId = New-LivestreamAsset -liveBroadcastUrl $liveBroadcastUrl -apiToken $apiToken
if ($assetId) {
Schedule-Livestream -assetId $assetId -apiToken $apiToken
# Periodic check for livestream end
while ($true) {
Start-Sleep -Seconds 60
$response = Check-YoutubeChannel -channelId $channelId -apiKey $youtubeApiKey
if ($response.items.Count -eq 0) {
Cleanup-Livestream -assetId $assetId -apiToken $apiToken
Write-Output "Livestream ended for channel $($channel.name). Cleaned up."
break
}
}
} else {
Write-Output "Failed to create livestream asset for channel $($channel.name)."
}
} else {
Write-Output "No live broadcast currently playing for channel $($channel.name)."
}
}

30
youtubetest.ps1 Normal file
View File

@ -0,0 +1,30 @@
# Define your YouTube API key and a test channel ID
$youtubeApiKey = "AIzaSyAw6-9hHTAVh_2HI_iqIy2HOBh6gXcFbXs" # Replace with the actual API key
$channelId = "UC_gUM8rL-Lrg6O3adPW9K1g" # Example channel ID for testing
# Define the endpoint and parameters
$endpoint = "https://www.googleapis.com/youtube/v3/search"
$params = @{
part = "snippet"
channelId = $channelId
type = "video"
eventType = "live"
maxResults = 1
key = $youtubeApiKey
}
# Construct the query string manually and prepend the endpoint
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$($_.Value)" }) -join "&"
$fullUrl = "${endpoint}?${queryString}"
# Output the full URL for debugging
Write-Output "Full URL: $fullUrl"
try {
# Send the request
$response = Invoke-RestMethod -Uri $fullUrl -Method Get
Write-Output "YouTube API Response Items:"
Write-Output $response.items | Format-List
} catch {
Write-Output "YouTube API Error: " + $_.Exception.Message
}