• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
omoon.org の裏側 〜FuelPHP の task 活用例〜
 

omoon.org の裏側 〜FuelPHP の task 活用例〜

on

  • 3,693 views

2013/10/12 の FuelPHP&CodeIgniter ユーザの集い LT 資料です。

2013/10/12 の FuelPHP&CodeIgniter ユーザの集い LT 資料です。

Statistics

Views

Total Views
3,693
Views on SlideShare
1,854
Embed Views
1,839

Actions

Likes
2
Downloads
1
Comments
0

10 Embeds 1,839

http://pneskin2.nekoget.com 1318
http://doda.jp 322
http://cms.doda.jp 84
https://twitter.com 55
https://cms.doda.jp 46
http://cloud.feedly.com 9
https://doda.jp 2
http://webcache.googleusercontent.com 1
http://www.feedspot.com 1
http://cache.yahoofs.jp 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    omoon.org の裏側 〜FuelPHP の task 活用例〜 omoon.org の裏側 〜FuelPHP の task 活用例〜 Presentation Transcript

    • omoon.org の裏側 FuelPHP の task 活用例 FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2) October 12, 2013 Sotaro OMURA @omoon
    • About Me
    • About Me •Sotaro OMURA
    • About Me •Sotaro OMURA •大阪から来ました
    • About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff
    • About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP)
    • About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org
    • About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
    • About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
    • めんどくさがり
    • About Me
    • About Me
    • フレームワークを使った サンプルアプリケーション
    •  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run();
    •  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run();
    •  1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  SilexApplication();  5    6  $app-­‐>register(new  SilexProviderTwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9   10  //  データベース接続情報の読込 11  $env  =  getenv('APP_ENV')  ?:  'development'; 12  $config  =  require  __DIR__  .  "/../config/$env.php"; 13  $app-­‐>register(new  SilexProviderDoctrineServiceProvider(),  array( 14          'db.options'  =>  $config['db'], 15  )); 16   17  //  トップ画面 18  $app-­‐>get('/',  function(SilexApplication  $app)  { 19          $posts  =  $app['db']-­‐>fetchAll(' 20                  SELECT  name,  message,  unix_timestamp(created)  as  created 21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5 22          '); 23          return  $app['twig']-­‐>render('index.twig',  array( 24                  'posts'  =>  $posts, 25          )); 26  }); 27   28  //  投稿処理 29  $app-­‐>post('/speak',  function(SilexApplication  $app)  { 30          $name  =  $app['request']-­‐>get('name'); 31          $message  =  $app['request']-­‐>get('message'); 32          if  ($name  &&  $message)  { 33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message)); 34          } 35          return  $app-­‐>redirect('/'); 36  }); 37   38  $app-­‐>run(); なんかすみません
    • FuelPHPとのなれそめ
    • お好きですね
    • 他に
    • 最近は
    • JSONでやりとり
    • ありがとう
    • さて
    • omoon.org
    • omoon.org
    • omoon.org •2002年ごろスタート
    • omoon.org •2002年ごろスタート •写真と一行コメントだけ
    • omoon.org •2002年ごろスタート •写真と一行コメントだけ •最初は HTML + FTP アップロード
    • めんどくさがり
    • 簡易化の歴史
    • 簡易化の歴史 •Flickr
    • 簡易化の歴史 •Flickr •PHP + MySQL
    • 簡易化の歴史 •Flickr •PHP + MySQL •Flickr + Eye-Fi
    • 簡易化の歴史 •Flickr •PHP + MySQL •Flickr + Eye-Fi •独自 cron job
    • オレオレなので完成しない
    • Tasks are classes that can be run through the command line or set up as a cron job. They are generally used for background processes, timed tasks and maintenance tasks. Tasks can calls models and other classes just like controllers.
    • Tasks
    • Tasks •コマンドラインから呼べる
    • Tasks •コマンドラインから呼べる •cron jobとして使える
    • Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか
    • Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか
    • Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか •メンテナンスに
    • Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか •メンテナンスに •モデルやクラスをコントローラから呼ぶ時みたいに呼べる
    • いけるかも
    • やってみた
    • ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep 外部ライブラリ
    • ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep クラス
    • require_once  APPPATH  .  'vendor'  .  DS  .  'phpFlickr'  .  DS  .  'phpFlickr.php'; class  Flickr {        protected  static  $_instance  =  null;        private  function  __construct()        {                $this-­‐>api  =  new  phpFlickr(                        'xxxxxxxxxxxxxxxxxxxx'  //Config::get('app.flickr_api_key')                );        }        public  static  function  forge()        {                if  (empty(self::$_instance))  {                        static::$_instance  =  new  static();                }                return  static::$_instance-­‐>api;        } }
    • ▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep タスク
    • namespace  FuelTasks; class  Flickr {        public  static  function  run($limit  =  4)        {                $response  =  Flickr::forge()-­‐>photos_search(                        array(                                'user_id'  =>  '94387617@N00',                                'per_page'  =>  $limit,                                'tags'  =>  'asgt,cover',                                'tag_mode'  =>  'all',                                'sort'  =>  'date-­‐taken-­‐desc'                        )                );                foreach  ($response['photo']  as  $photo)  {                        $r  =  Flickr::forge()-­‐>photos_getInfo($photo['id']);                        $e  =  Flickr::forge()-­‐>photos_getExif($photo['id']);                        //print_r($e['camera']);                        if  (null  ===  Model_Coverphoto::find_by('flickr_id',  $r['photo']['id']))  {                                $r['photo']['dates']['taken'];                                $coverphoto  =  Model_Coverphoto::forge();                                $coverphoto-­‐>flickr_id  =  $r['photo']['id'];                                $coverphoto-­‐>title  =  $r['photo']['description'];                                $coverphoto-­‐>taken_at  =  $r['photo']['dates']['taken'];                                $coverphoto-­‐>camera  =  $e['camera'];                                $coverphoto-­‐>data  =  json_encode($r['photo']);                                $coverphoto-­‐>save();                        }                }        } }
    • #  crontab  -­‐e *  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run
    • omoon.org
    • タグ付けだけで更新可能
    • iPhoneのflickrアプリでも
    • 今後の展望
    • task を積極的に使いましょう
    • ありがとうございました