2009-09-05 8 views
0

Je cherche à créer un script PHP où un utilisateur fournira un lien vers une page Web, et il obtiendrai le contenu de cette page Web et en fonction de son contenu, analyser le contenu.PHP file_get_contents

Par exemple, si un utilisateur fournit un lien YouTube:

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

Ensuite, il va récupérer les informations de base sur cette vidéo

Ou ils pourraient fournir un vimeo (miniature, le code embed?) lien:

http://www.vimeo.com/xxxxxx 

Ou même si elles devaient fournir tout lien, sans vidéo ci-jointe, telles que:

http://www.google.com/ 

Et il pourrait saisir juste le titre de la page ou un contenu méta.

Je pense que je dois utiliser file_get_contents, mais je ne sais pas exactement comment l'utiliser dans ce contexte.

Je ne cherche pas quelqu'un pour écrire le code entier, mais peut-être me fournir quelques outils pour que je puisse accomplir ceci.

+3

Essayez de poser une question avant plus droite, comme « comment puis-je obtenir les vignettes d'un film sur YouTube en utilisant PHP "Cela pourrait rendre les gens plus réactifs. –

Répondre

3

Vous pouvez utiliser le curl ou la bibliothèque http. Vous envoyez une requête http et pouvez utiliser la bibliothèque pour obtenir les informations de la réponse http.

+0

en outre, vous pouvez utiliser regex pour analyser les informations que vous voulez sur ces sites. – yoda

0

Peut-être Thumbshots ou Snap ont déjà certaines des fonctionnalités que vous voulez? Je sais que ce n'est pas exactement ce que vous cherchez, mais au moins pour les choses intégrées qui pourraient être utiles. Txwikinger a déjà répondu à votre autre question. Mais peut-être que cela aide ypu de toute façon.

1

file_get_contents() fonctionnerait dans ce cas en supposant que vous avez allow_fopen_url mis à true dans votre php.ini. Qu'est-ce que vous feriez quelque chose comme:

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

Cela dit, file_get_contents() vous ne donnera pas beaucoup de la manière de traiter erreur autre réception du contenu en cas de succès ou false en cas d'échec. Si vous souhaitez avoir un meilleur contrôle de la requête et accéder aux codes de réponse HTTP, utilisez les fonctions curl et en particulier, curl_get_info, pour consulter les codes de réponse, les types mime, l'encodage, etc. Une fois le contenu obtenu, soit curl ou file_get_contents() votre code pour l'analyser pour rechercher le HTML d'intérêt sera le même.

+0

Après un appel à file_get_contents en utilisant l'encapsuleur HTTP (ouvrant ainsi une URL), la variable $ http_response_header sera remplie avec les en-têtes de réponse – Greg

2

Je sais que cette question est assez ancienne, mais je répondrai juste au cas où quelqu'un la chercherait à la recherche de la même chose.

utilisation oEmbed (http://oembed.com/) pour YouTube, Vimeo, Wordpress, Slideshare, Hulu, Flickr et bien d'autres services. Dans le cas contraire dans la liste ou si vous voulez le rendre plus précis, vous pouvez utiliser ceci:

http://simplehtmldom.sourceforge.net/

Il est une sorte de jQuery pour PHP, ce qui signifie que vous pouvez utiliser des sélecteurs de HTML pour obtenir des parties du code (: toutes les images, récupèrent le contenu d'un div, renvoient uniquement du texte (pas de HTML) contenu d'un noeud, etc).

Vous pourriez faire quelque chose comme ça (peut être plus élégante fait, mais cela est juste un exemple):

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); 
} 
Questions connexes