SlideShare a Scribd company logo
S
wonderdriving.com
ブログメディアにおける
Data APIの活用について
ワンダーツー株式会社
上野初仁
1
本日の内容
S 自己紹介(個人、会社)
S wonderdriving.comとは
S Data APIとwonderdriving.com
S 人気記事ランキングスクリプト
S アセット登録スクリプト
S Data API 2.0対応
S 今後
2
S
発表者 自己紹介
3
上野初仁 a.k.a. @uehatsu
S twitter : @uehatsu
S 現 Wonder2 Inc. エンジニア
S UNIX, Apache, MySQL, Perl, PHP, JavaScript, Rails,
Objective-C, Swift, etc.
S フルスタックエンジニアという名の何でも屋
(自分で言うなと、、、)
S 元 Six Apart エンジニア
S 2003 - 2011
S TypePad(現 lekumo)チーム
S Movable Type チーム
4
趣味
S コンピュータ全般
S DTM
S TM Networkカバー
OED C4U (Crazy for you)
http://youtu.be/og0W4Mp3QC0
S Perfumeカバー
チョコレイト・ディスコ
http://youtu.be/393kJwne88E
S soundcloud
https://soundcloud.com/uehatsu
5
SA時代に自分の残した物
S Movable Type 開発者向けガイド
https://github.com/movabletype/Documentation/wiki
S プラグイン開発ガイド
S MTMLガイド
S 今でも自分で良く使います
S プラグイン開発ガイドは、関根元和さん(CHEEBOWさ
ん)の「Movable Typeプラグイン開発入門」をMT5の流儀
(config.yamlなど)に対応、拡張させたドキュメント
S MT6でも使えます、PSGI周りとか書き足したいなぁ、、、
6
S
Wonder2 Inc. 紹介
7
ワンダーツー株式会社 会社概要
S 代表者
S 代表取締役 野間恒毅
S 設立
S 2011/04/25
S 資本金
S 300万円
S 主な事業内容
S システム開発、Movable Type 開発・カスタマイズ、スマート
フォンアプリ開発、メディア事業、コンサルティング
S 加盟団体
S ProNet Japan (Six Apart Co. Ltd.)
8
ワンダードライビング
(運営:ワンダーツー)
ブログメディア
(車、ホビー、etc.)
Movable Type 6
http://wonderdriving.com/
9
株式会社アドヴァン
ECサイト
Movable Type 5
+
MTコマース
http://www.advan.co.jp/
10
ハジー物産株式会社
商品紹介サイト
Movable Type 5
http://hagypack.com/
11
株式会社シーフォ
会社紹介、メディア
Movable Type 5
+
ソーシャルメディア運用
http://www.sifo.jp/
12
iPhoneアプリ レーダーマップ
S 位置がわかるだけのシン
プルなiPhoneアプリ
S ID不要、登録不要
S 匿名利用
S その他にもiPhoneアプリ
受託開発も行っています
13
S
wonderdriving.comとは
14
ワンダー・ドライビングとは
S スーパーカーからラジコン、ミニ四駆、美女まで男の子
の夢もりだくさん「ワンドラ」
S 車、バイク、ラジコン、ミニ四駆、ボート、ガジェット、
美女、などホビー全般についてのオウンドメディア
S 弊社野間やゲストブロガーの方々による更新
S 特にミニ四駆、ラジコン、車のショーレポートなどのコン
テンツが人気
15
ワンドラがSA導入事例に
紹介されました
S Six Apart社の導入事例にワンドラが紹介されました。
http://www.sixapart.jp/business/wonder2.html
16
S
Data APIとワンドラ
17
Data APIを積極導入する
事になったきっかけ
S ワンドラ リニューアルのタイミングがMT6発表とほぼ同
タイミングだったこと
S リニューアル時にPVランキングのウィジェットデザイン
がデザイン会社からアップされたが、この時点で未実装
だった
18
旧PVランキングページ
S デザインリニューアル前のPVランキングページ
S Apache生ログを集計するスクリプトを日に1回程度実行し、
インクルードするHTMLを生成していた
S 処理時間が長時間かかり、実行間隔が長いためデータの即
時性がなかった
S 別途Google Analyticsでアクセス解析をしていたが誤差が大
きかった
→ リニューアル後は別の方法で作成することに
19
新PVランキングページ
S 新デザインになってからしばらくはPVランキングページ
はありませんでした
S 新デザイン移行時にMT6にアップグレード
S 弊社野間から「上野さんPVランキングページ作るスクリプ
ト作って」と話があり、半分冗談で「じゃMT6のData API
で作りましょうか、GAの集計機能あるし」と言ったら、そ
のまま企画が通る
S さくっとツール作成
S 紆余曲折はありましたが、技術的な話は後ほど、、、
20
人気記事ランキング
サイドバー
・1位〜5位
・順位
・カテゴリー
・投稿日
・タイトル
21
人気記事ランキング 一覧
S 1位〜30位
S サムネール
S 投稿日
S 順位
S タイトル
22
S
人気記事ランキング
スクリプト
23
2つのスクリプト
S サイドバーと一覧を作成しているスクリプトは別
S 作成時間を優先させたため共通化せず
S 実行間隔
S 2つのスクリプトとも5分間隔
S それぞれインクルードファイルを出力し保存
S インクルードファイルをSSIを使って各ページに挿入
24
Data APIにアクセスするため
の共通関数
S _request()関数を作成
S $content = _request( $method, $api_url, $params, $token );
S $method : ‘POST’, ‘GET’
S $api_url : ‘http://foo.com/mt/mt-data-api.cgi/v1/...
S $params : 例){ username => $user, password => $pass, clientID => ‘aaaa’ }
S $token : accessToken
S $content : Data APIからのレスポンスをMT::Util::from_json()
した戻り値
S my $token = $content->{accessToken};
25
_request() ver.1の中身
sub _request {
my ( $method, $url, $params, $accessToken ) = @_;
if ( $method eq 'GET' ) {
$url .= '?' . join( '&', map{ $_ . '=' . $params->{$_}} keys %$params );
}
my $request = HTTP::Request->new($method, $url);
if ( $accessToken ) {
$request->header('X-MT-Authorization' => "MTAuth accessToken=$accessToken");
}
if ( $method eq 'POST' ) {
$request->content( join( '&', map{ $_ . '=' . $params->{$_}} keys %$params ) );
}
my $ua = MT->new_ua;
my $res = $ua->request( $request );
unless ( $res->is_success ) {
if ( $res->code == 500 ) {
my $content = MT::Util::from_json( $res->content );
my $message = $content->{error}->{message};
$message =~ s/x{([0-9a-z]+)}/chr(hex($1))/ge;
die $message;
} else {
die $res->as_string;
}
}
return MT::Util::from_json( $res->content );
}
26
スクリプトの動作
S authentication
S カテゴリー一覧の取得
S PV一覧の取得
S エントリーの取得
S サムネールURLの取得(サムネールの作成)
S HTMLの生成
27
PV一覧の取得
S api_url : http://foo.com/mt/mt-data-
api/v1/${blog_id}/stats/path/pageviews
S startDate, endDate : YYYY-MM-DD, 昨日〜今日に設定
S limit : 今回は200
S レスポンスの中に{item}として結果が格納されている
S $item->{archiveType}で結果の内容が分かる
S 今回は個別アーカイブ’Individual’のみを対象とした
S 個別アーカイブのエントリーidは$item->{entry}->{id}
28
サムネールURLの取得
S サムネールURLを取得するAPIは存在しないため自作
S DataAPIAssetInfoプラグイン
S エンドポイント(/sites/:site_id/assets/:asset_id/info )を追加
S thumb_width, thumb_height, thumb_square, thumb_scale
S アクセスがあると指定のあったAssetのサムネールを作成
S 実際にはMTテンプレートのビルドが走る
S <mt:Asset id="$asset_id"><mt:AssetThumbnailURL width="$width"
height="$height" square="$square" /></mt:Asset>
29
アセットが登録されていない
エントリーがたくさん
S エントリーアセットが未登録の物はデフォルト画像(ワ
ンドラロゴ)が表示される
S リニューアル前はアセットに画像を登録していなかった
S flickrに画像をアップし、そこでタグを生成して貼り付けて
いたため、アセットに登録していなかった
S ランキングは古いエントリーが出る事が多かったためロゴ
画像がずらっと並ぶ残念なことに
S 「過去画像アセットに登録できたらいいですねー」「じゃ
作って」「(えっ?!)」で作成する事に
30
S
アセット登録
スクリプト
31
アセット登録スクリプト
S アセット登録をするだけならData APIを利用する必要は
無いけど、、、
S 外部ファイル(flickr画像)をMTにアップロードしてアセッ
トとして登録
S そのアセットをエントリーアセットとして登録
S デザインの関係でカスタムフィールド画像も同時に登録し
たい
→トータルで考えてData APIで作るのが早そう
32
スクリプトの動作
S authentication
S エントリーの取得(複数エントリーを一括取得)
S 本文、追記をHTML::TagParserで解析しimgタグを抽出
S imgタグのsrcがflickrの物だったらダウンロード
S Data APIを使って画像をアセットとしてアップロード
S エントリーアセットとして登録
S カスタムフィールド画像として登録
33
ファイルアップロード用に
_request()関数を変更
S request作成にHTTP::Request::CommonのGETとPOST
を利用するように変更
S $params = { path => $upload_path, file => [ $save_path ], autoRenameIfExists => 1 };
S path : ${WEB_ROOT}からのアップロード先のパス
S file : ダウンロード済みのflickr画像の保存先パス、[ ]で囲む
S autoRenameIfExists => 1 : 既に存在していた場合自動でリ
ネームした上でアップロード
$request = POST( $url, Content_Type => 'form-data', Content => $params );
34
エントリーアセット
として登録
S アセットをエントリーに紐付ける機能がないため自作
S DataAPIAssetInfoプラグインを拡張
S /sites/:site_id/assets/:asset_id/set_entry
S my $params = { entry_id => $entry_id };
S これを MT::ObjectAsset->get_by_key()でobject_assetを取
得しsave
35
アセットを登録するコード
S 本来ならentry_idの存在チェックなどする必要がありま
すが、ある物としてコードを書いています。
my $object_asset = MT::ObjectAsset->get_by_key({
asset_id => $asset->id,
blog_id => $blog->id,
object_ds => 'entry',
object_id => $app->param('entry_id'),
});
$object_asset->save();
36
カスタムフィールド画像
の設定コード
my $field = "<form mt:asset-id="$asset_id" class="mt-enclosure
mt-enclosure-image" style="display: inline;"><a href="$asset-
>{url}">$asset->{filename}</a></form>";
my $params = {
__method => 'PUT',
entry => MT::Util::to_json(
{ customFields => [ { basename => 'cfmainimage',
value => $field,
} ],
},
),
};
my $content = _request( 'POST', $api_url, $params, $token );
37
S
Data API拡張
プラグイン作成
38
config.yaml 抜粋
39
applications:
data_api:
endpoints:
- id: get_asset_information
route: /sites/:site_id/assets/:asset_id/info
verb: GET
version: 1
handler: $DataAPIAssetInfo::DataAPIAssetInfo::EndPoint::Asset::get_asset_info
requires_login: 1
- id: set_entry_asset
route: /sites/:site_id/assets/:asset_id/set_entry
verb: GET
version: 1
handler: $DataAPIAssetInfo::DataAPIAssetInfo::EndPoint::Asset::set_entry_asset
requires_login: 1
DataAPIAssetInfo::EndPoint::Asset
40
sub set_entry_asset {
my ($app, $endpoint) = @_;
return $app->error(403) unless $app->can_do('upload');
return $app->error(403) unless $app->param('entry_id');
my ( $blog, $asset ) = context_objects(@_)
or return;
run_permission_filter( $app, 'data_api_view_permission_filter',
'asset', $asset->id, obj_promise($blog))
or return;
my $object_asset = MT::ObjectAsset->get_by_key({
asset_id => $asset->id,
blog_id => $blog->id,
object_ds => 'entry',
object_id => $app->param('entry_id'),
});
$object_asset->save();
return $asset;
}
S
MT6.1
Data API 2.0対応
41
大幅なリファクタリング
S 共通化できるコードをプラグイン化
S 2つに分かれていたランキング作成スクリプトを1つに
S accessTokenが必要なエンドポイントの場合は自動的にtokenを取得するよう実装
S blog_idを複数渡せるように変更
S @blog_ids = [ 3, 4 ] : で複数回Data APIにアクセスし、ブログにまたがって結果を集
計できるように拡張
S カテゴリーアーカイブのパスをgetCategoryのarchiveLinkから取得するように変更
S サムネールの作成、エントリーアセットの登録をv2で拡張されたgetThumbnail,
updateEntryの機能を使うように変更
42
複数ブログ対応
S ひとまずgetBlogとPageviewsForPathのみ対応
S blog_idが配列で複数指定された場合
S 内部オブジェクトW2DataAPI::Blogs,
W2DataAPI::Pageviewsに結果を格納し、まとめて返す
S Blogsの結果はgetBlogを配列にしたもの
S Pageviewsの結果はblog_idごとにマージし{items}を
{pageviews}でソートしたもの(ブログを横断してランキング
を取得)
43
カテゴリーアーカイブパス
S v1ではカテゴリーの情報にパスが含まれていなかったた
め、basenameからパスを生成する必要があった
S カテゴリーbasenameの生成方法によって所作が変わるため、
コードの一般化が難しい
S v2ではカテゴリーに{archiveLink}が追加された
S 1つのカテゴリーアーカイブに対して一意のURLが取得で
きるようになった
44
サムネールの作成
S エンドポイントgetThumbnailが追加された
(あれ、v2のドキュメントgetThubmnailになってる?)
S /v2/sites/:site_id/assets/:asset_id/thumbnail
S params => width, height, scale, square
S 独自拡張のエンドポイントをやめ、こちらに書き換え
45
エントリーアセットの登録
S updateEntryでアセットの紐付けができるようになった
S こちらも独自拡張をやめた(APIへのアクセス回数も
減った)
46
my $entry_params = {
entry => MT::Util::to_json(
{ customFields => [ { basename => 'cfmainimage',
value => $field,
} ],
assets => [ { id => $asset_id } ],
}
),
};
S
今後
47
今後の目標 完全プラグイン化
S 現在、スクリプトをcronでまわしている
S スクリプトの配置がハードルが高い
S MTクラウドでは利用出来ない
S 完全プラグイン化
S print()でHTMLタグを出力している部分をMTテンプレート
化
S cronスクリプトを廃止しタスク化
S 諸々の設定を管理画面のプラグイン設定から変更可能に
48

More Related Content

Viewers also liked

Galileo galilei
Galileo galileiGalileo galilei
Galileo galilei
Erma Lestari
 
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
Del Ventruella
 
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
Del Ventruella
 
Tamer Mohammed kamal
Tamer Mohammed kamalTamer Mohammed kamal
Tamer Mohammed kamal
tamer kamal
 
Arc flash hazard paper on estimates
Arc flash hazard paper on estimatesArc flash hazard paper on estimates
Arc flash hazard paper on estimates
Del Ventruella
 
canine kidney failure article
canine kidney failure articlecanine kidney failure article
canine kidney failure article
Del Ventruella
 
برنامج حسابات و مخازن ( Easy store) تحكم فى كافه الأقسام
برنامج حسابات و مخازن  ( Easy store) تحكم فى كافه الأقسامبرنامج حسابات و مخازن  ( Easy store) تحكم فى كافه الأقسام
برنامج حسابات و مخازن ( Easy store) تحكم فى كافه الأقسام
Pioneers Solutions
 
برنامج حسابات و مخازن ( E asy store)
برنامج حسابات و مخازن ( E asy store)برنامج حسابات و مخازن ( E asy store)
برنامج حسابات و مخازن ( E asy store)
Pioneers Solutions
 
AWSアカウントに関する不正使用を整理してみた
AWSアカウントに関する不正使用を整理してみたAWSアカウントに関する不正使用を整理してみた
AWSアカウントに関する不正使用を整理してみた
Naoto Katsumi
 
Congo River Mission - Riverboat Construction
Congo River Mission - Riverboat ConstructionCongo River Mission - Riverboat Construction
Congo River Mission - Riverboat Construction
Abraham J. (Johan) Meintjes
 
Congo River Mission
Congo River MissionCongo River Mission
Congo River Mission
Abraham J. (Johan) Meintjes
 
The Road less Traveled in Africa by Abraham J. Meintjes
The Road less Traveled in Africa by Abraham J. MeintjesThe Road less Traveled in Africa by Abraham J. Meintjes
The Road less Traveled in Africa by Abraham J. Meintjes
Abraham J. (Johan) Meintjes
 
Johnny's incredible Congo River Journey
Johnny's incredible Congo River JourneyJohnny's incredible Congo River Journey
Johnny's incredible Congo River Journey
Abraham J. (Johan) Meintjes
 
The unreached vs 2016 years of theology
The unreached vs 2016 years of theologyThe unreached vs 2016 years of theology
The unreached vs 2016 years of theology
Abraham J. (Johan) Meintjes
 
Congo river mission ctn feb 10
Congo river mission ctn feb 10Congo river mission ctn feb 10
Congo river mission ctn feb 10
Abraham J. (Johan) Meintjes
 
برنامج محاسبة Easy store( إدارة المخازن)
برنامج محاسبة Easy store(  إدارة المخازن)برنامج محاسبة Easy store(  إدارة المخازن)
برنامج محاسبة Easy store( إدارة المخازن)
Pioneers Solutions
 

Viewers also liked (16)

Galileo galilei
Galileo galileiGalileo galilei
Galileo galilei
 
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
Einstein and Galileo Masters of Relativity History's Pawns REVISED FINAL PAPE...
 
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
AI Moral Field Based Control Copyright (C) 2014 by Del John Ventruella All Ri...
 
Tamer Mohammed kamal
Tamer Mohammed kamalTamer Mohammed kamal
Tamer Mohammed kamal
 
Arc flash hazard paper on estimates
Arc flash hazard paper on estimatesArc flash hazard paper on estimates
Arc flash hazard paper on estimates
 
canine kidney failure article
canine kidney failure articlecanine kidney failure article
canine kidney failure article
 
برنامج حسابات و مخازن ( Easy store) تحكم فى كافه الأقسام
برنامج حسابات و مخازن  ( Easy store) تحكم فى كافه الأقسامبرنامج حسابات و مخازن  ( Easy store) تحكم فى كافه الأقسام
برنامج حسابات و مخازن ( Easy store) تحكم فى كافه الأقسام
 
برنامج حسابات و مخازن ( E asy store)
برنامج حسابات و مخازن ( E asy store)برنامج حسابات و مخازن ( E asy store)
برنامج حسابات و مخازن ( E asy store)
 
AWSアカウントに関する不正使用を整理してみた
AWSアカウントに関する不正使用を整理してみたAWSアカウントに関する不正使用を整理してみた
AWSアカウントに関する不正使用を整理してみた
 
Congo River Mission - Riverboat Construction
Congo River Mission - Riverboat ConstructionCongo River Mission - Riverboat Construction
Congo River Mission - Riverboat Construction
 
Congo River Mission
Congo River MissionCongo River Mission
Congo River Mission
 
The Road less Traveled in Africa by Abraham J. Meintjes
The Road less Traveled in Africa by Abraham J. MeintjesThe Road less Traveled in Africa by Abraham J. Meintjes
The Road less Traveled in Africa by Abraham J. Meintjes
 
Johnny's incredible Congo River Journey
Johnny's incredible Congo River JourneyJohnny's incredible Congo River Journey
Johnny's incredible Congo River Journey
 
The unreached vs 2016 years of theology
The unreached vs 2016 years of theologyThe unreached vs 2016 years of theology
The unreached vs 2016 years of theology
 
Congo river mission ctn feb 10
Congo river mission ctn feb 10Congo river mission ctn feb 10
Congo river mission ctn feb 10
 
برنامج محاسبة Easy store( إدارة المخازن)
برنامج محاسبة Easy store(  إدارة المخازن)برنامج محاسبة Easy store(  إدارة المخازن)
برنامج محاسبة Easy store( إدارة المخازن)
 

Similar to ブログメディアにおけるData APIの活用について

初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
Yuji Takayama
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Yuji Takayama
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
Yuji Takayama
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
 
WordPressで制御するこれからのIoT
WordPressで制御するこれからのIoTWordPressで制御するこれからのIoT
WordPressで制御するこれからのIoT
Yuriko IKEDA
 
Inside Movable Type
Inside Movable TypeInside Movable Type
Inside Movable Type
純生 野田
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-EdoYuji Takayama
 
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純生 野田
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
x1 ichi
 
WordPress安全運用の基礎
WordPress安全運用の基礎WordPress安全運用の基礎
WordPress安全運用の基礎
hiro345
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
kenjis
 
Treasure data demo.0517
Treasure data demo.0517Treasure data demo.0517
Treasure data demo.0517
BigData Sios
 
学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)
Itsuki Kuroda
 
TerraformでECS+ECRする話
TerraformでECS+ECRする話TerraformでECS+ECRする話
TerraformでECS+ECRする話
Satoshi Hirayama
 
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
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
Yasuhito Yabe
 

Similar to ブログメディアにおけるData APIの活用について (20)

初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
WordPressで制御するこれからのIoT
WordPressで制御するこれからのIoTWordPressで制御するこれからのIoT
WordPressで制御するこれからのIoT
 
Inside Movable Type
Inside Movable TypeInside Movable Type
Inside Movable Type
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
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
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 
WordPress安全運用の基礎
WordPress安全運用の基礎WordPress安全運用の基礎
WordPress安全運用の基礎
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
Treasure data demo.0517
Treasure data demo.0517Treasure data demo.0517
Treasure data demo.0517
 
学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)
 
TerraformでECS+ECRする話
TerraformでECS+ECRする話TerraformでECS+ECRする話
TerraformでECS+ECRする話
 
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
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 

ブログメディアにおけるData APIの活用について