Skip to content
Snippets Groups Projects
Commit 5097fc1b authored by Tim Steiner's avatar Tim Steiner
Browse files

Add PodcastProducer libraries to UNL Library

parent f887deb3
No related branches found
No related tags found
No related merge requests found
<?php
class Unl_Service_PodcastProducer extends Zend_Service_Abstract
{
/**
* Base URI for the podcast producer server
*
* @var Zend_Uri_Http
*/
protected $_uri;
protected $_curl;
public function __construct($hostname, $port = 8170)
{
$this->_uri = Zend_Uri::factory('https');
$this->_uri->setHost($hostname);
$this->_uri->setPort($port);
$this->_curl = curl_init();
curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->_curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->_curl, CURLOPT_SSL_VERIFYHOST, false);
}
public function authenticate($username, $password)
{
curl_setopt($this->_curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($this->_curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
}
public function getWorkflows()
{
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/workflows');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
return Unl_Service_PodcastProducer_Workflow::fromXML($response);
}
public function getCameras()
{
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/cameras');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
return Unl_Service_PodcastProducer_Camera::fromXML($response);
}
public function getCameraPreview(Unl_Service_PodcastProducer_Camera $camera)
{
curl_setopt($this->_curl, CURLOPT_URL, $camera->getPreviewUrl());
$response = curl_exec($this->_curl);
return $response;
}
public function createForFile(Unl_Service_PodcastProducer_Workflow $workflow, $filePath)
{
$fileContents = file_get_contents($filePath);
$fileSize = strlen($fileContents);
$fileName = basename($filePath);
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/submissions/create_for_file');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, 'workflow_name='. urlencode($workflow->getName()) . '&submission_type=file');
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
//header('Content-type: text/xml');
echo $response;
$r = DOMDocument::loadXML($response);
$xPath = new DOMXPath($r);
$recordingUUID = $xPath->query('recording_uuid')->item(0)->textContent;
$uploadUri = $xPath->query('https_upload_url')->item(0)->textContent;
$UUID = $xPath->query('uuid')->item(0)->textContent;
curl_setopt($this->_curl, CURLOPT_URL, $uploadUri);
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array(
'File-name: ' . $fileName,
'Recording-UUID: ' . $recordingUUID
));
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $fileContents);
$response = curl_exec($this->_curl);
echo $response . "\n\n\n";
curl_setopt($this->_curl, CURLOPT_URL, $uploadUri);
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array(
'File-name: user_metadata.plist',
'Recording-UUID: ' . $recordingUUID
));
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, '');
$response = curl_exec($this->_curl);
echo $response . "\n\n\n";
$uri->setPath('/podcastproducer/submissions/complete');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array());
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS,
'submission_uuid=' . $UUID
. '&submitted_files=user_metadata.plist:0;' . $fileName . ':' . $fileSize
. '&primary_content_file=' . $fileName
. '&recording_uuid=' . $recordingUUID
);
$response = curl_exec($this->_curl);
echo $response;
}
public function startCamera(Unl_Service_PodcastProducer_Camera $camera, $delay = 3)
{
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/cameras/start');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array());
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, 'delay='. intval($delay) . '&camera_name=' . urlencode($camera->getName()));
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
}
public function pauseCamera(Unl_Service_PodcastProducer_Camera $camera)
{
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/cameras/pause');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array());
curl_setopt($this->_curl, CURLOPT_POST, true);
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, 'camera_name=' . urlencode($camera->getName()));
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
}
public function stopCamera(Unl_Service_PodcastProducer_Camera $camera, Unl_Service_PodcastProducer_Workflow $workflow, $metadata = array())
{
$uri = clone $this->_uri;
$uri->setPath('/podcastproducer/cameras/stop');
curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array());
curl_setopt($this->_curl, CURLOPT_POST, true);
$postData = 'workflow_name='. urlencode($workflow->getName())
. '&camera_name=' . urlencode($camera->getName());
foreach ($metadata as $key => $value) {
$postData .= '&' . urlencode($key) . '=' . urlencode($value);
}
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($this->_curl);
if ($response === false) {
echo curl_error($this->_curl);
}
}
}
\ No newline at end of file
<?php
class Unl_Service_PodcastProducer_Camera
{
protected $_name;
protected $_uuid;
protected $_previewUrl;
static public function fromXML($xml)
{
$dom = DOMDocument::loadXML($xml);
$xPath = new DOMXPath($dom);
if ($xPath->query('/podcast_producer_result/status')->item(0)->textContent != 'success') {
return;
}
$plist = Unl_Plist::plistToArray($xml);
$cameras = array();
foreach ($plist['cameras'] as $data) {
$camera = new self();
$camera->_name = $data['name'];
$camera->_uuid = $data['uuid'];
$camera->_previewUrl = $data['preview_url'];
$cameras[] = $camera;
}
return $cameras;
}
protected function __construct() {}
public function getName()
{
return $this->_name;
}
public function getUuid()
{
return $this->_uuid;
}
public function getPreviewUrl()
{
return $this->_previewUrl;
}
}
\ No newline at end of file
<?php
class Unl_Service_PodcastProducer_Workflow
{
protected $_name;
protected $_title;
protected $_description;
protected $_uuid;
protected $_userRequirements = array();
static public function fromXML($xml)
{
$dom = DOMDocument::loadXML($xml);
$xPath = new DOMXPath($dom);
if ($xPath->query('/podcast_producer_result/status')->item(0)->textContent != 'success') {
return;
}
$plist = Unl_Plist::plistToArray($xml);
$workflows = array();
foreach ($plist['workflows'] as $data) {
$workflow = new self();
$workflow->_name = $data['name'];
$workflow->_title = $data['title'];
$workflow->_description = $data['description'];
$workflow->_uuid = $data['uuid'];
$workflow->_userRequirements = $data['user_requirements'];
$workflows[] = $workflow;
}
return $workflows;
}
protected function __construct() {}
public function getName()
{
return $this->_name;
}
public function getTitle()
{
return $this->_title;
}
public function getDescription()
{
return $this->_description;
}
public function getUuid()
{
return $this->_uuid;
}
public function getUserRequirements()
{
return $this->_userRequirements;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment