2009-09-05 91 views
0

我在創建一個PHP腳本,其中,用戶將提供一個網頁鏈接,它將獲取該網頁的內容並根據其內容解析內容。PHP file_get_contents

例如,如果用戶提供了一個YouTube鏈接:

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

然後,它會搶關於該視頻的基本信息

或者他們可能會提供一個VIMEO(縮略圖,嵌入代碼?)鏈接:

http://www.vimeo.com/xxxxxx 

或者即使他們提供任何鏈接,沒有附加的視頻,如:

http://www.google.com/ 

它可以抓取頁面標題或一些元內容。

我想我不得不使用file_get_contents,但我不完全確定如何在這種情況下使用它。

我不想找人編寫整個代碼,但可能會提供一些工具,以便我可以完成此操作。

+3

試着問一個更直接的問題,如「我怎麼找一部電影的縮略圖在使用PHP的YouTube中「這可能會讓人們更敏感。 – 2009-09-05 20:17:27

回答

3

您可以使用curlhttp庫。您發送一個http請求,並可以使用該庫從http響應中獲取信息。

+0

此外,你可以使用正則表達式來解析你想要這些網站的信息。 – yoda 2009-09-05 20:21:08

0

也許ThumbshotsSnap已經有一些你想要的功能?

我知道那不是你正在尋找的東西,但至少對於可能方便的嵌入式東西來說。另外txwikinger已經回答了你的其他問題。但也許這有助於ypu。

1

file_get_contents()會在這種情況下工作,假設您的php.ini中有allow_fopen_url設置爲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的代碼將是相同的。

+0

使用HTTP包裝函數調用file_get_contents(打開URL)後,變量$ http_response_header將填充響應頭 – Greg 2009-09-05 23:20:38

2

我知道這個問題是相當古老的,但我會回答,以防萬一有人打它尋找同樣的事情。

爲YouTube,Vimeo,Wordpress,Slideshare,Hulu,Flickr和許多其他服務使用oEmbed(http://oembed.com/)。如果不在列表中,或者你想讓它更精確,您可以使用此:

http://simplehtmldom.sourceforge.net/

這是一個老的jQuery的PHP的,這意味着你可以使用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); 
}