web-dev-qa-db-ja.com

Http apiで外部ページのタイトルタグを取得する方法?

Http apiを使用して外部ページのタイトルタグを取得するための最良の方法は何ですか?

以下のスニペットは本文を取得しますが、タグを取得する方法について正しいドキュメントを見つけることができません。 :/

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

編集:このコードスニペットは、外部ページのスクリーンショットとタイトルの両方を取得します(ありがとう@Bainternet)。ちょっとした編集でこれはリンクポストフォーマットを表示する簡単な方法であるかもしれません。

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

これは私がそのために持っている関数です:

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('http://www.google.com');
if ($title !== false){ echo $title;}
2
Bainternet

さて、あなたはレスポンスをprintしたくない、あなたはそれを変数に格納したいでしょう。それから、RegExを使って<title></title>の中のテキストを見つけます。

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

$matches変数は配列になります。 $matches[0]を使うだけでtitleタグができます。

このパターンは、ページから<title>Your Title</title>を抽出します。

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

<title></title>を削除するのはあなたに任せます。

1
EAMann