PHP从YouTube获取类别信息

时间:2012-02-13 09:16:49

标签: php html youtube web-scraping

我是PHP的初学者,我正在开发一个可以从Youtube网页中提取标题/描述/标签(或关键字)的脚本。例如,选择任何youtube页面,例如http://www.youtube.com/watch?v=yADOdeZTD9c ..它的HTML代码包含

<meta name="keywords" content="nirvana, unplugged, performing, tocando, cantando, come, as, you, are, Come, As, You, Are, nevermind, live, en, vivo, 1992, 1993, acoustic, acustica, complet...">

我的代码可以从上面的行中提取关键字。代码的相关部分如下:

            $meta_elements = $pageDOM->getElementsByTagName('meta');
            foreach ($meta_elements as $meta_element) {
                if (strtolower($meta_element->getAttribute('name')) == 'description')
                {
                    $aValues['description'] = $meta_element->getAttribute('content');

                    echo $meta_element->getAttribute('content'); 

                }
            }

我试图修改它以提取类别信息但我无法这样做,因为类别名称无法以与关键字或描述相同的方式提取。

我认为网站HTML代码中的部分,我可以从中提取类别:

Category:
</h4>
    <p id="eow-category"><a href="/music">Music</a></p>

非常感谢任何有关如何提取“音乐”(案例无关紧要)的建议。

谢谢:)

2 个答案:

答案 0 :(得分:1)

为什么当您通过YouTube Data API提供所需信息时,您会从YouTube.com抓取网页。您可以在不到一分钟的时间内获得类别信息和任何内容。你甚至不需要PHP。只需在控制台中运行此示例代码:

function youtubeDataCallback(json){
    console.log(json);
    alert(json.data.category);
}
var s = document.createElement("script");
s.type = "text/javascript";
s.src = "http://gdata.youtube.com/feeds/api/videos/yADOdeZTD9c?v=2&alt=jsonc&callback=youtubeDataCallback";
document.getElementsByTagName("head")[0].appendChild(s);

PHP代码更简单。你只需要2-3行代码。

话虽如此,这给了你什么?

$pageDOM->getElementById("eow-category")->getElementsByTagName("a")->item(0)->nodeValue

答案 1 :(得分:0)

您可以使用正则表达式

执行此操作
$index = file_get_contents('http://www.youtube.com/watch?v=yADOdeZTD9c');
preg_match_all('#dir="ltr" title="(?:.*?)">(.*?)</span>#isu', $index, $title);
$youtube['title'] = trim ($title[1][0]);
preg_match_all('#<p id="eow-description" >(.*?)</p>#isu', $index, $about);
$youtube['about'] = trim ($about[1][0]);
preg_match_all('#<p id="eow-category"><a href="/(?:.*?)">(.*?)</a></p>#isu', $index, $cat);
$youtube['cat'] = trim ($cat[1][0]);
preg_match_all('#search=tag">(.*?)</a></li>#isu', $index, $tag);
$youtube['tag'] = $tag[1];
print_r($youtube);