Question

Remarquez comment Google Nouvelles a des sources sur le fond de chaque extrait de l'article.

  

The Guardian - ABC Nouvelles - Reuters -   Bloomberg

Je suis en train d'imiter cela.

Par exemple, lors de la présentation de la http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/ URL Je veux revenir The Washington Times

Comment est-ce possible avec php?

Était-ce utile?

La solution

Ma réponse se développe sur la réponse de @AI W d'utiliser le titre de la page. Voici le code pour accomplir ce qu'il a dit.

<?php

function get_title($url){
  $str = file_get_contents($url);
  if(strlen($str)>0){
    $str = trim(preg_replace('/\s+/', ' ', $str)); // supports line breaks inside <title>
    preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); // ignore case
    return $title[1];
  }
}
//Example:
echo get_title("http://www.washingtontimes.com/");

?>

SORTIE

  

Washington Times - Politique, Briser   Nouvelles, Nouvelles Etats-Unis et du monde

Comme vous pouvez le voir, ce n'est pas exactement ce que Google utilise, donc ce qui conduit à croire que moi qu'ils obtiennent un nom d'hôte URL et correspondent à leur propre liste.

http://www.washingtontimes.com/ => Le Washington Times

Autres conseils

$doc = new DOMDocument();
@$doc->loadHTMLFile('http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/');
$xpath = new DOMXPath($doc);
echo $xpath->query('//title')->item(0)->nodeValue."\n";

Sortie:

  

commission de la dette tombe à court vote test - Washington Times

Il est évident que vous devez également mettre en œuvre la gestion des erreurs de base.

Vous pourriez récupérer le contenu de l'URL et faire une recherche d'expression régulière pour le contenu de l'élément title.

<?php
$urlContents = file_get_contents("http://example.com/");
preg_match("/<title>(.*)<\/title>/i", $urlContents, $matches);

print($matches[1] . "\n"); // "Example Web Page"
?>

Ou, si vous ne voulez pas utiliser une expression régulière (pour correspondre à quelque chose de très près du haut du document), vous pouvez utiliser un objet DOMDocument :

<?php
$urlContents = file_get_contents("http://example.com/");

$dom = new DOMDocument();
@$dom->loadHTML($urlContents);

$title = $dom->getElementsByTagName('title');

print($title->item(0)->nodeValue . "\n"); // "Example Web Page"
?>

Je laisse à vous de décider quelle méthode vous convient le mieux.

Utilisation get_meta_tags () à partir du domaine page d'accueil, pour New York Times ramène quelque chose qui pourrait tronquer besoin, mais pourrait être utile.

$b = "http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/" ;

$url = parse_url( $b ) ;

$tags = get_meta_tags( $url['scheme'].'://'.$url['host'] );
var_dump( $tags );

comprend la description « The Washington Times offre de rupture nouvelles et des commentaires sur les questions qui touchent l'avenir de notre nation. »

PHP manuel sur cURL

<?php

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

PHP manuel sur la correspondance Perl regex

<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>

Et mettre les deux ensemble:

<?php 
// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, "example.com"); 

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string 
$output = curl_exec($ch); 

$pattern = '/[<]title[>]([^<]*)[<][\/]titl/i';

preg_match($pattern, $output, $matches);

print_r($matches);

// close curl resource to free up system resources 
curl_close($ch);      
?>

Je ne peux pas promettre cet exemple ne fonctionnera que je n'ai pas PHP, mais il devrait vous aider à démarrer.

Si vous êtes prêt à utiliser un service tiers pour cela, je vient de construire un www.runway7.net / radar

Vous donne le titre, la description et bien plus encore. Par exemple, essayez votre exemple sur radar. ( http://radar.runway7.net/?url=http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/ )

Vous pouvez également utiliser simple Html Dom Parser :

<?php
require_once('simple_html_dom.php');

$html = file_get_html('http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/');

echo $html->find('title', 0)->innertext . "<br>\n";

echo $html->find('div[class=entry-content]', 0)->innertext;

i a écrit une fonction pour gérer:

 function getURLTitle($url){

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $content = curl_exec($ch);

    $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    $charset = '';

    if($contentType && preg_match('/\bcharset=(.+)\b/i', $contentType, $matches)){
        $charset = $matches[1];
    }

    curl_close($ch);

    if(strlen($content) > 0 && preg_match('/\<title\b.*\>(.*)\<\/title\>/i', $content, $matches)){
        $title = $matches[1];

        if(!$charset && preg_match_all('/\<meta\b.*\>/i', $content, $matches)){
            //order:
            //http header content-type
            //meta http-equiv content-type
            //meta charset
            foreach($matches as $match){
                $match = strtolower($match);
                if(strpos($match, 'content-type') && preg_match('/\bcharset=(.+)\b/', $match, $ms)){
                    $charset = $ms[1];
                    break;
                }
            }

            if(!$charset){
                //meta charset=utf-8
                //meta charset='utf-8'
                foreach($matches as $match){
                    $match = strtolower($match);
                    if(preg_match('/\bcharset=([\'"])?(.+)\1?/', $match, $ms)){
                        $charset = $ms[1];
                        break;
                    }
                }
            }
        }

        return $charset ? iconv($charset, 'utf-8', $title) : $title;
    }

    return $url;
}

il va chercher le contenu de la page Web, et tente d'obtenir le document charset encodage par ((de la plus haute priorité au plus bas):

  1. Un paramètre HTTP "charset" dans un champ "Content-Type".
  2. Une déclaration META "http-equiv" sur "Content-Type" et un ensemble de valeurs pour "charset".
  3. Le jeu d'attribut charset sur un élément qui désigne une ressource externe.

(voir http://www.w3.org/TR/html4/charset. html )

et utilise ensuite iconv à titre de converti à l'encodage utf-8.

Obtenir le titre de site via le lien et le titre de converti au codage de caractères UTF-8:

https://gist.github.com/kisexu/b64bc6ab787f302ae838

function getTitle($url)
{
    // get html via url
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $html = curl_exec($ch);
    curl_close($ch);

    // get title
    preg_match('/(?<=<title>).+(?=<\/title>)/iU', $html, $match);
    $title = empty($match[0]) ? 'Untitled' : $match[0];
    $title = trim($title);

    // convert title to utf-8 character encoding
    if ($title != 'Untitled') {
        preg_match('/(?<=charset\=).+(?=\")/iU', $html, $match);
        if (!empty($match[0])) {
            $charset = str_replace('"', '', $match[0]);
            $charset = str_replace("'", '', $charset);
            $charset = strtolower( trim($charset) );
            if ($charset != 'utf-8') {
                $title = iconv($charset, 'utf-8', $title);
            }
        }
    }

    return $title;
}

J'essaie d'éviter des expressions régulières quand il est pas nécessaire, je l'ai fait une fonction pour obtenir le titre de site Web avec boucle et DOMDocument ci-dessous.

function website_title($url) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   // some websites like Facebook need a user agent to be set.
   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36');
   $html = curl_exec($ch);
   curl_close($ch);

   $dom  = new DOMDocument;
   @$dom->loadHTML($html);

   $title = $dom->getElementsByTagName('title')->item('0')->nodeValue;
   return $title;
}

echo website_title('https://www.facebook.com/');

ci-dessus renvoie les éléments suivants: Bienvenue sur Facebook - Connexion, inscrivez-vous ou en savoir plus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top