SlideShare a Scribd company logo
1 of 96
Download to read offline
リアルFacebook
 ガジェットを
   作った
   株式会社鳥人間
    郷田 まり子
株式会社鳥人間
 プログラマ
郷田まり子
www.facebook.com/maripo
PageAge




いいニャ
2011年4月発売
たぶん日本最古の
FBアプリ開発本
苦労話を
しろと
言われたので
苦労したという
   前提
苦労話を
しろと
言われたので
書いても
書いても
古くなる
印刷所入稿の
直前に
API仕様変更
発売の
直後に
API仕様変更
PageAge
2011年
ユーザ & ページの
タイムライン表示が
    開始
重要な
出来事
まとめて表示
いいニャ
Google
Chrome
拡張機能
いいね!
いいね!
いいニャ!
にゃー
Facebookが
 気になって
  仕方ない
生産には
お金がかかる
クラウド
ファンディングで
  支援を募集
開発
チーム
企画・デザイン




Bsize Inc. 八木 啓太
中身・ソフトウェア



久川真吾   郷田まり子
  株式会社鳥人間
Kickstarter担当




  株式会社Cerevo
試作
基板を
 作る
設計




基板設計CAD EAGLE
プリント基板を
  発注して
 2週ほど待つ
調達
実装
試作0号
試作0号
ケース
USB
対応OS
Mac OS X
Windows
本日の
技術的
 本題
Mac & Windows
ネイティブアプリで
 Facebookの
  APIを叩く
Facebook
  API        HTTPS Request
                 (FQL)


  Response           PC
   (通知数)
                   Native
                    App

                USB通信
                (通知数)
 NOTICE
Facebook
   API        HTTPS Request
                  (FQL)


   Response           PC
    (通知数)
                    Native
                     App
アップデート前提
                 USB通信
                 (通知数)
   NOTICE
辛いところ1
 公式SDKが
提供されてない
辛いところ2
  情報が
すごく少ない
課題1
通知数を
取得する
FQL
通知数
SELECT notification_id
FROM notification
WHERE recipient_id=me()
AND is_unread=1
未読メッセージ数
SELECT tags
FROM unified_thread
WHERE has_tags('inbox')
AND NOT (has_tags('seen'))
未読友達申請数
SELECT uid_from
FROM friend_request
WHERE uid_to=me() AND
unread=1
小技
FQLのレスポンスを
 ちょっと軽くする
FQLで
    COUNTは
     使えない
だめな例:

 SELECT COUNT(*)
 FROM friend_request ...
FQLで
    COUNTは
     使えない
だめな例:

 SELECT COUNT(*)
 FROM friend_request ...

             SQL脳の恐怖
Query:
SELECT notification_id FROM notification


Response:
{
  "data": [
    {
      "notification_id": "123456789"
    }, {
      "notification_id": "987654321"
    }
  ]
}
Query:
SELECT notification_id FROM notification


Response:
{
  "data": [
    {
      "notification_id": "123456789"
    }, {
      "notification_id": "987654321"
    }
  ]
}
                   わりと
                 どうでもいい
Before:

SELECT notification_id
FROM notification ...
Before:

SELECT notification_id
FROM notification ...

After:

SELECT
FROM notification ...
Query:
SELECT   FROM notification
Query:
SELECT        FROM notification



{
    "data": [
      {
        "anon": ""
      }, {
        "anon": ""
      }
    ]
}
Query:
SELECT      FROM notification


Response:
{
  "data": [
    {
      "anon": ""
    }, {
      "anon": ""
    }
  ]
}
             すっきり
             さわやか
Multi-query
    複数クエリをまとめて実行
    結果もまとめて返ってくる
{
    "notification":
    "SELECT '' FROM notification
       WHERE recipient_id=me() AND is_unread=1",
    "message":
    "SELECT '' FROM unified_thread
       WHERE has_tags('inbox') and not (has_tags('seen'))",
    "friend_request":
    "SELECT '' FROM friend_request
       WHERE uid_to=me() AND unread=1"
}
課題2
Authentication
Mac OS X
WebView
表示&デリゲート登録
WebView *webView;


// デリゲートをセット
[webView setResourceLoadDelegate:self];


// URLを開く(認証ダイアログを表示)
[webView setMainFrameURL:@ https:// ];
URL変更をハンドル
- (void)webView:(WebView *)sender resource:(id)identifier
didFinishLoadingFromDataSource:(WebDataSource *)
dataSource
{
   NSString *url = dataSource.request.URL.absoluteString;
   NSRange match = [url rangeOfString:@"access_token="];

    if (NSNotFound !=match.location)
    {
       // Access Token Found
       NSString *accessToken =
          [[url substringWithRange:match] substringFromIndex:
             [@"access_token=" length]];
       NSLog(@"Short Access Token Found.: %@", accessToken);
    }
}
Windows
WebBrowser
表示
browser.Url = new Uri("https://...");
URL変更をハンドル
private void onLoad(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
  string url = browser.Url.ToString();
  if (url.Contains("access_token="))
  {
     Regex regex =
        new Regex("access_token=([A-Za-z0-9]+)");
     Match match = regex.Match(url);
     string token = match.Groups[1].Value;
     Console.WriteLine(token);
  }
}
アクセス
トークンの
  延長
開発に必要な
スキルセット
ケース              ソフトウェア
 プロダクトデザイン        本体側
 3D CAD             AVR
 試作品の製造           Mac OS X
 美意識:-)             Objective-C
                    C
                  Windows
回路                  .Net + C#
 回路設計             Facebook API
   電磁気学
 基板作り
   PCB基板生産       量産
   配線 (アートワーク)    EMS (受託生産)
   発注
 部品調達
 実装
   普通のはんだづけ
   表面実装
 各種規制・規格
企画・デザイン 中身・ソフト Kickstarter
                  ・量産




Bsize Inc.           株式会社
             株式会社鳥人間 Cerevo
 八木 啓太
Kickstarter担当




   株式会社Cerevo
NOTICE
 開発メンバーで
イベントやります
09/18
19:00
 東京
Happy Hacking:-)

More Related Content

Viewers also liked

Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikar
Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikarSahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikar
Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikarshriniwas kashalikar
 
Lançamentos de Janeiro - Editora harlequin
Lançamentos de Janeiro - Editora harlequinLançamentos de Janeiro - Editora harlequin
Lançamentos de Janeiro - Editora harlequinnatalypg
 
Guía De Pronunciación
Guía De PronunciaciónGuía De Pronunciación
Guía De PronunciaciónHarley Giles
 
Beijing tour sites
Beijing tour sitesBeijing tour sites
Beijing tour sitesskimkims
 
Estados de ánimo
Estados de ánimoEstados de ánimo
Estados de ánimofer72
 
DestinationDoc Demo
DestinationDoc DemoDestinationDoc Demo
DestinationDoc Demogregamariani
 
El profesorado ante la integración de las tic en la escuela
El profesorado ante la integración de las tic en la escuela El profesorado ante la integración de las tic en la escuela
El profesorado ante la integración de las tic en la escuela TOTOOCAMPO
 

Viewers also liked (20)

Ativ1 4 terezinha
Ativ1 4 terezinhaAtiv1 4 terezinha
Ativ1 4 terezinha
 
Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikar
Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikarSahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikar
Sahasranetra marathi bestseller on vishnusahasranam dr. shriniwas kashalikar
 
Adobe brss
Adobe brssAdobe brss
Adobe brss
 
20120829
2012082920120829
20120829
 
Lançamentos de Janeiro - Editora harlequin
Lançamentos de Janeiro - Editora harlequinLançamentos de Janeiro - Editora harlequin
Lançamentos de Janeiro - Editora harlequin
 
Prueba ppt gbi
Prueba ppt gbiPrueba ppt gbi
Prueba ppt gbi
 
Guía De Pronunciación
Guía De PronunciaciónGuía De Pronunciación
Guía De Pronunciación
 
Beijing tour sites
Beijing tour sitesBeijing tour sites
Beijing tour sites
 
Buzón rebelde xaneiro 2015
Buzón rebelde xaneiro 2015Buzón rebelde xaneiro 2015
Buzón rebelde xaneiro 2015
 
Talleres digitales 2
Talleres digitales 2Talleres digitales 2
Talleres digitales 2
 
Aula Virtual
Aula VirtualAula Virtual
Aula Virtual
 
B2B
B2BB2B
B2B
 
Estados de ánimo
Estados de ánimoEstados de ánimo
Estados de ánimo
 
DestinationDoc Demo
DestinationDoc DemoDestinationDoc Demo
DestinationDoc Demo
 
1
11
1
 
Presenta 3
Presenta 3Presenta 3
Presenta 3
 
Iid miami
Iid miamiIid miami
Iid miami
 
Diapos
DiaposDiapos
Diapos
 
Etica profesional arqui
Etica profesional arquiEtica profesional arqui
Etica profesional arqui
 
El profesorado ante la integración de las tic en la escuela
El profesorado ante la integración de las tic en la escuela El profesorado ante la integración de las tic en la escuela
El profesorado ante la integración de las tic en la escuela
 

Similar to リアルFacebookガジェットを作った

Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編Fujio Kojima
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APIAkira Hatsune
 
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_configTakayoshi Tanaka
 
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオンIoTビジネス共創ラボ
 
20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriverHiroko Tamagawa
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要Naohiro Fujie
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Shotaro Suzuki
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートKazumi IWANAGA
 
JAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdfJAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdfYuya Modeki
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発Fujio Kojima
 
IDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたIDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたNaohiro Fujie
 
Tips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO driversTips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO driversAtomu Hidaka
 
俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptxytakahashineco
 

Similar to リアルFacebookガジェットを作った (20)

Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
 
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config
 
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン
20160928_「Cloud Robotics Azure Platform 基本セット」構築ハンズオン
 
20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
 
JAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdfJAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdf
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
 
IDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたIDaaSにSign in with Appleをつないでみた
IDaaSにSign in with Appleをつないでみた
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
Tips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO driversTips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO drivers
 
俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx
 

リアルFacebookガジェットを作った