Как искать в HTML для YouTube и Vimeo видео с помощью PHP - PullRequest
1 голос
/ 10 марта 2011

Мне нужен какой-то способ поиска по множеству HTML для видео на YouTube и Vimeo. Часть текста использует тип встраивания iframe, в то время как другие используют тег embed. Мне нужно сделать следующее:

Поиск тегов для вставки - проверьте, если они YouTube или Vimeo

поиск тэгов iframe - проверьте, если они YouTube или Vimeo

Затем я хочу взять их входные данные в массив следующим образом:

array(type=>'youtube', video_id=>'12qfsdf9jr');

или для vimeo

array(type=>'vimeo', video_id=>'lkaj82932');

Если это что-то изменит, то будет искать в ОГРОМНОМ количестве постов WordPress. Пожалуйста, дайте мне знать, как я могу это сделать!

Ответы [ 3 ]

1 голос
/ 10 марта 2011
<?php
$html = file_get_contents("http://example.com");

preg_match_all("/src=(?:\"|\')(.*?)(?:\"|\'))/", $html, $matches, PREG_SET_ORDER);

foreach($matches as $match){
    $data = parse_url($match[1]);
    if($data['host'] == 'youtube.com'){
        //do stuff. $data['query'] will have the video ID in it
    }
}
?>
1 голос
/ 10 марта 2011

Следующее решение оптимизировано для скорости. Он анализирует видео Vimeo и YouTube по отдельности, что позволяет использовать быстрое регулярное выражение для каждого (с открытым литеральным текстом в начале шаблона, который запускает оптимизацию PCRE.) Кроме того, немного другой формат массива используется для хранения данных, в которых находится идентификатор видеоклипа. сохраняется как ключ массива, а тип видео («vim» или «yt») в качестве значения. Это гарантирует, что дубликаты не будут добавлены. Вот проверенный скрипт, который делает свое дело:

// Store videos as: array('vimeo_id' => 'vim', 'youtube_id' => 'yt' );
// This ensures no duplicate entries are added to $videos array.
$videos = array();  

// Find all unique Vimeo videos
$re_vimeo = '%vimeo\.com/(\d{7,9})\b%';
$count = preg_match_all($re_vimeo, $data, $matches);
for ($i = 0; $i < $count; ++$i) {
    $videos[$matches[1][$i]] = 'vim';
}
$vimeo_count = count($videos);

// Find all unique YouTube videos
$re_youtube = '%youtube\.com/(?:v/|watch\?v=|embed/)(\w{10,12})\b%';
$count = preg_match_all($re_youtube, $data, $matches);
for ($i = 0; $i < $count; ++$i) {
    $videos[$matches[1][$i]] = 'yt';    // Add only unique videos to array.
}
$total_count = count($videos);
$youtube_count = $total_count - $vimeo_count;
printf("%d Unique videos found. Vimeo count = %d, YouTube count = %d\n",
     $total_count, $vimeo_count, $youtube_count);print_r($videos);
1 голос
/ 10 марта 2011

Взгляните на Простой HTML DOM . Запись "Как получить элементы HTML?" в разделе быстрого запуска выглядит довольно близко к вашим требованиям.

...