PHP file_get_contents

时间:2009-09-05 20:07:12

标签: php file-get-contents

我正在寻找创建一个PHP脚本,用户将提供一个指向网页的链接,它将获取该网页的内容并根据其内容解析内容。

例如,如果用户提供YouTube链接:

http://www.youtube.com/watch?v=xxxxxxxxxxx

然后,它会获取有关该视频的基本信息(缩略图,嵌入代码?)

或者他们可能提供vimeo链接:

 http://www.vimeo.com/xxxxxx

或者即使他们提供任何链接,但没有附加视频,例如:

 http://www.google.com/

它可以抓住页面标题或某些元内容。

我想我必须使用file_get_contents,但我不确定如何在这种情况下使用它。

我不是在找人编写整个代码,但也许会为我提供一些工具,以便我能够完成这项工作。

4 个答案:

答案 0 :(得分:3)

您可以使用curlhttp库。您发送http请求,并可以使用该库从http响应中获取信息。

答案 1 :(得分:2)

我知道这个问题已经很老了,但我会回答,以防有人点击它寻找同样的事情。

将oEmbed(http://oembed.com/)用于YouTube,Vimeo,Wordpress,Slideshare,Hulu,Flickr和许多其他服务。如果不在列表中,或者您想使其更精确,可以使用:

http://simplehtmldom.sourceforge.net/

这是一种用于PHP的jQuery,这意味着您可以使用HTML选择器来获取部分代码(即:所有图像,获取div的内容,仅返回节点的文本(无HTML)内容等) )。

你可以做这样的事情(可以更优雅地完成,但这只是一个例子):

    require_once("simple_html_dom.php");
function getContent ($item, $contentLength) 
{
    $raw;
    $content = "";
    $html;
    $images = "";

    if (isset ($item->content) && $item->content != "")
    {
        $raw = $item->content;
        $html = str_get_html ($raw);            
        $content = str_replace("\n", "<BR /><BR />\n\n", trim($html->plaintext));

        try
        {
            foreach($html->find('img') as $image) {
                if ($image->width != "1") 
                {
                    // Don't include images smaller than 100px height
                    $include = false;
                    $height = $image->width;
                    if ($height != "" && $height >= 100)
                    {
                        $include = true;
                    }
                    /*else
                    {
                        list($width, $height, $type, $attr) = getimagesize($image->src);
                            if ($height != "" && $height >= 100)
                                $include = true;
                    }*/                 

                    if ($include == true)
                    {
                        $images = $images . '<div class="theImage"><a href="'.$image->src.'" title="'.$image->alt.'"><img src="'.$image->src.'" alt="'.$image->alt.'" class="postImage" border="0" /></a></div>';
                    }
                }
            }
        }
        catch (Exception $e) {
            // Do nothing
        }

        $images = '<div id="images">'.$images.'</div>';
    }
    else
    {
        $raw = $item->summary;
        $content = str_get_html ($raw)->plaintext;
    }

    return (substr($content, 0 , $contentLength) . (strlen ($content) > $contentLength ? "..." : "") . $images);
}

答案 2 :(得分:1)

假设您在php.ini中将allow_fopen_url设置为file_get_contents()

true将适用于此情况。你会做的是:

$pageContent = @file_get_contents($url);
if ($pageContent) {
    preg_match_all('#<embed.*</embed>#', $pageContent, $matches);
    $embedStrings = $matches[0];
}

也就是说,file_get_contents()对于其他接收成功内容或false失败时的错误处理方式不会给你太多帮助。如果您希望更好地控制请求并访问HTTP响应代码,请使用curl函数,尤其是curl_get_info,查看响应代码,mime类型,编码等一旦你通过curl或file_get_contents()你的代码获取内容来解析它以寻找感兴趣的HTML将是相同的。

答案 3 :(得分:0)

也许ThumbshotsSnap已经拥有了您想要的一些功能?

我知道这不是你想要的,但至少对于可能很方便的嵌入式东西。另外txwikinger已经回答了你的另一个问题。但也许这对ypu有帮助。