SlideShare une entreprise Scribd logo
1  sur  32
3ヶ月でリア充大学生がFBアプリをリリースするまで
          @macrocro
横浜国立大学 電子情報工学科3年

趣味 スキューバ・ダイビング
これ
これ
これ
これ
こんな感じで
キャンパスライフを満喫しています


     さて本題
本日、FBアプリをリリースしました
http://app.grow.pe/misscon
Facebook上の全ての女の子の中から、ミスFacebookを
決める

女の子は当然、自薦でエントリー可能

ユーザーは、気に入った女の子をFacebook上の全ての
女の子から探して推していく!


                      http://app.grow.pe/misscon
こっそりいいね!




 女の子の推薦をしたい時には、こっそりいいね!

友達のみならず、知らない女の子にも押すことができる。


                  http://app.grow.pe/misscon
こっそりニュースフィード



      こっそりいいね!を押すことで、

     自分の「こっそりニュースフィード」に

     その女の子のフィードが流れてくる




            http://app.grow.pe/misscon
URLで推薦

        女の子のFacebookユーザーの

           URLを入力することで、

              友達ではない女の子

         でも推薦することが可能!!

 ex. http://www.facebook.com/kotomi.hattanda
               のようなURL

                    http://app.grow.pe/misscon
URLで推薦
例えばこの偽物ユーザー




明らかに綾瀬はるか…

              http://app.grow.pe/misscon
URLで推薦
  入力して…




 送信!!!!!


           http://app.grow.pe/misscon
URLで推薦



                 これ




確認画面がでてきます。
              http://app.grow.pe/misscon
URLで推薦



     綾瀬はるかだ!!!w




         http://app.grow.pe/misscon
Google Image Search Hack!
<form action ="http://www.google.co.jp/searchbyimage" method="hidden" enctype="multipart/form-data" target="_blank">
<input type = "hidden" name = "image_url" value = "画像のURL">

<input type = "hidden" name = "image_content" value ="">
<input type = "hidden" name = "filename" value ="">
<input type = "hidden" name = "num" value = "10">
<input type = "hidden" name = "hl" value ="ja">
<input type = "hidden" name = "bih" value ="385">
<input type = "hidden" name = "biw" value ="1280">
<input type = "Submit" name = "Search" value = "偽装アカウントかチェック!" >

</form>




                                                                                http://app.grow.pe/misscon
FB Misscon 構成

Ubuntu 11.10
PHP + Symfony
Apache + MySQL
jQuery + Twitter Bootstrap

                             http://app.grow.pe/misscon
開発メンバー


自分 (プログラム・デザイン)

八方くん (ロゴデザイン)



           http://app.grow.pe/misscon
3ヶ月前の自分

アプリ作成経験なし!!

フレームワークの「フ」の字も知らない!!

生SQL文書いてた!!

CSS知らない!!


                http://app.grow.pe/misscon
簡単にFBアプリを作れる環境が整っている




             http://app.grow.pe/misscon
参考にしたサイト
Symfony
symfony入門:symfonyで始めるPHPフレームワーク
http://codezine.jp/article/detail/704

Twitter Bootstrap
本家サイト
http://twitter.github.com/bootstrap/

jQuery
これからjQueryを覚える為の3つの参考資料
http://www.finefinefine.jp/web/kiji1988/
                                           http://app.grow.pe/misscon
Faceboo PHP SDK
Facebook が提供している公式のSDK(PHP)は

          イケてない!!!


     $facdbook->api(“うんたら”);



    何をしてるのかよくわからない。

関数名でやりたいことが分かるのがベスト!

                           http://app.grow.pe/misscon
FacebookUtil.class.php
class FacebookUtil {
 var $app_id;
 var $app_secret;
 var $redirect_url = REDIRECT_URL;
 var $access_token;
 var $me;


 public function FacebookUtil() {
  // config/custom.ymlからアプリキー取得

  $this->custom = Spyc::YAMLLoad(CUSTOM_YAML);
  $this->app_id = $this->custom['core']['facebook_key']['app_id'];
  $this->app_secret = $this->custom['core']['facebook_key']['app_secret'];


  $this->crawler = new CrawlerTool();
  $this->crawler->no_sleep = true;
  $this->crawler->no_cache = true;
  $this->crawler->silent = true;


  $this->scope = array(
    'email',
    'read_stream',
    'user_birthday',
    'user_work_history',
    'user_location',

                                                                             http://app.grow.pe/misscon
FacebookUtil.class.php
      public function getOauthUrl() {
          $oauth_url = 'http://www.facebook.com/dialog/oauth?client_id='
              . $this->app_id . '&redirect_uri=' . urlencode($this->redirect_url)
              . '&scope='. implode(',', $this->scope);


          return $oauth_url;
      }


      public function getAccessToken($code='') {
          if (empty($code)) {
              $this->access_token = sfContext::getInstance()->getUser()->get('user')->getFacebookToken();
          }
	

          $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
              . $this->app_id . '&client_secret=' . $this->app_secret
              . '&redirect_uri=' . urlencode($this->redirect_url) . '&code=' . $code;
          $response = $this->crawler->curlCached($token_url, array('no_cache' => true));
          $arr = explode('=', $response);
          if (!empty($arr[1])) {
              $this->access_token = $arr[1];
          }
      }



                                                                                                            http://app.grow.pe/misscon
FacebookUtil.class.php
public function getMe() {
    if (empty($this->access_token)) $this->getAccessToken();


    $graph_url = 'https://graph.facebook.com/me?access_token=' . $this->access_token . '&locale=ja_JP';
    $this->me = json_decode($this->crawler->curlCached($graph_url));
}




public function getFriends($uid = '', $sub_query='') {
    if (empty($this->me)) $this->getMe();
    if (empty($uid)) $uid = $this->me->id;


    $fql = 'SELECT uid, name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=' . $uid.')' . $sub_query;


    $graph_url = 'https://api.facebook.com/method/fql.query?query='
     . rawurlencode($fql) . '&access_token=' . $this->access_token.'&format=json';
    $friend_arr = json_decode($this->crawler->curlCached($graph_url));


    return $friend_arr;
}




                                                                                                    http://app.grow.pe/misscon
いかに上手く手に入れたい情報に対して
     FQLを投げるか




                http://app.grow.pe/misscon
例えば、ユーザーの友達の情報をとってくる


$fql =
SELECT
uid, name,gender,locale,birthday,education,などなど...

FROM user WHERE uid = 友達のID;


 このFQLをforeachで友達の人数分、投げる
   友達が1000人いたら1000回投げていた。
  →当然、重い。
                                    http://app.grow.pe/misscon
例えば、ユーザーの友達の情報をとってくる



 $fql = SELECT
uid, name,gender,locale,birthday,education,などなど...

FROM user WHERE uid
IN (SELECT uid2 FROM friend WHERE uid1=自分のID);


           FQLを投げる回数が1回で済む。


                                       http://app.grow.pe/misscon
ずぶの素人でも頑張ればFBアプリが作れる




              http://app.grow.pe/misscon
THANK YOU FOR
       LISTENING!

Twitterのお友達が少ないので、ぜひお友達になってください…

             @macrocro


                         http://app.grow.pe/misscon

Contenu connexe

Similaire à 3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro

モバイル開発@symfony
モバイル開発@symfonyモバイル開発@symfony
モバイル開発@symfonyDaichi Kamemoto
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)Arata Fujimura
 
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
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
 
Array facebook2
Array facebook2Array facebook2
Array facebook2Jun Chiba
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)Mariko Goda
 
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
 
facebookアプリ開発あれこれ
facebookアプリ開発あれこれfacebookアプリ開発あれこれ
facebookアプリ開発あれこれpinmarch_t Tada
 
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純生 野田
 
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話Masahiro Wakame
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したShinichi Hirauchi
 
Meetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMeetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMasami Yabushita
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 

Similaire à 3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro (20)

モバイル開発@symfony
モバイル開発@symfonyモバイル開発@symfony
モバイル開発@symfony
 
behatで始めるBDD
behatで始めるBDDbehatで始めるBDD
behatで始めるBDD
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
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
 
Using Dancer
Using DancerUsing Dancer
Using Dancer
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
Array facebook2
Array facebook2Array facebook2
Array facebook2
 
test
testtest
test
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)
 
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
 
Silex入門
Silex入門Silex入門
Silex入門
 
facebookアプリ開発あれこれ
facebookアプリ開発あれこれfacebookアプリ開発あれこれ
facebookアプリ開発あれこれ
 
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
 
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成した
 
Meetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMeetup11 contacts api読んでみた
Meetup11 contacts api読んでみた
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 

Dernier

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Dernier (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n