public function execute()
 {
     $this->verbose = $this->hasOption("verbose");
     $this->dryRun = $this->hasOption("dryRun");
     $this->limit = $this->getOption("limit", self::BATCH_SIZE);
     $titles = $this->getScreenplayTitles();
     $ooyalaAsset = new OoyalaAsset();
     if ($this->dryRun) {
         echo "Dry run...\n";
     }
     foreach ($titles as $title) {
         $videoFile = WikiaFileHelper::getVideoFileFromTitle($title);
         if (empty($videoFile)) {
             $this->log("Skipping video '{$title}' -- couldn't find video file");
             $this->skippedVideos++;
             continue;
         }
         $ooyalaData = $this->prepForOoyala($videoFile);
         if ($this->dryRun) {
             echo "Ready to migrate video " . $videoFile->getName() . " to Ooyala with the following data:\n";
             print_r($ooyalaData);
             $success = true;
             $videoId = "TestID";
         } else {
             // $videoId gets set in addRemoteAsset()
             $success = $ooyalaAsset->addRemoteAsset($ooyalaData, $videoId);
         }
         if (!$success) {
             $this->log("Error uploading video {$ooyalaData['assetTitle']} onto Ooyala. Skipping update locally");
             $this->skippedVideos++;
             continue;
         }
         $localData = $this->prepForLocal($videoFile, $ooyalaData, $videoId);
         if ($this->dryRun) {
             echo "Ready to update video " . $videoFile->getName() . " locally with the following new metadata\n";
             print_r(unserialize($localData));
         } else {
             $this->updateVideoLocally($videoFile, $localData, $videoId);
         }
         $this->migratedVideos++;
     }
     $this->printSummary();
 }
            echo " ... SKIPPED ('name' field found in metadata. metadata already mapped).\n";
            $skipped++;
            continue;
        }
        // backup data to csv file
        if (!empty($backupFile)) {
            backupFile($backupFile, $msg, $video);
        }
        // get provider
        $label = OoyalaApiWrapper::getProviderName($video['labels']);
        $label = empty($label) ? "No provider name" : OoyalaApiWrapper::formatProviderName($label);
        echo " ({$label})";
        $newMeta = mapMetadata($ingester, $video['metadata']);
        if (!array_key_exists('name', $newMeta)) {
            $newMeta['name'] = '';
        }
        echo " ... DONE \n\tNEW Metadata:\n";
        compareMetadata($video['metadata'], $newMeta);
        if (!$dryRun) {
            $resp = OoyalaAsset::updateMetadata($video['embed_code'], $newMeta);
            if (!$resp) {
                $failed++;
            }
        }
        if ($compareWithFile) {
            compareMetadataFile($video, $msg, $newMeta);
        }
    }
    $page++;
} while (!empty($nextPage) && $total < $limit);
echo "\nTotal videos: " . $total . ", Success: " . ($total - $failed - $skipped) . ", Failed: {$failed}, Skipped: {$skipped}\n\n";
Example #3
0
$dryRun = isset($options['dry-run']);
$provider = isset($options['provider']) ? $options['provider'] : '';
$keyword = isset($options['keyword']) ? $options['keyword'] : '';
if (empty($provider)) {
    die("ERROR: Invalid provider.\n");
}
if (empty($keyword)) {
    die("ERROR: Invalid keyword.\n");
}
$apiPageSize = 100;
$nextPage = '';
$page = 1;
$total = 0;
$failed = 0;
$skipped = 0;
$ooyala = new OoyalaAsset();
do {
    // connect to provider API
    $url = getApiAssets($apiPageSize, $nextPage, $provider, $keyword);
    echo "\nConnecting to {$url}...\n";
    $req = MWHttpRequest::factory($url);
    $status = $req->execute();
    if ($status->isGood()) {
        $response = $req->getContent();
    } else {
        die("ERROR: problem downloading content (" . $status->getMessage() . ").\n");
    }
    // parse response
    $response = json_decode($response, true);
    $videos = empty($response['items']) ? array() : $response['items'];
    $nextPage = empty($response['next_page']) ? '' : $response['next_page'];
/**
 * Remove thumbnail field from Custom Metadata
 * @global integer $skipped
 * @global integer $failed
 * @global boolean $dryRun
 * @global string $msg
 * @param array $video
 * @return boolean
 */
function removeThumbnailFromMetadata($video)
{
    global $failed, $dryRun, $msg;
    if (!$dryRun) {
        $metadata = array('thumbnail' => null);
        $resp = OoyalaAsset::updateMetadata($video['embed_code'], $metadata);
        if (!$resp) {
            $failed++;
            echo "{$msg}...FAILED (Error: Cannot remove thumbnail field from Custom Metadata).\n";
            return false;
        }
    }
    return true;
}
function updateRemoteAssetUrls($ingester, $video)
{
    global $dryRun, $skipped, $failed;
    if (empty($video['metadata']['source']) || $video['metadata']['source'] != $ingester->getProvider()) {
        echo "\tSKIP: {$video['name']} (Id: {$video['embed_code']}) - Invalid source value (Provider: {$ingester->getProvider()}, Source: {$video['metadata']['source']}).\n";
        $skipped++;
        return;
    }
    if (empty($video['metadata']['sourceid'])) {
        echo "\tSKIP: {$video['name']} (Id: {$video['embed_code']}) - Empty source id.\n";
        $skipped++;
        return;
    }
    if (!empty($video['metadata']['updateAssetUrls'])) {
        echo "\tSKIP: {$video['name']} (Id: {$video['embed_code']}) - Already updated.\n";
        $skipped++;
        return;
    }
    $urls = $ingester->getRemoteAssetUrls($video['metadata']['sourceid']);
    // for debugging
    //echo "\n\tNEW URLs (".$video['embed_code']."):\n";
    //foreach ( $video['stream_urls'] as $key => &$value ) {
    //	if ( is_null( $value ) ) {
    //		unset( $video['stream_urls'][$key] );
    //	}
    //}
    //compareMetadata( $video['stream_urls'], $urls );
    //echo "\n";
    $resp = true;
    if (!$dryRun) {
        $resp = OoyalaAsset::updateRemoteAssetUrls($video['embed_code'], $urls);
        if ($resp) {
            $metadata = ['updateAssetUrls' => 1];
            $resp = OoyalaAsset::updateMetadata($video['embed_code'], $metadata);
            if (!$resp) {
                "ERROR: {$video['name']} (Id: {$video['embed_code']}) - Cannot set updateAssetUrls to 1 in metadata.\n";
            }
        } else {
            $failed++;
        }
    }
    if ($resp) {
        echo "\tUPDATED: {$video['name']} (Id: {$video['embed_code']}) ... DONE.\n";
    }
}
 /**
  * import videos
  * @param array $params
  * @return integer $articlesCreated
  */
 public function importVideos($params = [])
 {
     wfProfileIn(__METHOD__);
     $articlesCreated = 0;
     $nextPage = '';
     do {
         // connect to provider API
         $url = OoyalaAsset::getApiUrlAssets(self::API_PAGE_SIZE, $nextPage, $params['cond']);
         print "Connecting to {$url}...\n";
         $response = OoyalaAsset::getApiContent($url);
         if ($response === false) {
             $this->logger->videoErrors("ERROR: problem downloading content.\n");
             wfProfileOut(__METHOD__);
             return 0;
         }
         $videos = empty($response['items']) ? [] : $response['items'];
         $nextPage = empty($response['next_page']) ? '' : $response['next_page'];
         $this->logger->videoFound(count($videos));
         foreach ($videos as $video) {
             if (!empty($video['time_restrictions']['start_date']) && strtotime($video['time_restrictions']['start_date']) > $params['now']) {
                 $this->logger->videoSkipped("Skipping {$video['name']} (Id:{$video['embed_code']}). Time restriction.\n");
                 continue;
             }
             $clipData = [];
             $clipData['titleName'] = trim($video['name']);
             $clipData['videoId'] = $video['embed_code'];
             $clipData['thumbnail'] = $video['preview_image_url'];
             $clipData['duration'] = $video['duration'] / 1000;
             $clipData['published'] = empty($video['metadata']['published']) ? '' : strtotime($video['metadata']['published']);
             $clipData['name'] = empty($video['metadata']['name']) ? '' : $video['metadata']['name'];
             $clipData['type'] = empty($video['metadata']['type']) ? '' : $video['metadata']['type'];
             $clipData['category'] = empty($video['metadata']['category']) ? '' : $this->getCategory($video['metadata']['category']);
             $clipData['keywords'] = empty($video['metadata']['keywords']) ? '' : $video['metadata']['keywords'];
             $clipData['description'] = trim($video['description']);
             $clipData['ageRequired'] = empty($video['metadata']['age_required']) ? 0 : $video['metadata']['age_required'];
             $clipData['ageGate'] = empty($clipData['ageRequired']) ? 0 : 1;
             $clipData['hd'] = empty($video['metadata']['hd']) ? 0 : 1;
             $clipData['industryRating'] = '';
             if (!empty($video['metadata']['industryrating'])) {
                 $clipData['industryRating'] = $this->getIndustryRating($video['metadata']['industryrating']);
             }
             $clipData['categoryName'] = OoyalaApiWrapper::getProviderName($video['labels']);
             // check for videos under '/Providers/' labels
             if (empty($clipData['categoryName'])) {
                 $this->logger->videoSkipped("Skipping {$clipData['titleName']} - {$clipData['description']}. No provider name.\n");
                 continue;
             }
             $clipData['provider'] = OoyalaApiWrapper::formatProviderName($clipData['categoryName']);
             $clipData['language'] = empty($video['metadata']['lang']) ? '' : $video['metadata']['lang'];
             $clipData['subtitle'] = empty($video['metadata']['subtitle']) ? '' : $video['metadata']['subtitle'];
             $clipData['genres'] = empty($video['metadata']['genres']) ? '' : $video['metadata']['genres'];
             $clipData['actors'] = empty($video['metadata']['actors']) ? '' : $video['metadata']['actors'];
             $clipData['startDate'] = empty($video['time_restrictions']['start_date']) ? '' : strtotime($video['time_restrictions']['start_date']);
             $clipData['expirationDate'] = empty($video['time_restrictions']['end_date']) ? '' : strtotime($video['time_restrictions']['end_date']);
             $clipData['regionalRestrictions'] = empty($video['metadata']['regional_restrictions']) ? '' : strtoupper($video['metadata']['regional_restrictions']);
             $clipData['targetCountry'] = empty($video['metadata']['targetcountry']) ? '' : $video['metadata']['targetcountry'];
             $clipData['source'] = empty($video['metadata']['source']) ? '' : $video['metadata']['source'];
             $clipData['sourceId'] = empty($video['metadata']['sourceid']) ? '' : $video['metadata']['sourceid'];
             $clipData['series'] = empty($video['metadata']['series']) ? '' : $video['metadata']['series'];
             $clipData['season'] = empty($video['metadata']['season']) ? '' : $video['metadata']['season'];
             $clipData['episode'] = empty($video['metadata']['episode']) ? '' : $video['metadata']['episode'];
             $clipData['characters'] = empty($video['metadata']['characters']) ? '' : $video['metadata']['characters'];
             $clipData['resolution'] = empty($video['metadata']['resolution']) ? '' : $video['metadata']['resolution'];
             $clipData['aspectRatio'] = empty($video['metadata']['aspectratio']) ? '' : $video['metadata']['aspectratio'];
             $clipData['distributor'] = empty($video['metadata']['distributor']) ? '' : $video['metadata']['distributor'];
             $clipData['pageCategories'] = empty($video['metadata']['pagecategories']) ? '' : $video['metadata']['pagecategories'];
             // Howdini has specific metadata which we want to map to our own
             if ($clipData['provider'] == "ooyala/howdini") {
                 $clipData["genres"] = $this->getHowdiniGenre($video['metadata']['category']);
                 $clipData["category"] = "Lifestyle";
                 $clipData["type"] = "How To";
                 $clipData["pageCategories"] = "Lifestyle, Howdini, How To";
                 // Genres need to be applied to categories VID-1787
                 if (!empty($clipData['genres'])) {
                     $clipData["pageCategories"] .= ', ' . $clipData['genres'];
                 }
                 $ooyalaAsset = new OoyalaAsset();
                 // Make sure all Howdini assets use the Howdini ad set
                 $ooyalaAsset->setAdSet($clipData["videoId"], F::app()->wg->OoyalaApiConfig['adSetHowdini']);
             }
             $articlesCreated += $this->createVideo($clipData);
         }
     } while (!empty($nextPage));
     wfProfileOut(__METHOD__);
     return $articlesCreated;
 }
 /**
  * Update remote asset (metadata only)
  * @return integer
  */
 protected function updateRemoteAsset()
 {
     if (empty($this->duplicateAsset['embed_code'])) {
         $this->logger->videoWarnings("Error when updating remote asset data: empty asset embed code.\n");
         return 0;
     }
     $this->prepareMetaDataForOoyala($generateUrl = false);
     $ooyalaAsset = new OoyalaAsset();
     $assetMeta = $ooyalaAsset->getAssetMetadata($this->metaData);
     // set reupload
     $assetMeta['reupload'] = 1;
     // remove unwanted data
     $emptyMetaKeys = array_diff(array_keys($this->duplicateAsset['metadata']), array_keys($assetMeta));
     foreach ($emptyMetaKeys as $key) {
         $assetMeta[$key] = null;
     }
     if ($this->debugMode()) {
         print "Ready to update remote asset\n";
         print "id:          {$this->metaData['videoId']}\n";
         print "name:        {$this->metaData['destinationTitle']}\n";
         print "embed code:  {$this->duplicateAsset['embed_code']}\n";
         print "asset name:  {$this->duplicateAsset['name']}\n";
         print "metadata:\n";
         foreach (explode("\n", var_export($assetMeta, TRUE)) as $line) {
             print ":: {$line}\n";
         }
     } else {
         $result = OoyalaAsset::updateMetadata($this->duplicateAsset['embed_code'], $assetMeta);
         if (!$result) {
             $this->logger->videoWarnings();
             return 0;
         }
     }
     $categories = empty($this->metaData['pageCategories']) ? [] : explode(", ", $this->metaData['pageCategories']);
     $msg = "Uploaded remote asset: {$this->metaData['destinationTitle']} (id: {$this->metaData['videoId']})\n";
     $this->logger->videoIngested($msg, $categories);
     return 1;
 }