1

我需要一些方法来搜索大量的 youtube 和 vimeo 视频的 HTML。一些文本使用嵌入的 iframe 类型,而另一些则使用嵌入标签。我需要执行以下操作:

搜索嵌入标签 - 检查它们是 youtube 还是 vimeo

搜索 iframe 标签 - 检查它们是 youtube 还是 vimeo

然后我想将它们输入到一个数组中,如下所示:

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

或对于 vimeo

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

如果它有所作为,它将搜索大量的 wordpress 帖子。请让我知道如何做到这一点!

4

3 回答 3

1

以下解决方案针对速度进行了优化。它分别解析 Vimeo 和 YouTube 视频,这允许对每个视频使用快速正则表达式(在模式开始时暴露文字文本会触发 PCRE 优化。)此外,使用稍微不同的数组格式来存储视频剪辑 ID 所在的数据存储为数组键,视频类型(“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);
于 2011-03-10T20:42:08.763 回答
1

看看简单的 HTML DOM。条目“如何获取 HTML 元素?” 在快速入门部分看起来非常接近您的要求。

于 2011-03-10T16:11:47.800 回答
1
<?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
    }
}
?>
于 2011-03-10T16:12:35.693 回答