wp_remote_get のススメ

WordPress プラグインで外部サービスのAPIを叩く場合、以前は Snoopy 等のライブラリを include して行っていました。
# Snoopy が WordPress コアソースに含まれていたため。

しかし、WordPress 2.7 以降では wp_remote_get() という関数が追加されたため、もっぱらこれを使っています。
例えば Topsy の API を使って、パーマリンクに対して言及されたツイートを取得するには以下のようなコードを書けば実現できます。

$response = wp_remote_get('http://otter.topsy.com/trackbacks.json?url='.rawurlencode(get_permalink()).'&tracktype=tweet&perpage=50');
if( !is_wp_error( $response ) && $response["response"]["code"] === 200 ) {
	$response_body = json_decode($response["body"]);
	var_dump($response_body->response->list[0]);
} else {
	// Handle error here.
}

簡単でしょ?

以下、簡単に wp_remote_get の使い方

サンプルコードのように Topsy の API をたたいてみましょう。

$response = wp_remote_get('http://otter.topsy.com/trackbacks.json?url='.rawurlencode('https://dogmap.jp/').'&tracktype=tweet&perpage=50');

すると、以下のような連想配列が返ってきます。

array(4) {
	["headers"]=> array(16) {
		["cache-control"]=> string(9) "max-age=5"
		["content-type"]=> string(31) "application/json; charset=utf-8"
		["expires"]=> string(29) "Tue, 26 Apr 2011 02:09:25 GMT"
		["last-modified"]=> string(29) "Tue, 26 Apr 2011 02:09:20 GMT"
		["server"]=> string(15) "lighttpd/1.4.26"
		["content-length"]=> string(4) "7289"
		["date"]=> string(29) "Tue, 26 Apr 2011 02:09:21 GMT"
		["x-varnish"]=> string(10) "1510603957"
		["age"]=> string(1) "0"
		["via"]=> string(11) "1.1 varnish"
		["x-served-by"]=> string(5) "ps150"
		["x-cache"]=> string(4) "MISS"
		["x-ratelimit-limit"]=> string(5) "10000"
		["x-ratelimit-remaining"]=> string(4) "9975"
		["x-ratelimit-reset"]=> string(10) "1303786747"
		["connection"]=> string(5) "close"
	}
	["body"]=> string(7289) "{"request":{"parameters":{"tracktype":"tweet","url":"https://dogmap.jp/","perpage":"50"},"response_type":"json","resource":"trackbacks","url":"http://otter.topsy.com/trackbacks.json?perpage=50&tracktype=tweet&url=http%3A%2F%2Fdogmap.jp%2F"},"response":{"page":1,"trackback_total":10,"total":10,"perpage":50,"last_offset":10,"topsy_trackback_url":"http://topsy.com/dogmap.jp/","hidden":0,"list":[{"permalink_url":"http://twitter.com/wokamoto/status/58676489687805952","date":1302824539,"content":"@yukiejp 自分のサイトは自分でやってるけど、既存テーマのカスタマイズだよ。https://dogmap.jp/ http://shot.dogmap.jp/","date_alpha":"11 days ago","author":{"name":"wokamoto","url":"http://twitter.com/wokamoto","nick":"wokamoto","topsy_author_url":"http://topsy.com/twitter/wokamoto?utm_source=otter","photo_url":"http://a1.twimg.com/profile_images/1295842021/profile05_normal.jpg","influence_level":6},"type":"tweet","highlight":"@yukiejp 自分のサイトは自分でやってるけど、既存テーマのカスタマイズだよ。https://dogmap.jp/ http://shot.dogmap.jp/ "},{"permalink_url":"http://twitter.com/wokamoto/status/56372771340550144","date":1302275290,"content":"@understandard https://dogmap.jp/ も消して相対URLにすることで、さらに姑息にダイエットしてるんだぜ。","date_alpha":"17 days ago","author":{"name":"wokamoto","url":"http://twitter.com/wokamoto","nick":"wokamoto","topsy_author_url":"http://topsy.com/twitter/wokamoto?utm_source=otter","photo_url":"http://a1.twimg.com/profile_images/1295842021/profile05_normal.jpg","influence_level":6},"type":"tweet","highlight":"@understandard https://dogmap.jp/ も消して相対URLにすることで、さらに姑息にダイエットしてるんだぜ。 "},{"permalink_url":"http://twitter.com/understandard/status/53322260081147904","date":1301547992,"content":"@yat8823jp サイトはこれ→ https://dogmap.jp/ プラグイン一覧はこれ→ https://dogmap.jp/plugins/","date_alpha":"26 days ago","author":{"name":"Jun Sugimoto","url":"http://twitter.com/understandard","nick":"understandard","topsy_author_url":"http://topsy.com/twitter/understandard?utm_source=otter","photo_url":"http://a3.twimg.com/profile_images/1264630787/understandard_normal.jpg"},"type":"tweet","highlight":"@yat8823jp サイトはこれ→ https://dogmap.jp/ プラグイン一覧はこれ→ https://dogmap.jp/plugins/ "},{"permalink_url":"http://twitter.com/soraiy/status/48592406924374017","date":1300420307,"content":"dogmap.jp さんサイドバーに zenback 置いてて良い使い方ですね! → dogmap.jp https://dogmap.jp/","date_alpha":"Mar 18, 2011","author":{"name":"そらいっち","url":"http://twitter.com/soraiy","nick":"soraiy","topsy_author_url":"http://topsy.com/twitter/soraiy?utm_source=otter","photo_url":"http://a3.twimg.com/profile_images/1318721851/sorai2_normal.png"},"type":"tweet","highlight":"dogmap.jp さんサイドバーに zenback 置いてて良い使い方ですね! → dogmap.jp https://dogmap.jp/ "},{"permalink_url":"http://twitter.com/takuyafuruyama/status/43984183261016064","date":1299321621,"content":"ワードプレスの詳しい事が書いてありますよ dogmap.jp http://bit.ly/fLw0PS","date_alpha":"Mar 5, 2011","author":{"name":"古山 卓也","url":"http://twitter.com/takuyafuruyama","nick":"takuyafuruyama","topsy_author_url":"http://topsy.com/twitter/takuyafuruyama?utm_source=otter","photo_url":"http://a0.twimg.com/profile_images/1241979913/profile_normal.jpg"},"type":"tweet","highlight":"ワードプレスの詳しい事が書いてありますよ dogmap.jp http://bit.ly/fLw0PS "},{"permalink_url":"http://twitter.com/s64pontal/status/33195061709643776","date":1296749294,"content":"Web Trend : dogmap.jp http://goo.gl/fb/WPMEg","date_alpha":"Feb 3, 2011","author":{"name":"Pontal Home(BOT)","url":"http://twitter.com/s64pontal","nick":"s64pontal","topsy_author_url":"http://topsy.com/twitter/s64pontal?utm_source=otter","photo_url":"http://a2.twimg.com/profile_images/1126139805/Pontal_1__normal.png"},"type":"tweet","highlight":"Web Trend : dogmap.jp http://goo.gl/fb/WPMEg "},{"permalink_url":"http://twitter.com/wokamoto/status/12721209582026752","date":1291867947,"content":"@kai4den APC 入れたり、好きなようにチューニングできるよ。さくらのスタンダードで動作してるのが http://blog.dogmap.jp/ VPS で動作してるのが https://dogmap.jp/ ほぼ同じコンテンツだけど、速度の差は歴然です。","date_alpha":"Dec 9, 2010","author":{"name":"wokamoto","url":"http://twitter.com/wokamoto","nick":"wokamoto","topsy_author_url":"http://topsy.com/twitter/wokamoto?utm_source=otter","photo_url":"http://a1.twimg.com/profile_images/1295842021/profile05_normal.jpg","influence_level":6},"type":"tweet","highlight":"@kai4den APC 入れたり、好きなようにチューニングできるよ。さくらのスタンダードで動作してるのが http://blog.dogmap.jp/ VPS で動作してるのが https://dogmap.jp/ ほぼ同じコンテンツだけど、速度の差は歴然です。 "},{"permalink_url":"http://twitter.com/evian/status/13232871322","date":1272782640,"content":"この辺りをご参考に。中の人のブログです。http://www.dogmap.jp/ RT @suzuki_satoshi: WordCamp(wordpressのイベント)用システムがwordpressで出来ているんだが、改造っぷりがハンパない。どうなってんだ、これw","date_alpha":"May 2, 2010","author":{"name":"海老庵","url":"http://twitter.com/evian","nick":"evian","topsy_author_url":"http://topsy.com/twitter/evian?utm_source=otter","photo_url":"http://a1.twimg.com/profile_images/1295407508/ti-tan_3k_normal.png","influence_level":7},"type":"tweet","highlight":"この辺りをご参考に。中の人のブログです。http://www.dogmap.jp/ RT @suzuki_satoshi: WordCamp(wordpressのイベント)用システムがwordpressで出来ているんだが、改造っぷりがハンパない。どうなってんだ、これw "},{"permalink_url":"http://twitter.com/wokamoto/status/5465378046","date":1257468438,"content":"@yutacar にいがったーのサイトってURLは?私の所 ( https://dogmap.jp/ ) も、さくらで WordPress だけど、特に問題ないっす。","date_alpha":"Nov 6, 2009","author":{"name":"wokamoto","url":"http://twitter.com/wokamoto","nick":"wokamoto","topsy_author_url":"http://topsy.com/twitter/wokamoto?utm_source=otter","photo_url":"http://a1.twimg.com/profile_images/1295842021/profile05_normal.jpg","influence_level":6},"type":"tweet","highlight":"@yutacar にいがったーのサイトってURLは?私の所 ( https://dogmap.jp/ ) も、さくらで WordPress だけど、特に問題ないっす。 "},{"permalink_url":"http://twitter.com/binsan/status/2164427891","date":1244980594,"content":"@wokamoto https://dogmap.jp/\n問題なく速いけどなぁ〜","date_alpha":"Jun 14, 2009","author":{"name":"yutaka","url":"http://twitter.com/binsan","nick":"binsan","topsy_author_url":"http://topsy.com/twitter/binsan?utm_source=otter","photo_url":"http://a3.twimg.com/profile_images/1174473549/winterbin_normal.jpg"},"type":"tweet","highlight":"@wokamoto https://dogmap.jp/\n問題なく速いけどなぁ〜 "}],"offset":0} } "
	["response"]=> array(2) {
		["code"]=> int(200)
		["message"]=> string(2) "OK"
	}
	["cookies"]=> array(0) { }
}
  • headers: HTTP ヘッダー
  • body: レスポンスボディ
  • response: HTTP レスポンスコード(200 OK とか 404 Not Found とか)
  • cookies: cookie

$response["response"]["code"] を見て200が返ってきてたら、後続処理やれば良いですね。

使い易いんでプラグイン開発する時は、使ってやってください!

wp_remote_get のススメ」への1件のフィードバック

  1. ピンバック: Windows Azure で WordPress を動作させる : dogmap.jp

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください