Top Banner
WordPress鳥山 するWeb API 優子
25

WordPressで提供するWeb API

May 08, 2015

Download

Documents

Yuko Toriyama
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

まとめ