Your SlideShare is downloading. ×
omoon.org の裏側 〜FuelPHP の task 活用例〜
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

5,061

Published on

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

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
5,061
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
1
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×