Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

WordPressで提供するWeb API

9,192 views

Published on

WordPressで提供するWeb API

  1. 1. WordPressで提 するWeb API 提供 鳥山優子
  2. 2. プロフィール 2 /25• 株式会社ベクター 企画・デザイン部• WordPress歴 4年• 公式テーマ 配布• WP-Furigana ふりがなを自動入力するプラグイン いままでに食べたお菓子•いままでに食べたお菓子
  3. 3. アジェンダ 3 /251. Web APIとは2. 投稿データを取得3. XMLを生成4. 検索パラメータに対応5. JSONで出力6. まとめ
  4. 4. 4 /251. Web APIとは
  5. 5. 1. Web APIとは 5 /25Web APIの例 Facebook API Google Maps API Twitter APIYahoo! デベロッパーネットワーク 楽天ウェブサービス 顔ラボ WebAPI
  6. 6. 1. Web APIとは 6 /25お菓子の虜 Web APIhttp://www.sysbird.jp/toriko/webapi/
  7. 7. 7 /252. 投稿データを取得
  8. 8. 2. 投稿データを取得 8 /25投稿データ*タイトル お菓子の名前*本文 食べた感想*カテゴリ スナック, チョコ, クッキー, 飴, せんべい ,*タグ 激辛, カレー ポテトチップ, 地域限定など カレー,*カスタムフィールド 価格, メーカ, ふりがな*添付ファイル お菓子の写真*更新日
  9. 9. 2. 投稿データを取得 9 /25WordPressから投稿データを取得リクエストURLリクエストURL(例)http://example.com/api/ 自分のサイト 他のサイト WordPress 投 wp- /wp-admin 稿 デ wp- /wp-content ー wp- /wp-includes タ 他のサイト 取 ・・・( ・・・(略) 得 /api
  10. 10. 2. 投稿データを取得 10 /25/api/index.php<?PHPrequire_once(dirname(__FILE__) ./../wp (__FILE__) ./../wp-load.php);// WordPressのループ処理 のループ処理$myposts = get_posts();foreach($myposts as $post){ setup_postdata($post); // 1件の投稿 ($post);}?>
  11. 11. 11 /253. XMLを生成
  12. 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. 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. 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. 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. 16. 3. XMLを生成 16 /25作成したDOMよりXMLを出力// XML出力header(Content-Type: text/ Type: text/xml;charset=UTF-8);echo $dom->saveXML();
  17. 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. 18. 18 /254. 検索パラメータに対応
  19. 19. 4.検索パラメータに対応 19 /25“hello”というキーワードで、30件を取得したい場合http://example.com/api/?keyword=hello&max=30
  20. 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. 21. 3.検索パラメータに対応 21 /25ループ条件を設定する$myposts = get_posts($param param);foreach($myposts as $post){ setup_postdata($post); // 1件の投稿 ($post);}*カテゴリ*年月*開始位置*取得順など…
  22. 22. 22 /255. JSONで出力
  23. 23. 5. JSONで出力 23 /25PHPの関数で変換するだけ// 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. 24. 5. JSONで出力 24 /25レスポンスcallback({"item":[{"id":"7804","name":"¥u30ad¥u30e3¥u30e9 u30e9¥u30e1¥u30eb¥u30b3¥u30fc¥u30f3¥u3042¥u305a¥u304d¥u30df¥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¥u3042¥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¥u30eb(¥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¥u3068¥u306f¥u30a4¥u30c1¥u30b4¥u306e¥u65b0¥u7a2e¥u3060 u3060¥u308d¥u3046¥u304b¥uff1f¥u30d6¥u30e9¥u30c3¥u30af¥u306e¥u5305¥u307f¥u7d19¥u306b¥u307f¥u305a¥u307f¥u305a u305a¥u3057¥u3044¥u8d64(¥u7565)"}},{"id":"8092","name":"¥u30dd¥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¥u3002¥u5869¥u5473¥u306a¥u306e¥u304b¥u30ad¥u30e3¥u30e9 u30e9¥u30e1¥u30eb¥u5473¥u306a¥u306e(¥u7565)"}}]})
  25. 25. 25 /25*Web APIとして*他のシステムにデータ提供*サイト内でAjax 5. まとめ

×