web-dev-qa-db-fra.com

Comment obtenir la balise du titre d'une page externe avec http api?

Quelle est la meilleure méthode pour récupérer la balise de titre d'une page externe à l'aide de l'API http?

L'extrait ci-dessous aura le corps, mais je ne trouve pas la bonne documentation pour savoir comment obtenir le tag. : /

$url = 'http://wordpres.org';
$response = wp_remote_get( $url );
if( is_wp_error( $response ) ) {
   echo 'Something went wrong!';
} else {
print wp_remote_retrieve_body( $response );
}

Edit: Cet extrait de code reçoit à la fois la capture d'écran et le titre d'une page externe (Merci encore @Bainternet). Avec un peu de modification, cela pourrait être un moyen facile d’afficher le format de publication de lien.

<?php 
$content = get_the_content();
$url = strip_tags($content); //assumes only a url is in the_content
$width = '150';
$cleanurl = urlencode(clean_url($url));
$fullurl = 'http://s.wordpress.com/mshots/v1/' . $cleanurl . '?w=' . $width;

// return title tag of an external page
// http://wordpress.stackexchange.com/questions/19424/how-to-get-title-tag-of-an-external-page-with-http-api
function get_page_title($url){
    if( !class_exists( 'WP_Http' ) )
        include_once( ABSPATH . WPINC. '/class-http.php' );
    $request = new WP_Http;
    $result = $request->request( $url );
    if( is_wp_error( $result ) )
        return false;

    if( preg_match("#<title>(.+)<\/title>#iU", $result['body'], $t))  {
        return trim($t[1]);
    } else { 
return false; }
    }
$title = get_page_title($url);      

echo '<div class="grid_4 alpha"><a href="' . $url . '"><img src="' . $fullurl . '" width="' . $width .'px" /></a></div>'; 
echo '<div class="grid_10 omega"><h3>'; if ($title !== false){ echo $title;} echo '</h3><p>' . $content . '</p></div>';
echo '<div class="clear"></div>';
?>
2
torinagrippa

voici une fonction que j'ai pour cela:

function get_page_title($url){
        if( !class_exists( 'WP_Http' ) )
            include_once( ABSPATH . WPINC. '/class-http.php' );
        $request = new WP_Http;
        $result = $request->request( $url );
        if( is_wp_error( $result ) )
            return false;

        if( preg_match("#<title>(.+)<\/title>#iU", $result['body'], $t))  {
            return trim($t[1]);
        } else {
            return false;
        }
    }

Utilisation:

$title = get_page_title('http://www.google.com');
if ($title !== false){ echo $title;}
2
Bainternet

Eh bien, vous ne voulez pas print la réponse, vous voudrez la stocker dans une variable. Ensuite, vous pouvez utiliser un RegEx pour trouver le texte dans <title> et </title>.

preg_match( $pattern, wp_remote_retrieve_body( $response ), $matches );

Votre variable $matches sera alors un tableau. Utilisez simplement $matches[0] et vous aurez la balise de titre.

Ce modèle extraira <title>Your Title</title> de la page:

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

Je vous laisse le soin de supprimer les <title> et </title>.

1
EAMann