Upgrade to Pro — share decks privately, control downloads, hide ads and more …

fantasticsの裏側.pdf

hidehigo
October 23, 2012

 fantasticsの裏側.pdf

2012/10/23にFacebook Night vol.10にて発表しました。
文字が少ないので動画もよろしくお願いします。
http://www.ustream.tv/recorded/26376597

hidehigo

October 23, 2012
Tweet

More Decks by hidehigo

Other Decks in Technology

Transcript

  1. Facebook Night vol.10@2012/10/23 - Confidential - Copyright © GaiaX Co.

    Ltd. All rights reserved. facebookファン解析サービス 「fantastics」の裏側 株式会社ガイアックス
  2. 4 ソーシャルメディア・マーケティング の研究機関 「マーケティングの中でソーシャルメディアをどう使うか?」をテーマに、 仮設を立て実践・調査を元に知見を貯めて、情報発信をしたり、自社 サービスの改善に活かしていく活動を行なっている。 規約 マーケティング 戦略 マニュアル・

    使い方 ファン育成 データ・効果 ツール 活用術・TIPS 業務設計 効果測定・ ROI 傾聴 サービスの 仕組み 事例 キャンペーン 運用 企業 インタビュー アプリ アクティブ サポート CRM GaiaX ソーシャルメディア ラボ
  3. Facebookページ運用 集客 育成 新規ユーザー 既存ユーザー キャンペーン ウォール運用 ア プ リ

    で 新 規 「 い い ね ! 」 獲 得 キ ャ ン ペ ー ン 日 々 の ウ ォ ー ル 運 用 に よ り 、 エ ン ゲ ー ジ メ ン ト を 高 め て い く 。 ア プ リ で 新 規 「 い い ね ! 」 獲 得 キ ャ ン ペ ー ン 日 々 の ウ ォ ー ル 運 用 に よ り 、 エ ン ゲ ー ジ メ ン ト を 高 め て い く 。 ア プ リ で 新 規 「 い い ね ! 」 獲 得 キ ャ ン ペ ー ン 集 客 育成 集 客 育成 集 客 ファン化 (認知度、想起率、満足度、 ロイヤリティ、etc.) いいねユーザー (及び、その友達) キャンペーンアプリ群 (懸賞/コンテスト/検定等) ウォール運用最適化ツール
  4. サービス概念図 facebook facebookページ facebookページ 管理者 投稿 フィード いいね シェア いいね

    1次波及 2次波及 各種データ取得 ファン ファンの友達 facebookアプリ キャンペーン実施 ウォール運用最適化
  5. facebookからのデータ取得 種類 用途 いいねユーザーのプロフィール 年代/性別/友達数の統計情報 ファン指数の算出 該当facebookページのページ管理 者情報 ページ管理者を把握し、ページ tokenが有効かを判断

    該当facebookページのウォールの 投稿 投稿内容 いいね数と時間帯 コメント数と時間帯 いいねユーザーの ウォールの投稿 書き込みのテキスト解析(設定 キーワードを含む発言か) 活動時間の算出 フィードの混雑状況の算出 該当facebookページの投稿のシェ ア、リンク投稿アクション
  6. アーキテクチャ概要 • サーバー構成 • webは薄い • 解析の負荷の方が甚大 • job queue

    • TheSchwartz • DB • mysql5.5 • pertitioning • repl • job用DB web batch/worker db(master) db(slave) db(job)
  7. アプリケーション構成 nginx plack psgi app psgi app psgi app psgi

    app plack worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) cron script job生成 job実行 jobDB メインの画面描画 画面遷移 ログイン機構 グラフ描画 csv吐き出し など非同期動作 解析用データ取得 解析実行 ブラウザ アクセス ブラウザ アクセス (非同期) plack psgi app catalyst app API アクセス
  8. アプリケーション構成 nginx plack psgi app psgi app psgi app psgi

    app plack worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) worker app (Parallel::Prefork) cron script job生成 job実行 jobDB メインの画面描画 画面遷移 ログイン機構 グラフ描画 csv吐き出し など非同期動作 解析用データ取得 解析実行 ブラウザ アクセス ブラウザ アクセス (非同期) plack psgi app catalyst app API アクセス
  9. パッケージ構成(画面表示系) • Fanta • conf管理 • log管理、log instance提供 • DB接続、schema管理

    • Cache管理 • Util • などの共通モジュールをFanta::APIを介して提供 • Fanta-Client • 画面処理用app • Catalyst app • Fanta-API • webAPI、非同期アクセス用app • psgi app
  10. Catalyst appの例 package Fanta::Client::Controller::Project::Create; BEGIN { extends 'Catalyst::Controller' } sub

    index :Path :Args(0) { my ($self, $c) = @_; my $session = Plack::Session->new($c->req->env); } sub execute : Local : Args(0) { my ($self, $c) = @_; my $result = $c->model('Validator')->project($c->req); unless ($result->{success}) { : } my $params = $c->req->params; my $created = $c->model('API')->loader('Project')->create($params); $c->res->redirect($c->uri_for("/project/$created->{project_seq}")); } __PACKAGE__->meta->make_immutable; ←Fanta::APIを介して Modelにアクセス *codeは抜粋のため動きません
  11. psgi appの例 use Plack::Builder; use Plack::Request; use Fanta::API; my $api

    = Fanta::API->new; my $app = sub { my $env = shift; my $req = Plack::Request->new($env); return like($req) if $req->path eq '/like'; return error(); }; sub like { my $req = shift; my $res = $req->new_response(200); my $params = $req->parameters->mixed; my $json = $api->loader("Graph::Like")- >create_graph({ ... }); $res->content_type('application/json'); $res->body($json); $res->finalize(); } builder { enable_if { $_[0]->{REMOTE_ADDR} eq '127.0.0.1' } "Plack::Middleware::ReverseProxy"; mount '/api/graph' => $app; }; ←Fanta::APIを介して Modelにアクセス *codeは抜粋のため動きません
  12. facebook関連の実装 • Fanta::Service::Facebookに集約 • 呼び出し側 sub exchange_token { my ($self,

    $access_token ) = @_; croak "Usage: $self->exchange_token(¥$access_token)" unless $access_token; my $config = Fanta::Config->instance->config->{'service.facebook'}; my $uri = URI->new($GRAPH_API_URI); $uri->path('/oauth/access_token'); my $content = Fanta::Util::HTTP::get $uri, { client_id => $config->{client}{id}, client_secret => $config->{client}{secret}, grant_type => 'fb_exchange_token', fb_exchange_token => $access_token, }; return try { my $decoded = +{ map { split /=/, $_ } split /&/, $content }; return $decoded->{access_token}; }; } my $events = try { $api->fb->get("$page_id/events", { access_token => $page_access_token, fields => 'id' }); } catch { $api->log->error(dump $_) }; *codeは抜粋のため動きません
  13. データ • アプリ許可&情報取得可能ユーザー数 • (*資料公開時に非公開とさせて頂きました) • 解析からのfacebookへの情報リクエスト回数 • /me 27万回/日

    • /friends 12万回/日 • /likes 11万回/日 • facebookページ情報取得 400回/日 • /fql.multiquery 投稿とコメント取得 43万回 • /events 1800回/日 • 計 • 各アプリのアクセス回数は除く • insight上の数字の合計は、230万回/日程度 • 現在のところ、アプリのAPIアクセス上限数は確認されていない(同じユー ザーウォールへの書き込み上限は経験あり) • 1つのアクセストークン毎に600秒間で600コールできる