【问题标题】:How to search through html for youtube and vimeo videos with php如何使用 php 在 html 中搜索 youtube 和 vimeo 视频
【发布时间】:2011-07-12 19:42:11
【问题描述】:

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

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

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

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

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

或用于 vimeo

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

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

【问题讨论】:

  • 循环浏览页面上找到的所有 URL 可能是最简单的方法,然后尝试匹配这些 URL 并删除重复项。嵌入代码太容易更改,无法为它们编写可靠的正则表达式。
  • 好的。好吧,进一步缩小范围,我知道嵌入和 iframe 中始终包含 src="url" 我怎么能搜索 src= 然后从中获取 URL?

标签: php regex full-text-search youtube vimeo


【解决方案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);

【讨论】:

  • vimeo 似乎没有拾取所有视频。我在数据库中有 64 个匹配项,但在数组中有 32 个匹配项。也许它没有采用所有嵌入方式?
  • 哦,我知道它在做什么。它只是在搜索 vimeo.com/video_id。它不能这样做,因为它只会获取网站上的所有链接。没有任何实际嵌入。有什么建议吗?
  • 你能举一个不匹配的vimeo嵌入字符串的例子吗?我很乐意更新解决方案。
【解决方案2】:
<?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
    }
}
?>

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2014-04-04
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多