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

7,076
-1

Published on

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,076
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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

  1. 1. omoon.org の裏側 FuelPHP の task 活用例 FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2) October 12, 2013 Sotaro OMURA @omoon
  2. 2. About Me
  3. 3. About Me •Sotaro OMURA
  4. 4. About Me •Sotaro OMURA •大阪から来ました
  5. 5. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff
  6. 6. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP)
  7. 7. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org
  8. 8. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
  9. 9. About Me •Sotaro OMURA •大阪から来ました •Kansai PHP Users Group Staff •PHP歴は12年ほど(最近はFuelPHP) •omoon.org •@omoon
  10. 10. めんどくさがり
  11. 11. About Me
  12. 12. About Me
  13. 13. フレームワークを使った サンプルアプリケーション
  14. 14.  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();
  15. 15.  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();
  16. 16.  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(); なんかすみません
  17. 17. FuelPHPとのなれそめ
  18. 18. お好きですね
  19. 19. 他に
  20. 20. 最近は
  21. 21. JSONでやりとり
  22. 22. ありがとう
  23. 23. さて
  24. 24. omoon.org
  25. 25. omoon.org
  26. 26. omoon.org •2002年ごろスタート
  27. 27. omoon.org •2002年ごろスタート •写真と一行コメントだけ
  28. 28. omoon.org •2002年ごろスタート •写真と一行コメントだけ •最初は HTML + FTP アップロード
  29. 29. めんどくさがり
  30. 30. 簡易化の歴史
  31. 31. 簡易化の歴史 •Flickr
  32. 32. 簡易化の歴史 •Flickr •PHP + MySQL
  33. 33. 簡易化の歴史 •Flickr •PHP + MySQL •Flickr + Eye-Fi
  34. 34. 簡易化の歴史 •Flickr •PHP + MySQL •Flickr + Eye-Fi •独自 cron job
  35. 35. オレオレなので完成しない
  36. 36. 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.
  37. 37. Tasks
  38. 38. Tasks •コマンドラインから呼べる
  39. 39. Tasks •コマンドラインから呼べる •cron jobとして使える
  40. 40. Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか
  41. 41. Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか
  42. 42. Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか •メンテナンスに
  43. 43. Tasks •コマンドラインから呼べる •cron jobとして使える •バックグラウンド処理とか •定期的な処理とか •メンテナンスに •モデルやクラスをコントローラから呼ぶ時みたいに呼べる
  44. 44. いけるかも
  45. 45. やってみた
  46. 46. ▾  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 外部ライブラリ
  47. 47. ▾  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 クラス
  48. 48. 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;        } }
  49. 49. ▾  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 タスク
  50. 50. 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();                        }                }        } }
  51. 51. #  crontab  -­‐e *  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run
  52. 52. omoon.org
  53. 53. タグ付けだけで更新可能
  54. 54. iPhoneのflickrアプリでも
  55. 55. 今後の展望
  56. 56. task を積極的に使いましょう
  57. 57. ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×