Forum Discussion
sullvanindy
11 years agoVisitor
Ok, no answers so I gave up with the brightscript bit, couldn't figure out how to do the base64_encode part in brightscript. So I hosted my XML feeds on a linux host and created a PHP page that produces the category feed and runs a function that creates the signed AWS S3 expiring links based upon work by Tournas Dimitrios https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/. Only a few tweaks to the function to switch the organization of the URL and use & instead of &'s for the XML. The result turned out nicely, just fill in the variables with your specific info and Video files and point the categories feed to the php page.
Category1.php
Cheers!
Mark-
Category1.php
<?php
// Set header content type for XML for proper browser render
header('Content-Type: text/xml');
// ** EDIT VARIABLES BELOW **
// Set Variables
$genre = "Documentary";
$type = "Video";
$bucketName = "Your S3 Bucket" ;
$awsAccessKey = "Your AWS Access Key" ;
$awsSecretKey = "Your AWS Secret Key" ;
//Build Array of Video Items
$xmlContent = array (
array ( "title" => "Title 1",
"desc" => "Description 1",
"sdImg" => "http://Image1.url",
"vidFile" => "/path/videofile1.mp4"),
array ( "title" => "Title 2",
"desc" => "Description 2",
"sdImg" => "http://Image2.url",
"vidFile" => "/path/videofile3.mp4"),
array ( "title" => "Title 3",
"desc" => "Description 3",
"sdImg" => "http://Image3.url",
"vidFile" => "/path/videofile3.mp4")
);
// ** FINISHED EDITING VARIABLES**
// Echo initial part or XML document
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<feed>';
// Loop through the rest of the XML document filling in variables
$count = 1;
foreach ($xmlContent as $video) {
// Call function to produce expiring signed AWS S3 URL
$objectPath = $video[vidFile] ;
$s3URL = s3TempLink("$awsAccessKey" , "$awsSecretKey", "$bucketName", "$objectPath") ;
echo ' <item sdImg="'. $video[sdImg] .'" hdImg="'. $video[sdImg] .'">';
echo ' <title>'. $video[title] .'</title>';
echo ' <contentType>'. $type .'</contentType>';
echo ' <contentId>'. $count .'</contentId>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>SD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>HD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <synopsis>'. $video[desc] .'</synopsis>';
echo ' <genres>'. $genre .'</genres>';
echo ' </item>';
$count++;
}
// Echo last part of XML document
echo '</feed>';
// Function to create signed expiring AWS S3 link Original by Tournas Dimitrios
//Reference Link: https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/
function s3TempLink($awsAccessKey, $awsSecretKey, $bucketName , $objectPath , $expires = 5) {
// Calculating expiry time
$expires = time() + ($expires * 60) ;
$objectPath = ltrim($objectPath, '/') ;
$signature = "GET\n\n\n$expires\n".'/'.$bucketName.'/'.$objectPath ;
// Calculating HMAC-sha1
$hashedSignature = base64_encode(hash_hmac('sha1' ,$signature , $awsSecretKey , true )) ;
// Constructing the URL
$url = sprintf('http://s3.amazonaws.com/%s/%s', $bucketName , $objectPath);
// Constructing the query String
$queryString = http_build_query( array(
'AWSAccessKeyId' => $awsAccessKey ,
'Expires' => $expires ,
'Signature' => $hashedSignature
), '', '&');
// Apending query string to URL
return $url.'?'.$queryString ;
}
?>
Cheers!
Mark-