null, 'title' => null); /** * Устанавливает используемый HTTP-клиент * * @param httpClient $client * @return void */ public function setHttpClient(httpClient $client) { $this->_httpClient = $client; } /** * Выполняет запрос к серверу YouTube и возвращает хеш-массив с * полученным данными * * @param string $url * @return array */ public function getResult($url) { return $this->_parse($url)->_result; } /** * Непосредственно парсинг UHTML-страничек и вычленение заголовков с * перенаправлениями. * * @param string $url * @return YouTube */ private function _parse($url) { $code = $this->_httpClient->get($url); if (preg_match('/var fs = window\.open\( "\/(.*?)" \+ "(.*?)" ,/si', $code, $match)) { $code = $this->_httpClient->get('http://youtube.com/'.$match[1]); $title = $match[2]; if (preg_match('/"\/player2\.swf\?(.*)", "player"/si', $code, $match)) { $url = 'http://youtube.com/get_video.php?'.$match[1]; // работает $code = $this->_httpClient->get($url, true); if (preg_match('/Location\:\s*?(.*?)\n/si', $code, $match)) { $this->_result['url'] = trim($match[1]); $this->_result['title'] = urldecode($title); } } } return $this; } /** * Возвращает URL видео * * @param void * @return string */ public function getUrl() { return $this->_result['url']; } /** * Возвращает название видео * * @param void * @return string */ public function getTitle() { return $this->_result['title']; } }