タグ: wp_remote_get

  • wp_remote_get は file_get_contents よりも応用できてよいですね【WordPress】

    wp_remote_get は file_get_contents よりも応用できてよいですね【WordPress】

    WordPressプラグイン開発で使う機会があったので覚え書き。

     

    たとえば。外部APIを使って取得したいデータがあるとき。

    PHPだと file_get_contents 関数を使うのがベターですかね。こんな風に。(json_decode の説明は割愛)

    <?php
    /**
     * Googleのはてブ数を取得するサンプル file_get_contents
     */
    $url = 'http://google.com';
    $hatena = json_decode( file_get_contents( 'http://api.b.st-hatena.com/entry.count?url=' . $url ) );
    echo $hatena;
    ?>
    で google.com のはてブ数が出力されます。

     

    これで何の問題もないんです。ただ、エラーが出たときの処理が必要になると途端にコードの量が増えてしまいます。

     

    そこで出てくるのが wp_remote_get という WordPress の関数

    とりあえず Codex を見る。

    wp_remote_get( $url, $args ); で使う。HTTP GET メソッドでURLを配列で返す関数。

    • $url …必須、取得したいURLを指定
    • $args …任意、ヘッダー情報やcookieの配列を指定したい場合に指定

    普通に使う分には $args はスルーして良さげ。

     

    wp_remote_get を使ってみる

    前述のサンプルコード file_get_contents を置き換えて取得してみる。

    外部phpからWordPressの関数を呼び出しますよ)

    <?php
    /**
     * Googleのはてブ数を取得するサンプル wp_remote_get
     */
    $url = 'http://google.com';
    $hatena = wp_remote_get( 'http://api.b.st-hatena.com/entry.count?url=' . $url );
    ?>
    <pre><?php print_r($hatena); ?></pre>

    ↑ のコードで返ってくるのがこれ ↓

    Array
    (
        [headers] => Array
            (
                [server] => nginx/0.8.52
                [date] => Wed, 12 Jun 2013 14:09:18 GMT
                [content-type] => text/plain
                [cache-control] => max-age=1800
                [expires] => Wed, 12 Jun 2013 14:25:14 GMT
                [content-length] => 2
                [x-varnish] => 3020424506 3015334553
                [age] => 844
                [via] => 1.1 varnish
                [connection] => close
            )
    
        [body] => 74
        [response] => Array
            (
                [code] => 200
                [message] => OK
            )
    
        [cookies] => Array
            (
            )
    
        [filename] => 
    )

    [body] に $url の内容が格納されて、各々のステータスもそれぞれ配列に入ってる。

    ということでエラー時の振り分けが簡単にできるんですな。

    まとめると、

    <?php
    /**
     * Googleのはてブ数を取得するサンプル wp_remote_get
     */
    $url = 'http://google.com';
    $hatena = wp_remote_get( 'http://api.b.st-hatena.com/entry.count?url=' . $url );
    // エラー振り分け
    if ( ! is_wp_error( $hatena ) && $hatena['response']['code'] === 200 ) {
    	echo $hatena['body']; // はてブ数
    } else {
    	// エラー時の処理
    }
    ?>
    <!-- 配列ごと出力 -->
    <pre><?php print_r( $hatena ); ?></pre>

    っという感じで使える、と。

     

    ホホまとめ

    プラグインを作りながら関数を調べながら…ってやっていると知らないことだらけで下書きが増えまくりです。

    調べてやってみて、さらに記事にする、という手順を踏むと間違いなく身についてるなぁと実感しています。