it-swarm.com.de

Wie bekomme ich das Titel-Tag einer externen Seite mit http api?

Was ist die beste Methode, um das Titel-Tag einer externen Seite mit der http-API abzurufen?

Mit dem folgenden Snippet wird der Body abgerufen, aber ich kann nicht die richtige Dokumentation zum Abrufen des Tags finden. : /

$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: Dieses Code-Snippet ruft sowohl den Screenshot als auch den Titel einer externen Seite ab (Nochmals vielen Dank an @Bainternet). Mit ein wenig Bearbeitung könnte dies eine einfache Möglichkeit sein, das Linkpost-Format anzuzeigen.

<?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

hier ist eine Funktion, die ich dafür habe:

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;
        }
    }

Verwendung:

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

Nun, Sie möchten die Antwort nicht printname__, sondern in einer Variablen speichern. Dann können Sie einen RegEx verwenden, um den Text in <title> und </title> zu finden.

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

Ihre $matches Variable wird dann ein Array sein. Verwenden Sie einfach $matches[0] und Sie erhalten den Titel-Tag.

Dieses Muster extrahiert <title>Your Title</title> aus der Seite:

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

Ich überlasse es Ihnen, den <title> und den </title> zu entfernen.

1
EAMann