SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
WordPressで提 するWeb API
          提供

      鳥山優子
プロフィール               2 /25


• 株式会社ベクター
  企画・デザイン部
• WordPress歴 4年
• 公式テーマ 配布
• WP-Furigana
  ふりがなを自動入力するプラグイン

 いままでに食べたお菓子
•いままでに食べたお菓子
アジェンダ             3 /25



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




1. Web APIとは
1. Web APIとは                                           5 /25


Web APIの例



    Facebook API      Google Maps API    Twitter API




Yahoo! デベロッパーネットワーク   楽天ウェブサービス         顔ラボ WebAPI
1. Web APIとは                           6 /25


お菓子の虜 Web API
http://www.sysbird.jp/toriko/webapi/
7 /25




2. 投稿データを取得
2. 投稿データを取得                  8 /25


投稿データ
*タイトル                    お菓子の名前
*本文                       食べた感想

*カテゴリ   スナック, チョコ, クッキー, 飴, せんべい
             ,

*タグ    激辛, カレー ポテトチップ, 地域限定など
           カレー,

*カスタムフィールド         価格, メーカ, ふりがな
*添付ファイル                  お菓子の写真
*更新日
2. 投稿データを取得                   9 /25


WordPressから投稿データを取得
リクエストURL
リクエストURL(例)
http://example.com/api/
        自分のサイト            他のサイト
       WordPress
  投      wp-
        /wp-admin
  稿
  デ      wp-
        /wp-content
  ー      wp-
        /wp-includes
  タ                       他のサイト
 取      ・・・(
        ・・・(略)
 得
        /api
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 /25




3. XMLを生成
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'));
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));

    // 続けて、提供したい項目を追加する
}
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',
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
        }
    }
}
3. XMLを生成                                     16 /25


作成したDOMよりXMLを出力
// XML出力
header('Content-Type: text/
                Type: text/xml;charset=UTF-8');
echo $dom->saveXML();
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 /25




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


“hello”というキーワードで、
30件を取得したい場合
http://example.com/api/?keyword=hello&max=30
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');
}
3.検索パラメータに対応                         21 /25


ループ条件を設定する
$myposts = get_posts($param
                      param);
foreach($myposts as $post){
   setup_postdata($post); // 1件の投稿
                 ($post);
}

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




5. JSONで出力
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 .")“;
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 /25




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



     5. まとめ

Más contenido relacionado

La actualidad más candente

MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013純生 野田
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tipsyoshikawa_t
 
やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!純生 野田
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_QueryHidekazu Ishikawa
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925Yu Ito
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説Cherry Pie Web
 
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩Chieko Aihara
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門Yuji Nojima
 
Word press34
Word press34Word press34
Word press34BREN
 
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocroYuuki Kuroda
 
Wordpressで自分好みのテーマを作る
Wordpressで自分好みのテーマを作るWordpressで自分好みのテーマを作る
Wordpressで自分好みのテーマを作るTakashi Uemura
 

La actualidad más candente (20)

MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
 
Inside Movable Type
Inside Movable TypeInside Movable Type
Inside Movable Type
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!
 
WordPressとjQuery
WordPressとjQueryWordPressとjQuery
WordPressとjQuery
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
 
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
Word press34
Word press34Word press34
Word press34
 
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
 
Wordpressで自分好みのテーマを作る
Wordpressで自分好みのテーマを作るWordpressで自分好みのテーマを作る
Wordpressで自分好みのテーマを作る
 
jQuery Mobileの基礎
jQuery Mobileの基礎jQuery Mobileの基礎
jQuery Mobileの基礎
 

Similar a WordPressで提供するWeb API

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめるShuhei Iitsuka
 
Launch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPressLaunch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPressKite Koga
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」タカシ キタジマ
 
Css Nite Word Press
Css Nite Word PressCss Nite Word Press
Css Nite Word PressWeb nist
 
SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2Nobuhiro Nakajima
 
Drupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込むDrupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込むiPride Co., Ltd.
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話Hidetaka Okamoto
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構katanyan
 

Similar a WordPressで提供するWeb API (20)

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
behatで始めるBDD
behatで始めるBDDbehatで始めるBDD
behatで始めるBDD
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
Launch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPressLaunch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPress
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
 
Css Nite Word Press
Css Nite Word PressCss Nite Word Press
Css Nite Word Press
 
SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2
 
Drupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込むDrupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込む
 
test
testtest
test
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 

Más de Yuko Toriyama

好きなこと続けよう!エンゼルパイから始まった
好きなこと続けよう!エンゼルパイから始まった好きなこと続けよう!エンゼルパイから始まった
好きなこと続けよう!エンゼルパイから始まったYuko Toriyama
 
JavaScriptでできる電力使用状況グラフ
JavaScriptでできる電力使用状況グラフJavaScriptでできる電力使用状況グラフ
JavaScriptでできる電力使用状況グラフYuko Toriyama
 
5分でできる!WordPressでピンタレスト風テーマ
5分でできる!WordPressでピンタレスト風テーマ5分でできる!WordPressでピンタレスト風テーマ
5分でできる!WordPressでピンタレスト風テーマYuko Toriyama
 
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?Yuko Toriyama
 
WordPressでパスワード保護
WordPressでパスワード保護WordPressでパスワード保護
WordPressでパスワード保護Yuko Toriyama
 
WordPress で構築する企業サイト 〜静的ページからCMSへ〜
WordPress で構築する企業サイト 〜静的ページからCMSへ〜WordPress で構築する企業サイト 〜静的ページからCMSへ〜
WordPress で構築する企業サイト 〜静的ページからCMSへ〜Yuko Toriyama
 

Más de Yuko Toriyama (6)

好きなこと続けよう!エンゼルパイから始まった
好きなこと続けよう!エンゼルパイから始まった好きなこと続けよう!エンゼルパイから始まった
好きなこと続けよう!エンゼルパイから始まった
 
JavaScriptでできる電力使用状況グラフ
JavaScriptでできる電力使用状況グラフJavaScriptでできる電力使用状況グラフ
JavaScriptでできる電力使用状況グラフ
 
5分でできる!WordPressでピンタレスト風テーマ
5分でできる!WordPressでピンタレスト風テーマ5分でできる!WordPressでピンタレスト風テーマ
5分でできる!WordPressでピンタレスト風テーマ
 
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?
カスタム投稿タイプでお菓子メーカーを登録して今日食べたお菓子にひもづけるには?
 
WordPressでパスワード保護
WordPressでパスワード保護WordPressでパスワード保護
WordPressでパスワード保護
 
WordPress で構築する企業サイト 〜静的ページからCMSへ〜
WordPress で構築する企業サイト 〜静的ページからCMSへ〜WordPress で構築する企業サイト 〜静的ページからCMSへ〜
WordPress で構築する企業サイト 〜静的ページからCMSへ〜
 

WordPressで提供するWeb API

  • 1. WordPressで提 するWeb API 提供 鳥山優子
  • 2. プロフィール 2 /25 • 株式会社ベクター 企画・デザイン部 • WordPress歴 4年 • 公式テーマ 配布 • WP-Furigana ふりがなを自動入力するプラグイン いままでに食べたお菓子 •いままでに食べたお菓子
  • 3. アジェンダ 3 /25 1. Web APIとは 2. 投稿データを取得 3. XMLを生成 4. 検索パラメータに対応 5. JSONで出力 6. まとめ
  • 4. 4 /25 1. Web APIとは
  • 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/
  • 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); } ?>
  • 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>
  • 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); } *カテゴリ *年月 *開始位置 *取得順など…
  • 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)"}}]})