Здравствуйте есть код парсера с ютуба и все как бы работает но по одному кею парсит одно видео , помогите допилять чтоб парсил несколько видео с кея PHP: function youtube($key) { $ch = curl_init(); //http://img.youtube.com/vi/6g6g2mvItp4/1.jpg //curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/results?sp=CAASAggC&q='.urlencode($key)); curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/results?search_query='.urlencode($key)); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY); $result = curl_exec($ch); curl_close($ch); preg_match_all('!data-context-item-id="(.*?)"!siu', $result, $lines); $countresult = count($lines[1]); if ($countresult > 0) {$countresult = $countresult - 1;} $randnum = mt_rand(0, $countresult); $youtubeurl = @trim($lines[1][$randnum]); // название: preg_match_all('!\<h3 class="yt-lockup-title "\>(.*?)\</h3\>!siu', $result, $lines); $youtubetitle = @trim(strip_tags($lines[1][$randnum])); $youtubetitle = str_ireplace('Duration:', '', $youtubetitle); $youtubetitle = str_ireplace('Продолжительность:', '', $youtubetitle); $youtubetitle = str_ireplace('- Playlist', '', $youtubetitle); $youtubetitle = trim($youtubetitle); if ($youtubeurl != '') { $content_parser = '<p>'.$youtubetitle.'</p> <iframe width="80%" height="400" src="https://www.youtube.com/embed/'.$youtubeurl.'" frameborder="0" allowfullscreen></iframe>'; } else { $content_parser = ''; } return $content_parser; }
PHP: $countresult = count($lines[1]); if ($countresult > 0) {$countresult = $countresult - 1;} $randnum = mt_rand(0, $countresult); $youtubeurl = @trim($lines[1][$randnum]); ну вот тут он берет все найденные результаты поиска на странице, если больше 0 то берет случайную ссылку ..... вам нужно просто в цикл все обернуть ... как то так PHP: preg_match_all('!data-context-item-id="(.*?)"!siu', $result, $lines); $content_parser = ''; foreach($lines[1] AS $el) { $youtubeurl = @trim($el); // название: preg_match_all('!\<h3 class="yt-lockup-title "\>(.*?)\</h3\>!siu', $result, $lines); $youtubetitle = @trim(strip_tags($el)); $youtubetitle = str_ireplace('Duration:', '', $youtubetitle); $youtubetitle = str_ireplace('Продолжительность:', '', $youtubetitle); $youtubetitle = str_ireplace('- Playlist', '', $youtubetitle); $youtubetitle = trim($youtubetitle); if ($youtubeurl != '') { $content_parser .= '<p>'.$youtubetitle.'</p> <iframe width="80%" height="400" src="https://www.youtube.com/embed/'.$youtubeurl.'" frameborder="0" allowfullscreen></iframe>'; } return $content_parser; P/S Писал на коленке..... за синтаксические и прочие огрехи не ручаюсь - главно было вам мысль передать
P/S Писал на коленке..... за синтаксические и прочие огрехи не ручаюсь - главно было вам мысль передать[/QUOTE] спасибо буду пробовать
апи здесь не используется и тот вариант что вы писали выше тоже не работает парсится только одно видео
@ADSoft подскажите как в этом случае сделать правильно обвертку не могу вывести все результаты выводит только один PHP: $result_json = youtube_search($apikey, $search, $limit) ; $result = json_decode( $result_json ); foreach($result as $res) { echo 'ID: '.$res->items[0]->id->videoId.'<br><br> TITLE: '.$res->items[0]->snippet->title.'<br><br> DESC: '.$res->items[0]->snippet->description.'<br><br> <img width=120 height=90 src='.$res->items[0]->snippet->thumbnails->default->url.'><br><br> <img width=320 height=180 src='.$res->items[0]->snippet->thumbnails->medium->url.'><br><br> <img width=480 height=360 src='.$res->items[0]->snippet->thumbnails->high->url.'><br><br> <iframe width=600 height=500 src=https://www.youtube.com/embed/'.$res->items[0]->id->videoId.'?feature=oembed frameborder=0 allowfullscreen></iframe><br><br>'; }