wordpressで提供するweb api

25
WordPress鳥山 するWeb API 優子

Upload: yuko-toriyama

Post on 08-May-2015

7.479 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: WordPressで提供するWeb API

WordPressで提鳥 山提供するWeb API

優 子

Page 2: WordPressで提供するWeb API

プロフィール

• 株式会社ベクター企画・デザイン部

• WordPress歴 4年• 公式テーマ 配布• WP-Furigana

ふりがなを自動入力するプラグイン

•いままでに食べたお菓子

2 /25

ふりがなを自動入力するプラグイン

2145種いままでに食べたお菓子

Page 3: WordPressで提供するWeb API

アジェンダ

1. Web APIとは2. 投稿データを取得3. XMLを生成4. 検索パラメータに対応5. JSONで出力6. まとめ

3 /25

投稿データを取得

検索パラメータに対応

Page 4: WordPressで提供するWeb API

1. Web API

4 /25

1. Web APIとは

Page 5: WordPressで提供するWeb API

1. Web APIとは

Web APIの例

FacebookFacebookFacebookFacebook APIAPIAPIAPI Google Maps APIGoogle Maps APIGoogle Maps APIGoogle Maps API

Yahoo!Yahoo!Yahoo!Yahoo! デベロッパーネットワークデベロッパーネットワークデベロッパーネットワークデベロッパーネットワーク 楽天ウェブサービス楽天ウェブサービス楽天ウェブサービス楽天ウェブサービス

5 /25

Twitter APITwitter APITwitter APITwitter APIGoogle Maps APIGoogle Maps APIGoogle Maps APIGoogle Maps API

楽天ウェブサービス楽天ウェブサービス楽天ウェブサービス楽天ウェブサービス 顔ラボ顔ラボ顔ラボ顔ラボ WebAPIWebAPIWebAPIWebAPI

Page 6: WordPressで提供するWeb API

1. Web APIとは

お菓子の虜 Web APIhttp://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/

6 /25

Web APIhttp://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/http://www.sysbird.jp/toriko/webapi/

WordPressで作ってみた!

Page 7: WordPressで提供するWeb API

2. 投稿データ

7 /25

投稿データを取得

Page 8: WordPressで提供するWeb API

2. 投稿データを取得

*タイトル*本文*カテゴリ*タグ*カスタムフィールド*添付ファイル*更新日

投稿データ

激辛, カレースナック,

8 /25

お菓子の名前

カスタムフィールドカレー, ポテトチップ, 地域限定など

, チョコ, クッキー, 飴, せんべい

価格, メーカ, ふりがなお菓子の写真

食べた感想

Page 9: WordPressで提供するWeb API

WordPressから2. 投稿データを取得

リクエストリクエストリクエストリクエストURLURLURLURL((((例例例例))))

http://example.com/api/http://example.com/api/http://example.com/api/http://example.com/api/

WordPressWordPressWordPressWordPress////wpwpwpwp----adminadminadminadmin////wpwpwpwp----contentcontentcontentcontent////wpwpwpwp----includesincludesincludesincludes・・・・・・・・・・・・((((略略略略))))

自分のサイト

////apiapiapiapi

投稿投稿投稿投稿データ

データ

データ

データ取得取得取得取得

9 /25

から投稿データを取得

他のサイト

他のサイト

Page 10: WordPressで提供するWeb API

<?PHPrequire_once(dirname(__FILE__) .'/../wp

// WordPressのループ処理$myposts = get_posts();foreach($myposts as $post){

setup_postdata($post); }?>

2. 投稿データを取得

/api/index.php

10 /25

(__FILE__) .'/../wp-load.php');

のループ処理

as $post){($post); // 1件の投稿

Page 11: WordPressで提供するWeb API

3. XML

11 /25

3. XMLを生成

Page 12: WordPressで提供するWeb API

投稿データをもとに3. XMLを生成

// DOMを作成$dom = new DomDocument$dom->formatOutput = true;$xml = $dom->appendChild

$dom->createElement

ルートの

12 /25

にDOM構造を作る

DomDocument('1.0', 'utf-8');= true;

appendChild(createElement('okashinotoriko'));

ルートの要素

Page 13: WordPressで提供するWeb API

// WordPressのループ処理$myposts = get_posts();foreach($myposts as $post){

setup_postdata($post); // 1件の投稿

// itemという子要素を作成$item = $xml->appendChild($dom

// itemのなかに投稿IDを追加$item->appendChild($dom->createElement

// 続けて、提供したい項目を追加する}

3. XMLを生成

投稿データを子要素13 /25

件の投稿

dom->createElement('item'));

を追加createElement('id', $post->ID));

続けて、提供したい項目を追加する

子要素として追加1件の投稿要素

投稿の項目要素

Page 14: WordPressで提供するWeb API

//カスタムフィールド$price = get_post_meta($post->ID , "$item->appendChild($dom->createElement

3. XMLを生成

提供したい項目の

// パーマリンク$item->appendChild($dom->createElement

// 本文$item->appendChild($dom->createElement

‘comment', apply_filters('the_content

// タイトル$item->appendChild($dom->createElement

14 /25

>ID , "価格", true);createElement('price', $price));

の例

createElement('url', get_permalink()));

createElement(the_content', get_the_content())));

createElement('name', get_the_title()));

Page 15: WordPressで提供するWeb API

// アイキャッチ$thumbnail = '';if ((function_exists('has_post_thumbnail(has_post_thumbnail($result->postnumber

$thumbnail = get_the_post_thumbnailif(!empty($thumbnail)){

if(preg_match_all('//i', $thumbnail, $match)){$thumbnail = $match[2][0];$item->appendChild(

$dom->createElement}

}}

3. XMLを生成 15 /25

has_post_thumbnail')) && postnumber))) {

get_the_post_thumbnail($post->ID, 'large');

', $thumbnail, $match)){

createElement('image', $thumbnail));

src属性のみ追加

Page 16: WordPressで提供するWeb API

3. XMLを生成

作成したDOMより// XML出力header('Content-Type: text/echo $dom->saveXML();

16 /25

よりXMLを出力

Type: text/xml;charset=UTF-8');

Web APIできた!

Page 17: WordPressで提供するWeb API

3. XMLを生成

<?xml version="1.0" encoding="utf-8"?><okashinotoriko><item>

<id>7804</id><name>キャラメルコーンあずきミルク味with水木しげる</name><price>79</price><url>http://example.com/snack/caramelcornazuki/</url><image>http://example.com/wp-content/uploads/2012/12/7804.jpg</image><comment><p>半年も前に買ってあったのを食べた。自宅で昼食のあとに甘いものが食べたく

</item><item>

<id>8100</id><name>チロル(ロイヤルクイーン)</name><price>32</price><url>http://example.com/chocolate/tirolroyalstrawberry/</url><image>http://example.com/wp-content/uploads/2012/12/8100.jpg</image><comment><p>ロイヤルクイーンとはイチゴの新種だろうか?ブラックの包み紙にみずみずしい赤

</item><item>

<id>8092</id><name>ポテトチップスミルクキャラメル</name><url>http://example.com/snack/potatochipsmilkcaramel/</url><image>http://example.com/wp34/wp-content/uploads/2012/12//8092.jpg</image><comment><p>ぎざぎざカットの厚いポテチにあま~いキャラメル味。塩味なのかキャラメル味なの

</item></okashinotoriko>

レスポンス17 /25

WebAPIが完成

</name>

content/uploads/2012/12/7804.jpg</image>半年も前に買ってあったのを食べた。自宅で昼食のあとに甘いものが食べたく(略)</p></comment>

>http://example.com/chocolate/tirolroyalstrawberry/</url>content/uploads/2012/12/8100.jpg</image>

ロイヤルクイーンとはイチゴの新種だろうか?ブラックの包み紙にみずみずしい赤(略)</p></comment>

>http://example.com/snack/potatochipsmilkcaramel/</url>content/uploads/2012/12//8092.jpg</image>

キャラメル味。塩味なのかキャラメル味なの(略)</p></comment>

Page 18: WordPressで提供するWeb API

4. 検索パラメータ

18 /25

パラメータに対応

Page 19: WordPressで提供するWeb API

4.検索パラメータに対応

http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30

“hello”というキーワード30件を取得したい

19 /25

http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30http://example.com/api/?keyword=hello&max=30

キーワードで、したい場合

リクエストリクエストリクエストリクエストURLURLURLURLにににに

パラメータをパラメータをパラメータをパラメータを追加追加追加追加

Page 20: WordPressで提供するWeb API

4.検索パラメータに対応

URLパラメータを取得$param = array();

if(isset($_GET['max'])) {// 取得件数が指定されている場合$param['showposts'] = $_GET['max'];

}

if(isset($_GET['keyword'])) {// 検索キーワードが指定されている場合$param[‘s’] = mb_convert_encoding

}

20 /25

パラメータを取得

取得件数が指定されている場合'] = $_GET['max'];

検索キーワードが指定されている場合mb_convert_encoding($_GET[‘keyword’],'UTF-8','auto');

Page 21: WordPressで提供するWeb API

3.検索パラメータに対応

ループ条件を設定$myposts = get_posts($paramforeach($myposts as $post){

setup_postdata($post); }

*カテゴリ*年月*開始位置*取得順など…

21 /25

設定するparam);

as $post){($post); // 1件の投稿

get_postsget_postsget_postsget_posts()()()()に指定できるに指定できるに指定できるに指定できるパラメータならパラメータならパラメータならパラメータならなんでもなんでもなんでもなんでも

Page 22: WordPressで提供するWeb API

5. JSON

22 /25

5. JSONで出力

Page 23: WordPressで提供するWeb API

5. JSONで出力

// JSON出力$xml_obj = simplexml_load_string

$encode = json_encode($xml_objheader(

"Content-Type: text/javascriptecho "callback(" .$encode .")“;

PHPの関数で変換23 /25

simplexml_load_string($dom->saveXML());

xml_obj);

javascript; charset=utf-8");echo "callback(" .$encode .")“;

変換するだけ

Page 24: WordPressで提供するWeb API

5. JSONで出力

callback({"item":[{"id":"7804","name":"¥u30ad¥u30e3¥u30e930df¥u30eb¥u30af¥u5473with¥u6c34¥u6728¥u3057¥u3052¥u308b","price":"79","url":"http:caramelcornazuki¥/","image":"http:¥/¥/example.com¥/wp-content¥/uploads¥/2012¥/12¥/7804.jpg","comment":{"p":"¥3042¥u3063¥u305f¥u306e¥u3092¥u98df¥u3079¥u305f¥u3002u306b¥u7518¥u3044¥u3082¥u306e¥u304c¥u98df¥u3079¥u305f30eb(¥u30ed¥u30a4¥u30e4¥u30eb¥u30af¥u30a4¥u30fc¥u30f3)","price":"32","url":"http:/tirolroyalstrawberry¥/","image":"http:¥/¥/example.com¥/wpcontent¥/uploads¥/2012¥/12¥/8100.jpg","comment":{"p":"¥068¥u306f¥u30a4¥u30c1¥u30b4¥u306e¥u65b0¥u7a2e¥u3060306e¥u5305¥u307f¥u7d19¥u306b¥u307f¥u305a¥u307f¥u305a0dd¥u30c6¥u30c8¥u30c1¥u30c3¥u30d7¥u30b9¥u30df¥u30eb¥/example.com¥/snack¥/potatochipsmilkcaramel¥/","image":"http:content¥/uploads¥/2012¥/12¥/¥/8092.jpg","comment":{"p":"¥u539a¥u3044¥u30dd¥u30c6¥u30c1¥u306b¥u3042¥u307e¥uff5e02¥u5869¥u5473¥u306a¥u306e¥u304b¥u30ad¥u30e3¥u30e9

レスポンス24 /25

u30e9¥u30e1¥u30eb¥u30b3¥u30fc¥u30f3¥u3042¥u305a¥u304d¥uu308b","price":"79","url":"http:¥/¥/example.com¥/snack¥/

¥u534a¥u5e74¥u3082¥u524d¥u306b¥u8cb7¥u3063¥u3066¥uu3002¥u81ea¥u5b85¥u3067¥u663c¥u98df¥u306e¥u3042¥u3068¥

u305f¥u304f(¥u7565)"}},{"id":"8100","name":"¥u30c1¥u30ed¥uu30f3)","price":"32","url":"http:¥/¥/example.com¥/chocolate¥

wp-¥u30ed¥u30a4¥u30e4¥u30eb¥u30af¥u30a4¥u30fc¥u30f3¥u3

u3060¥u308d¥u3046¥u304b¥uff1f¥u30d6¥u30e9¥u30c3¥u30af¥uu305a¥u3057¥u3044¥u8d64(¥u7565)"}},{"id":"8092","name":"¥u3u30eb¥u30af¥u30ad¥u30e3¥u30e9¥u30e1¥u30eb","url":"http:¥/

/","image":"http:¥/¥/example.com¥/wp34¥/wp-/8092.jpg","comment":{"p":"¥u304e¥u3056¥u304e¥u3056¥u30ab¥u30c3¥u30c8¥u306e

uff5e¥u3044¥u30ad¥u30e3¥u30e9¥u30e1¥u30eb¥u5473¥u30u30e9¥u30e1¥u30eb¥u5473¥u306a¥u306e(¥u7565)"}}]})

Ajaxで使える!

Page 25: WordPressで提供するWeb API

*Web APIとして*他のシステムにデータ提供*サイト内でAjax

5. まとめ

25 /25

としてデータ提供

Ajax

まとめ