PHP从YouTube获取类别信息


PHP to get category info from YouTube

我是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>

任何关于如何提取"音乐"的建议(情况无关紧要)都将不胜感激。。

谢谢:)

当您需要的信息可以通过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

您可以使用正则表达式来完成此操作

$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);