private static function sendRequest($params, $url = "rest") { $fullUrl = self::buildUrl($params, $url); $rsp = kFile::downloadUrlToString($fullUrl); $rsp_obj = unserialize($rsp); return $rsp_obj; }
private static function search($searchText, $page, $pageSize) { if (!$pageSize) { $pageSize = 100; } $pageSize = min($pageSize, 100); $startIndex = ($page - 1) * $pageSize; $url = self::$domain . "/api/videos/?vq=" . urlencode($searchText) . "&max-results=" . $pageSize . "&start-index=" . $startIndex . "&time=all_time"; $content = kFile::downloadUrlToString($url); return $content; }
public function execute() { $error = false; // youtube video id $itemId = $this->getRequestParameter("itemId"); $url = "http://www.youtube.com/watch?v=" . $itemId; $sourceUrl = ""; $retries = 2; while ($retries--) { $content = kFile::downloadUrlToString($url, 3); if (preg_match('/swfArgs.*?\\{.*?, "t":\\s*"(.*?)"/s', $content, $timestampMatch)) { $fmt_url = ""; //"fmt_map": "35/640000/9/0/115,18/512000/9/0/115,34/0/9/0/115,5/0/7/0/0" if (preg_match('/swfArgs.*?\\{.*?, "fmt_map":\\s*"(.*?)"/s', $content, $fmt_map)) { $fmt_map_array = explode(",", urldecode($fmt_map[1])); $fmt_details = explode("/", $fmt_map_array[0]); if ($fmt_details[0]) { $fmt_url = "&fmt=" . $fmt_details[0]; } } //var swfArgs = {hl:'en',video_id:'F924-D-g5t8',l:'24',t:'OEgsToPDskL9BIntclUB-PPzMEpVQKo8',sk:'xXvbHpmFGQKgv-b9__DkgwC'}; $tId = $timestampMatch[1]; $sourceUrl = "http://youtube.com/get_video?video_id=" . $itemId . "&t={$tId}{$fmt_url}"; } else { KalturaLog::log("youtubeRedirectAction {$retries} {$url} {$content}"); } } if ($sourceUrl) { if (!$retries) { KalturaLog::log("youtubeRedirectAction retry successful {$url}"); } } else { die; } // get only the headers and don't follow the location redirect $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sourceUrl); curl_setopt($ch, CURLOPT_USERAGENT, "curl/7.11.1"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $headers = curl_exec($ch); // get the location header $found1 = preg_match_all('/Location: (.*)/', $headers, $swfUrlResult); $swfUrl = str_replace('Location: ', '', $swfUrlResult[0][count($swfUrlResult[0]) - 1]); //echo $swfUrl; die(); $this->redirect($swfUrl); }
public static function sendRequest($url) { $images = array(); $message = ''; $xmlStr = kFile::downloadUrlToString($url); $doc = new DOMDocument(); $doc->loadXML($xmlStr); $xpath = new DOMXPath($doc); $sounds = $xpath->query("//item"); $objects = array(); //get only "by" //<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license> foreach ($sounds as $sound) { $objects[] = array('url' => self::getXmlNodeValue($sound, "enclosure", "url"), 'title' => self::getXmlNodeValue($sound, "title") . " by " . self::getXmlNodeValue($sound, "creator"), 'id' => self::getXmlNodeValue($sound, "guid"), 'thumb' => self::AUDIO_THUMB_URL); } $status = 'ok'; /* { $status = 'error'; $message = $rsp_obj['code'].' : '.$rsp_obj['message']; } */ return array('status' => $status, 'message' => $message, 'objects' => $objects, "needMediaInfo" => self::$NEED_MEDIA_INFO); }
private static function searchImages($searchText, $page, $pageSize) { if (!parse_url($searchText, PHP_URL_SCHEME)) { $searchText = "http://{$searchText}"; } $headers = kFile::downloadUrlToString($searchText, 2); $images = array(); $message = ""; if (preg_match("/Content-Type:\\s*image\\/(.*)\r/i", $headers, $matches)) { if ($matches[1] == "gif" || $matches[1] == "jpeg" || $matches[1] == "png" || $matches[1] == "bmp") { $title = self::getFilenameFromUrl($searchText); $images[] = array('thumb' => $searchText, 'title' => $title, 'url' => $searchText, 'id' => $searchText); } } else { if (preg_match("/Content-Type:\\s*text\\/html;?.*\r/i", $headers)) { $content = kFile::downloadUrlToString($searchText, 1); return self::parseImages($content, $searchText, $page, $pageSize); } } if (!count($images)) { $message = 'No Images found'; } $status = 'ok'; return array('status' => $status, 'message' => $message, 'objects' => $images, "needMediaInfo" => self::$NEED_MEDIA_INFO); }
public function execute() { $error = false; // metacafe video id $itemId = $this->getRequestParameter("itemId"); $url = "http://www.metacafe.com/api/item/" . $itemId; $content = kFile::downloadUrlToString($url); $doc = new DOMDocument(); if ($doc->loadXML($content)) { $xpath = new DOMXPath($doc); $itemNodes = $xpath->query("//item"); if (!$itemNodes->length) { $error = true; } else { $itemNode = $itemNodes->item(0); $ns = "http://search.yahoo.com/mrss/"; $swfUrl = self::getXmlNodeValue($itemNode, "content", "url", $ns); if (!$swfUrl) { die('no content url in item [' . $swfUrl . ']. cannot fetch headers for [' . $swfUrl . ']'); } // get only the headers and don't follow the location redirect $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $swfUrl); curl_setopt($ch, CURLOPT_USERAGENT, "curl/7.11.1"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); $headers = curl_exec($ch); // get the location header $found1 = preg_match('/Location: (.*?)$/ms', $headers, $swfUrlResult); $swfUrl = urldecode($swfUrlResult[1]); $found2 = preg_match('/mediaURL=(.*?)&/ms', $swfUrl, $flvResult); if (!$found2) { // sometimes the format in metacafe response is not the same and they return some kind of JSON $found2 = preg_match('/mediaURL\\"\\:\\"(.*?)\\"/ms', $swfUrl, $flvResult); // this is another match for MediaURL in metacafe response $found2_alt = preg_match('/mediaURL":"(.*?)"/ms', $swfUrl, $flvResult); if ($found2_alt && !$found2) { $found2 = $found2_alt; } if (!$found2) { die('could not process metacafe output: ' . print_r($swfUrl, true)); } } $flv = stripslashes(urldecode($flvResult[1])); $flv = urldecode($flv); $found3 = preg_match('/gdaKey=(.*?)&/ms', $swfUrl, $keyResult); // in another response of MetaCafe, the parameter is called key and not gdaKey if (!$found3) { $found3 = preg_match('/key":"(.*?)"/ms', $swfUrl, $keyResult); } $flv = $flv . "?__gda__=" . (isset($keyResult[1]) ? $keyResult[1] : ''); $flv = str_replace(' ', '%20', $flv); // replacing square brackets so curl will not break the redirect $flv = str_replace('[', '%5B', $flv); $flv = str_replace(']', '%5D', $flv); $this->redirect($flv); } } else { $error = true; } if ($error) { die("File not found"); } }
public function myBatchFlattenServer($script_name) { $this->script_name = $script_name; $this->register($script_name); SET_CONTEXT("FS"); $MAX_ITERATIONS_DUE_TO_PROPEL_MEMORY_LEAK = 10000000; self::initDb(); list($sleep_between_cycles, $number_of_times_to_skip_writing_sleeping) = self::getSleepParams('app_flatten_'); $last_worker_count = 0; $iteration = 0; $c = new Criteria(); $currentDc = kDataCenterMgr::getCurrentDc(); $c->add(BatchJobPeer::DC, kDataCenterMgr::getCurrentDcId()); $c->add(BatchJobPeer::JOB_TYPE, BatchJobType::FLATTEN); $c->add(BatchJobPeer::STATUS, BatchJob::BATCHJOB_STATUS_PROCESSED); $temp_count = 0; while (1) { self::exitIfDone(); try { sleep($sleep_between_cycles); $jobs = BatchJobPeer::doSelect($c); foreach ($jobs as $job) { $data = json_decode($job->getData(true), true); $entry_id = $data['entryId']; $entry_int_id = $data['entryIntId']; $entry_version = $data['entryVersion']; $file_format = $data['fileFormat']; $entry = entryPeer::retrieveByPK($entry_id); if (!$entry) { // entry is probably deleted if it is not returned from retrieveByPK // close job as failed $job->setStatus(BatchJob::BATCHJOB_STATUS_FAILED); $job->setDescription("could not retrieve entry, probably deleted"); TRACE("could not retrieve entry {$entry_id} , probably deleted"); $job->save(); continue; } $fileSyncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_DOWNLOAD, $file_format); $fullFinalPath = kFileSyncUtils::getLocalFilePathForKey($fileSyncKey); $finalPathNoExt = substr($fullFinalPath, 0, strlen($fullFinalPath) - strlen($file_format)); myContentStorage::fullMkdir($fullFinalPath); $wildcardFinalPath = $finalPathNoExt . "*"; $older_files = glob($wildcardFinalPath); foreach ($older_files as $older_file) { TRACE("removing old file: [{$older_file}]"); @unlink($older_file); } TRACE("Downloading: {$fullFinalPath}"); kFile::downloadUrlToFile($data["serverUrl"], $fullFinalPath); if (!file_exists($fullFinalPath)) { TRACE("file doesnt exist: " . $data["serverUrl"]); $job->setDescription("file doesnt exist: " . $data["serverUrl"]); $job->setStatus(BatchJob::BATCHJOB_STATUS_FAILED); } else { if (filesize($fullFinalPath) < 100000) { @unlink($fullFinalPath); TRACE("file too small: " . $data["serverUrl"]); $job->setDescription("file too small: " . $data["serverUrl"]); $job->setStatus(BatchJob::BATCHJOB_STATUS_FAILED); } else { if ($data['email']) { $downloadLink = $entry->getDownloadUrl() . '/format/' . $file_format; kJobsManager::addMailJob(null, $entry_id, $entry->getPartnerId(), self::KALTURAS_FLATTEN_READY, kMailJobData::MAIL_PRIORITY_NORMAL, kConf::get("batch_flatten_video_sender_email"), kConf::get("batch_flatten_video_sender_name"), $data['email'], array($data['email'], $downloadLink)); } TRACE("Deleting: " . $data["deleteUrl"]); kFile::downloadUrlToString($data["deleteUrl"]); myNotificationMgr::createNotification(kNotificationJobData::NOTIFICATION_TYPE_ENTRY_UPDATE, $entry); $job->setStatus(BatchJob::BATCHJOB_STATUS_FINISHED); $filePath = kFileSyncUtils::getLocalFilePathForKey($fileSyncKey); if (file_exists($filePath)) { try { kFileSyncUtils::createSyncFileForKey($fileSyncKey); } catch (Exception $ex) { TRACE("ignore ERROR: " . $ex->getMessage()); } } else { TRACE("The file [{$filePath}] doesn't exists, not creating FileSync"); } } } $job->save(); } } catch (Exception $ex) { TRACE("ERROR: " . $ex->getMessage()); self::initDb(true); self::failed(); } if ($temp_count == 0) { TRACE("Ended conversion. sleeping for a while (" . $sleep_between_cycles . " seconds). Will write to the log in (" . $sleep_between_cycles * $number_of_times_to_skip_writing_sleeping . ") seconds"); } $temp_count++; if ($temp_count >= $number_of_times_to_skip_writing_sleeping) { $temp_count = 0; } } }
private function getObjectInfo($objectId) { $url = self::$domain . $objectId; $htmlPage = kFile::downloadUrlToString($url); $status = 'error'; $message = ''; $objectInfo = null; $tags = ''; $flv = ''; $thumbnail = ''; $foundFlv = false; if (preg_match('/IAD.flvs = \\["(.*)"\\];/', $htmlPage, $pregResult)) { $flv = "/download/" . $pregResult[1]; $foundFlv = true; } else { if (self::findAlternativeVideo('MPEG4', $htmlPage)) { $flv = self::findAlternativeVideo('MPEG4', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('256Kb MPEG4', $htmlPage)) { $flv = self::findAlternativeVideo('256Kb MPEG4', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('64Kb MPEG4', $htmlPage)) { $flv = self::findAlternativeVideo('64Kb MPEG4', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('Windows Media', $htmlPage)) { $flv = self::findAlternativeVideo('Windows Media', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('QuickTime', $htmlPage)) { $flv = self::findAlternativeVideo('QuickTime', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('MPEG1', $htmlPage)) { $flv = self::findAlternativeVideo('MPEG1', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('MPEG2', $htmlPage)) { $flv = self::findAlternativeVideo('MPEG2', $htmlPage); $foundFlv = true; } else { if (self::findAlternativeVideo('Other', $htmlPage)) { $flv = self::findAlternativeVideo('Other', $htmlPage); $foundFlv = true; } } } } } } } } } if ($foundFlv) { $flv = self::$domain . $flv; // find alternative thumbnail if (!$thumbnail) { $regex = '/<img title="\\[item image\\]"\\s*alt="\\[item image\\]"\\s*(style="([^"]*)"\\s){0,2}\\s*src="([^"]*)"\\/>/i'; if (preg_match($regex, $htmlPage, $pregResult)) { $thumbnail = $pregResult[3]; } } if (preg_match('/Keywords:<\\/span>(.*?)<\\/span>/', $htmlPage, $tagsResult)) { $tags = strip_tags(@$tagsResult[1]); // remove ; and : $tags = trim($tags); $tags = str_replace(array(";", ":"), ",", $tags); $tagsArray = explode(",", $tags); // make unique $tagsArray = array_unique($tagsArray); $tagsArray = array_values($tagsArray); // remove white spaces for ($i = 0, $len = count($tagsArray); $i < $len; $i++) { $tagsArray[$i] = trim($tagsArray[$i]); } // back to string $tags = implode(", ", $tagsArray); } $objectInfo = array('id' => $objectId, 'url' => $flv, 'tags' => $tags, 'thumbnail' => $thumbnail, 'license' => '', 'credit' => '', 'flash_playback_type' => 'none'); $status = 'ok'; } return array('status' => $status, 'message' => $message, 'objectInfo' => $objectInfo); }
private static function getObjectInfo($objectId) { $source_link = "http://current.com{$objectId}"; $htmlPage = kFile::downloadUrlToString($source_link, 1); $status = 'error'; $message = ''; $objectInfo = null; //video might be an embed from youtube //<a target="_blank" title="http://www.youtube.com/watch?v=0XxFjTdHYcA" href="http://www.youtube.com/watch?v=0XxFjTdHYcA">http://www.youtube.com/watch?v=0XxFjTdHYcA</a> if (preg_match('/<div id="itemSourceLink">(.*)<\\/div>/ms', $htmlPage, $matches)) { if (preg_match('/<a.*title="http:\\/\\/www\\.youtube\\.com\\/watch\\?v=(.*?)"/ms', $matches[1], $matches)) { return myYouTubeServices::getObjectInfo($matches[1]); } } //so.addVariable('imgPath', 'http://i.current.com/images/studio/asset/2007/05/31/36576944_392115194_400x300.jpg'); //so.addVariable('vidPath', 'http://v.current.com/vids/2007/05/31/20070531_36579189_36576944_3.flv'); if (preg_match("/'vidPath', '(.*?)'/ms", $htmlPage, $matches)) { $url = $matches[1]; if (preg_match("/'imgPath', '(.*?)'/ms", $htmlPage, $matches)) { $thumb = $matches[1]; $objectInfo = array('id' => $objectId, 'url' => $url, 'thumb' => $thumb, 'source_link' => $source_link); //'license' => '', 'credit' => ''); $status = 'ok'; } } return array('status' => $status, 'message' => $message, 'objectInfo' => $objectInfo, "needMediaInfo" => self::$NEED_MEDIA_INFO); }
private static function getObjectInfo($objectId) { $htmlPage = kFile::downloadUrlToString("http://vids.myspace.com/index.cfm?fuseaction=vids.individual&videoid={$objectId}"); $status = 'error'; $message = ''; $objectInfo = null; $title = ''; $tags = ''; $flvUrl = ''; // 2009-10-19: mySpace changed the HTML result. // It may be that there are 2 <h1> tags if (preg_match('/<h1.*?tv_tbar.*?>(.*?)<\\/h1>/', $htmlPage, $titleTag)) { $title = $titleTag[1]; if (preg_match('/<a.*?>(.*?)<\\/a>/', $title, $titleInnerValue)) { $title = $titleInnerValue[1]; } if (preg_match('/<div.*?>.*?Tags:(.*?)<\\/div>/ms', $htmlPage, $tagsContainer)) { if (preg_match_all('/<a href.*?>(.*?)<\\/a>/ms', $tagsContainer[1], $tagsWords)) { $tags = implode(',', $tagsWords[1]); } } $rssFeed = kFile::downloadUrlToString("http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID={$objectId}"); if (preg_match_all('/<media:content url="(.*?)"/ms', $rssFeed, $urlAttr)) { $flvUrl = $urlAttr[1][0]; } /* else { $len = strlen($videoFlvId); $flvUrl = sprintf("http://content.movies.myspace.com/%07d/%s%s/%s%s/%d.flv", floor($videoFlvId / 100000), $videoFlvId[--$len], $videoFlvId[--$len], $videoFlvId[--$len], $videoFlvId[--$len], $videoFlvId); } */ $objectInfo = array('id' => $objectId, 'title' => $title, 'url' => $flvUrl, 'tags' => $tags, 'license' => '', 'credit' => ''); $status = 'ok'; } return array('status' => $status, 'message' => $message, 'objectInfo' => $objectInfo); }
private static function getObjectInfo($objectId) { $url = "http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=" . self::DEV_ID . "&video_id=" . urlencode($objectId); $xpath = self::getXPathResponse($url); $title = ''; $tags = ''; $credit = ''; if ($xpath) { $videos = $xpath->query("//video_details"); foreach ($videos as $video) { $title = self::getXmlNodeValue($video, "title"); $tags = implode(',', explode(' ', self::getXmlNodeValue($video, "tags"))); $credit = self::getXmlNodeValue($video, "author"); } } $source_link = "http://www.youtube.com/watch?v=" . $objectId; $htmlPage = kFile::downloadUrlToString($source_link, 3); $status = 'error'; $message = ''; $objectInfo = null; if (preg_match('/Location: (.*?)\\/verify_age/', $htmlPage)) { $message = "Adult content, age verification required, Please choose another movie"; } else { if (preg_match('/swfArgs.*?\\{.*?, "t":\\s*"(.*?)"/s', $htmlPage, $timestampMatch) || preg_match('/SWF_ARGS.*?\\{.*?, "t":\\s*"(.*?)"/s', $htmlPage, $timestampMatch)) { //var swfArgs = {"sourceid": "y", "video_id": "CoiFGva_JoY", "l": 64, "sk": "uKKGdPxW5MWYni0u_OXxkgU", "t": "OEgsToPDskKqwUniXcKcELZlXY7Smhdx", "hl": "en", "plid": "AAREdD-JLalob4scAAAAIIAYQAA", "sdetail": "p%3A"}; $fmt_url = ""; //"fmt_map": "35/640000/9/0/115,18/512000/9/0/115,34/0/9/0/115,5/0/7/0/0" if (preg_match('/swfArgs.*?\\{.*?, "fmt_map":\\s*"(.*?)"/s', $htmlPage, $fmt_map)) { $fmt_map_array = explode(",", $fmt_map[1]); $fmt_details = explode("/", $fmt_map_array[0]); //print_r($fmt_map_array); //echo "fmt: ".$fmt_details[0]."\n"; if ($fmt_details[0]) { $fmt_url = "&fmt=" . $fmt_details[0]; } } elseif (preg_match('/SWF_ARGS.*?\\{.*?, "fmt_map":\\s*"(.*?)"/s', $htmlPage, $fmt_map)) { //"fmt_map": "34%2F0%2F9%2F0%2F115%2C5%2F0%2F7%2F0%2F0" $encoded_fmt_map = urldecode($fmt_map[1]); $fmt_map_array = explode(",", $encoded_fmt_map); $fmt_details = explode("/", $fmt_map_array[0]); //print_r($fmt_map_array); //echo "fmt: ".$fmt_details[0]."\n"; if ($fmt_details[0]) { $fmt_url = "&fmt=" . $fmt_details[0]; } } //var swfArgs = {hl:'en',video_id:'F924-D-g5t8',l:'24',t:'OEgsToPDskL9BIntclUB-PPzMEpVQKo8',sk:'xXvbHpmFGQKgv-b9__DkgwC'}; $tId = $timestampMatch[1]; //$url = "http://youtube.com/get_video?video_id=".$objectId."&t=$tId$fmt_url"; $url = requestUtils::getRequestHost() . '/extservices/youtubeRedirect?itemId=' . $objectId; $objectInfo = array('id' => $objectId, 'url' => $url, 'title' => $title, 'thumb' => "http://img.youtube.com/vi/{$objectId}/2.jpg", 'tags' => $tags, 'ext' => "flv", 'source_link' => $source_link, 'license' => '', 'credit' => $credit, 'flash_playback_type' => 'video'); $status = 'ok'; } } return array('status' => $status, 'message' => $message, 'objectInfo' => $objectInfo); }