【问题标题】:PHP to get category info from YouTubePHP 从 YouTube 获取类别信息
【发布时间】:2012-03-04 16:54:35
【问题描述】:

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

非常感谢任何关于如何提取“音乐”(大小写无关紧要)的建议..

谢谢你:)

【问题讨论】:

    标签: php html youtube web-scraping


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

    【讨论】:

    • 非常感谢很多的回复。我真的很感谢你的帮助!我认为使用 PHP 会更快,因为我已经有了可用的相关代码。正如你所建议的,我尝试了以下操作:echo $pageDOM-&gt;getElementById("eow-category")-&gt;getElementsByTagName("a")-&gt;item(0)-&gt;nodeValue ; 这给出了 - 致命错误:在 script.php 第 168 行中的非对象上调用成员函数 getElementsByTagName()
    • 我不确定确切的语法;在上面的例子中,也许你需要一个额外的-&gt;item(0)。查看我的编辑。
    • 我得到了我想要的。我试过了 - $meta_element-&gt;getElementsByTagName("a")-&gt;item(0)-&gt;nodeValue; 非常感谢 :)
    【解决方案2】:

    您可以使用正则表达式来做到这一点

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2015-04-14
      • 2012-12-02
      相关资源
      最近更新 更多