More Related Content
PDF
PDF
PDF
jQuery Mobileカスタマイズ自由自在 v1.2 PDF
PDF
jQuery Mobileバレしないモバイルサイトの作り方 PDF
PDF
PDF
The master plan ofscaling a web application What's hot
PDF
PDF
jQuery Mobile 最新情報 & Tips PDF
脱コピペ!デザイナーにもわかるPHPとWP_Query KEY
PDF
PDF
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩 PDF
ODP
PDF
PDF
MT meets PHP - PHP conference Kansai 2013 PPTX
Magento meet up Tokyo#1 for Design KEY
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro PDF
PPTX
徳島OSS勉強会第四回 シラサギハンズオン 0925 PDF
PDF
PDF
KEY
PDF
PPTX
Similar to WordPressで提供するWeb API
KEY
PDF
「こんなサイトをこんなテーマ構成で作ってみました」Basercms 勉強会vol6 PDF
PDF
Movable TypeのWebアプリケーションフレームワークの基本 PDF
WTM53 phpフレームワーク いまさらcodeigniter PDF
PDF
PDF
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」 PDF
【Wordpress】LightBox風jQueryを使ってポップアップ上でカスタムフィールドを出力。 KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜 PDF
PDF
20091030cakephphandson 01 KEY
PPT
PDF
20091030cakephphandson 02 PDF
PDF
PPTX
PDF
a-blogcsm な寺子屋 2 in Okazaki PDF
More from Yuko Toriyama
PDF
PDF
5分でできる!WordPressでピンタレスト風テーマ PDF
PDF
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには? PDF
WordPress で構築する企業サイト 〜静的ページからCMSへ〜 PDF
WordPressで提供するWeb API
- 1.
- 2.
プロフィール 2 /25
• 株式会社ベクター
企画・デザイン部
• WordPress歴 4年
• 公式テーマ 配布
• WP-Furigana
ふりがなを自動入力するプラグイン
いままでに食べたお菓子
•いままでに食べたお菓子
- 3.
アジェンダ 3 /25
1. Web APIとは
2. 投稿データを取得
3. XMLを生成
4. 検索パラメータに対応
5. JSONで出力
6. まとめ
- 4.
- 5.
1. Web APIとは 5 /25
Web APIの例
Facebook API Google Maps API Twitter API
Yahoo! デベロッパーネットワーク 楽天ウェブサービス 顔ラボ WebAPI
- 6.
1. Web APIとは 6 /25
お菓子の虜 Web API
http://www.sysbird.jp/toriko/webapi/
- 7.
- 8.
2. 投稿データを取得 8 /25
投稿データ
*タイトル お菓子の名前
*本文 食べた感想
*カテゴリ スナック, チョコ, クッキー, 飴, せんべい
,
*タグ 激辛, カレー ポテトチップ, 地域限定など
カレー,
*カスタムフィールド 価格, メーカ, ふりがな
*添付ファイル お菓子の写真
*更新日
- 9.
2. 投稿データを取得 9 /25
WordPressから投稿データを取得
リクエストURL
リクエストURL(例)
http://example.com/api/
自分のサイト 他のサイト
WordPress
投 wp-
/wp-admin
稿
デ wp-
/wp-content
ー wp-
/wp-includes
タ 他のサイト
取 ・・・(
・・・(略)
得
/api
- 10.
2. 投稿データを取得 10 /25
/api/index.php
<?PHP
require_once(dirname(__FILE__) .'/../wp
(__FILE__) .'/../wp-load.php');
// WordPressのループ処理
のループ処理
$myposts = get_posts();
foreach($myposts as $post){
setup_postdata($post); // 1件の投稿
($post);
}
?>
- 11.
- 12.
3. XMLを生成 12 /25
投稿データをもとにDOM構造を作る
// DOMを作成
$dom = new DomDocument
DomDocument('1.0', 'utf-8');
$dom->formatOutput = true;
$xml = $dom->appendChild
appendChild(
$dom->createElement
createElement('okashinotoriko'));
- 13.
3. XMLを生成 13 /25
投稿データを子要素として追加
// WordPressのループ処理
$myposts = get_posts();
foreach($myposts as $post){
setup_postdata($post); // 1件の投稿
件の投稿
// itemという子要素を作成
$item = $xml->appendChild($dom
dom->createElement('item'));
// itemのなかに投稿IDを追加 を追加
$item->appendChild($dom->createElement
createElement('id', $post->ID));
// 続けて、提供したい項目を追加する
}
- 14.
3. XMLを生成 14 /25
提供したい項目の例
// タイトル
$item->appendChild($dom->createElement
createElement('name', get_the_title()));
//カスタムフィールド
$price = get_post_meta($post->ID , "
>ID "価格", true);
$item->appendChild($dom->createElement
createElement('price', $price));
// パーマリンク
$item->appendChild($dom->createElement
createElement('url', get_permalink()));
// 本文
$item->appendChild($dom->createElement
createElement(
‘comment', apply_filters('the_content get_the_content())));
the_content',
- 15.
3. XMLを生成 15 /25
// アイキャッチ
$thumbnail = '';
if ((function_exists('has_post_thumbnail &&
has_post_thumbnail'))
(has_post_thumbnail($result->postnumber {
postnumber)))
$thumbnail = get_the_post_thumbnail
get_the_post_thumbnail($post->ID, 'large');
if(!empty($thumbnail)){
if(preg_match_all('//i', $thumbnail, $match)){
',
$thumbnail = $match[2][0];
$item->appendChild(
createElement('image', $thumbnail));
$dom->createElement
}
}
}
- 16.
3. XMLを生成 16 /25
作成したDOMよりXMLを出力
// XML出力
header('Content-Type: text/
Type: text/xml;charset=UTF-8');
echo $dom->saveXML();
- 17.
3. XMLを生成 17 /25
レスポンス
<?xml version="1.0" encoding="utf-8"?>
<okashinotoriko>
<item>
<id>7804</id>
<name>キャラメルコーンあずきミルク味with水木しげる</name> </name>
<price>79</price>
<url>http://example.com/snack/caramelcornazuki/</url>
content/uploads/2012/12/7804.jpg</image>
<image>http://example.com/wp-content/uploads/2012/12/7804.jpg</image>
<comment><p>半年も前に買ってあったのを食べた。自宅で昼食のあとに甘いものが食べたく
半年も前に買ってあったのを食べた。自宅で昼食のあとに甘いものが食べたく(略)</p></comment>
</item>
<item>
<id>8100</id>
<name>チロル(ロイヤルクイーン)</name>
<price>32</price>
>http://example.com/chocolate/tirolroyalstrawberry/</url>
<url>http://example.com/chocolate/tirolroyalstrawberry/</url>
<image>http://example.com/wp-content/uploads/2012/12/8100.jpg</image>
content/uploads/2012/12/8100.jpg</image>
<comment><p>ロイヤルクイーンとはイチゴの新種だろうか?ブラックの包み紙にみずみずしい赤
ロイヤルクイーンとはイチゴの新種だろうか?ブラックの包み紙にみずみずしい赤(略)</p></comment>
</item>
<item>
<id>8092</id>
<name>ポテトチップスミルクキャラメル</name>
>http://example.com/snack/potatochipsmilkcaramel/</url>
<url>http://example.com/snack/potatochipsmilkcaramel/</url>
<image>http://example.com/wp34/wp-content/uploads/2012/12//8092.jpg</image>
content/uploads/2012/12//8092.jpg</image>
<comment><p>ぎざぎざカットの厚いポテチにあま~いキャラメル味。塩味なのかキャラメル味なの キャラメル味。塩味なのかキャラメル味なの(略)</p></comment>
</item>
</okashinotoriko>
- 18.
- 19.
4.検索パラメータに対応 19 /25
“hello”というキーワードで、
30件を取得したい場合
http://example.com/api/?keyword=hello&max=30
- 20.
4.検索パラメータに対応 20 /25
パラメータを取得
URLパラメータを取得
$param = array();
if(isset($_GET['max'])) {
// 取得件数が指定されている場合
$param['showposts'] = $_GET['max'];
']
}
if(isset($_GET['keyword'])) {
// 検索キーワードが指定されている場合
$param[‘s’] = mb_convert_encoding
mb_convert_encoding($_GET[‘keyword’],'UTF-8','auto');
}
- 21.
3.検索パラメータに対応 21 /25
ループ条件を設定する
$myposts = get_posts($param
param);
foreach($myposts as $post){
setup_postdata($post); // 1件の投稿
($post);
}
*カテゴリ
*年月
*開始位置
*取得順など…
- 22.
- 23.
5. JSONで出力 23 /25
PHPの関数で変換するだけ
// JSON出力
$xml_obj = simplexml_load_string
simplexml_load_string(
$dom->saveXML());
$encode = json_encode($xml_obj
xml_obj);
header(
"Content-Type: text/javascript charset=utf-8");
javascript;
echo "callback(" .$encode .")“;
- 24.
5. JSONで出力 24 /25
レスポンス
callback({"item":[{"id":"7804","name":"¥u30ad¥u30e3¥u30e9
u30e9¥u30e1¥u30eb¥u30b3¥u30fc¥u30f3¥u3042¥u305a¥u304d¥u
30df¥u30eb¥u30af¥u5473with¥u6c34¥u6728¥u3057¥u3052¥u308b","price":"79","url":"http:
u308b","price":"79","url":"http:¥/¥/example.com¥/snack¥/
caramelcornazuki¥/","image":"http:¥/¥/example.com¥/wp-
content¥/uploads¥/2012¥/12¥/7804.jpg","comment":{"p":"¥ ¥u534a¥u5e74¥u3082¥u524d¥u306b¥u8cb7¥u3063¥u3066¥u
3042¥u3063¥u305f¥u306e¥u3092¥u98df¥u3079¥u305f¥u3002 u3002¥u81ea¥u5b85¥u3067¥u663c¥u98df¥u306e¥u3042¥u3068¥
u306b¥u7518¥u3044¥u3082¥u306e¥u304c¥u98df¥u3079¥u305f u305f¥u304f(¥u7565)"}},{"id":"8100","name":"¥u30c1¥u30ed¥u
30eb(¥u30ed¥u30a4¥u30e4¥u30eb¥u30af¥u30a4¥u30fc¥u30f3)","price":"32","url":"http:
u30f3)","price":"32","url":"http:¥/¥/example.com¥/chocolate¥
/tirolroyalstrawberry¥/","image":"http:¥/¥/example.com¥/wpwp-
content¥/uploads¥/2012¥/12¥/8100.jpg","comment":{"p":"¥ ¥u30ed¥u30a4¥u30e4¥u30eb¥u30af¥u30a4¥u30fc¥u30f3¥u3
068¥u306f¥u30a4¥u30c1¥u30b4¥u306e¥u65b0¥u7a2e¥u3060 u3060¥u308d¥u3046¥u304b¥uff1f¥u30d6¥u30e9¥u30c3¥u30af¥u
306e¥u5305¥u307f¥u7d19¥u306b¥u307f¥u305a¥u307f¥u305a u305a¥u3057¥u3044¥u8d64(¥u7565)"}},{"id":"8092","name":"¥u3
0dd¥u30c6¥u30c8¥u30c1¥u30c3¥u30d7¥u30b9¥u30df¥u30eb u30eb¥u30af¥u30ad¥u30e3¥u30e9¥u30e1¥u30eb","url":"http:¥/
¥/example.com¥/snack¥/potatochipsmilkcaramel¥/","image":"http:
/","image":"http:¥/¥/example.com¥/wp34¥/wp-
content¥/uploads¥/2012¥/12¥/¥/8092.jpg","comment":{"p":"
/8092.jpg","comment":{"p":"¥u304e¥u3056¥u304e¥u3056¥u30ab¥u30c3¥u30c8¥u306e
¥u539a¥u3044¥u30dd¥u30c6¥u30c1¥u306b¥u3042¥u307e¥uff5e uff5e¥u3044¥u30ad¥u30e3¥u30e9¥u30e1¥u30eb¥u5473¥u30
02¥u5869¥u5473¥u306a¥u306e¥u304b¥u30ad¥u30e3¥u30e9 u30e9¥u30e1¥u30eb¥u5473¥u306a¥u306e(¥u7565)"}}]})
- 25.