За последние 24 часа нас посетили 30647 программистов и 1809 роботов. Сейчас ищут 883 программиста ...

Парсер видео с ютуба

Тема в разделе "PHP для новичков", создана пользователем Bridun, 19 ноя 2017.

Метки:
  1. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    Здравствуйте есть код парсера с ютуба и все как бы работает но по одному кею парсит одно видео , помогите допилять чтоб парсил несколько видео с кея

    PHP:
    1. function youtube($key) {
    2.     $ch = curl_init();
    3.     //http://img.youtube.com/vi/6g6g2mvItp4/1.jpg
    4.     //curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/results?sp=CAASAggC&q='.urlencode($key));
    5.     curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/results?search_query='.urlencode($key));  
    6.     curl_setopt($ch, CURLOPT_HEADER, false);
    7.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    8.     curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    9.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6);
    10.     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');
    11.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    12.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    13.     curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
    14.     $result = curl_exec($ch);
    15.     curl_close($ch);
    16.  
    17.     preg_match_all('!data-context-item-id="(.*?)"!siu', $result, $lines);
    18.     $countresult = count($lines[1]);
    19.     if ($countresult > 0) {$countresult = $countresult - 1;}
    20.     $randnum = mt_rand(0, $countresult);
    21.     $youtubeurl = @trim($lines[1][$randnum]);
    22.  
    23.     // название:
    24.     preg_match_all('!\<h3 class="yt-lockup-title "\>(.*?)\</h3\>!siu', $result, $lines);
    25.     $youtubetitle = @trim(strip_tags($lines[1][$randnum]));
    26.     $youtubetitle = str_ireplace('Duration:', '', $youtubetitle);
    27.     $youtubetitle = str_ireplace('Продолжительность:', '', $youtubetitle);
    28.     $youtubetitle = str_ireplace('- Playlist', '', $youtubetitle);
    29.     $youtubetitle = trim($youtubetitle);
    30.  
    31.     if ($youtubeurl != '') {
    32.         $content_parser = '<p>'.$youtubetitle.'</p>
    33.    <iframe width="80%" height="400" src="https://www.youtube.com/embed/'.$youtubeurl.'" frameborder="0" allowfullscreen></iframe>';
    34.     } else {
    35.         $content_parser = '';
    36.     }
    37.     return $content_parser;
    38. }
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    PHP:
    1. $countresult = count($lines[1]);
    2.     if ($countresult > 0) {$countresult = $countresult - 1;}
    3.     $randnum = mt_rand(0, $countresult);
    4.     $youtubeurl = @trim($lines[1][$randnum]);
    ну вот тут он берет все найденные результаты поиска на странице, если больше 0 то берет случайную ссылку ..... вам нужно просто в цикл все обернуть
    ... как то так
    PHP:
    1. preg_match_all('!data-context-item-id="(.*?)"!siu', $result, $lines);
    2. $content_parser = '';
    3. foreach($lines[1] AS $el) {
    4.     $youtubeurl = @trim($el);
    5.     // название:
    6.     preg_match_all('!\<h3 class="yt-lockup-title "\>(.*?)\</h3\>!siu', $result, $lines);
    7.     $youtubetitle = @trim(strip_tags($el));
    8.     $youtubetitle = str_ireplace('Duration:', '', $youtubetitle);
    9.     $youtubetitle = str_ireplace('Продолжительность:', '', $youtubetitle);
    10.     $youtubetitle = str_ireplace('- Playlist', '', $youtubetitle);
    11.     $youtubetitle = trim($youtubetitle);
    12.     if ($youtubeurl != '') {
    13.         $content_parser .= '<p>'.$youtubetitle.'</p>
    14.   <iframe width="80%" height="400" src="https://www.youtube.com/embed/'.$youtubeurl.'" frameborder="0" allowfullscreen></iframe>';
    15.     }
    16.     return $content_parser;
    P/S Писал на коленке..... за синтаксические и прочие огрехи не ручаюсь - главно было вам мысль передать
     
    Bridun нравится это.
  3. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    P/S Писал на коленке..... за синтаксические и прочие огрехи не ручаюсь - главно было вам мысль передать[/QUOTE]
    спасибо буду пробовать
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Апи не ищи, парсер пиши!
     
    askanim нравится это.
  6. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    апи здесь не используется и тот вариант что вы писали выше тоже не работает парсится только одно видео
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Как ж все сложно-то...
     
  8. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    для меня пока это сложно
     
  9. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    @ADSoft подскажите как в этом случае сделать правильно обвертку не могу вывести все результаты выводит только один

    PHP:
    1. $result_json = youtube_search($apikey, $search, $limit) ;
    2. $result = json_decode( $result_json );
    3.  
    4. foreach($result as $res) {
    5.  
    6.  
    7. echo 'ID: '.$res->items[0]->id->videoId.'<br><br>
    8. TITLE: '.$res->items[0]->snippet->title.'<br><br>
    9. DESC: '.$res->items[0]->snippet->description.'<br><br>
    10. <img width=120 height=90 src='.$res->items[0]->snippet->thumbnails->default->url.'><br><br>
    11. <img width=320 height=180 src='.$res->items[0]->snippet->thumbnails->medium->url.'><br><br>
    12. <img width=480 height=360 src='.$res->items[0]->snippet->thumbnails->high->url.'><br><br>
    13. <iframe width=600 height=500 src=https://www.youtube.com/embed/'.$res->items[0]->id->videoId.'?feature=oembed frameborder=0 allowfullscreen></iframe><br><br>';
    14.  
    15. }