Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

omoon
October 12, 2013

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

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

omoon

October 12, 2013
Tweet

More Decks by omoon

Other Decks in Technology

Transcript

  1. PNPPOPSHͷཪଆ
    'VFM1)1ͷUBTL׆༻ྫ
    'VFM1)1ˍ$PEF*HOJUFSϢʔβͷू͍ʢ'VFM1)1౦ژษڧձɺ$PEF*HOJUFSUBMLʣ
    0DUPCFS
    4PUBSP0.63"
    !PNPPO

    View Slide

  2. "CPVU.F

    View Slide

  3. "CPVU.F
    w4PUBSP0.63"

    View Slide

  4. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠

    View Slide

  5. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠
    w,BOTBJ1)16TFST(SPVQ4UB⒎

    View Slide

  6. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠
    w,BOTBJ1)16TFST(SPVQ4UB⒎
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ʣ

    View Slide

  7. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠
    w,BOTBJ1)16TFST(SPVQ4UB⒎
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ʣ
    wPNPPOPSH

    View Slide

  8. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠
    w,BOTBJ1)16TFST(SPVQ4UB⒎
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ʣ
    wPNPPOPSH
    w!PNPPO

    View Slide

  9. "CPVU.F
    w4PUBSP0.63"
    wେࡕ͔Βདྷ·ͨ͠
    w,BOTBJ1)16TFST(SPVQ4UB⒎
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ʣ
    wPNPPOPSH
    w!PNPPO

    View Slide

  10. ΊΜͲ͕͘͞Γ

    View Slide

  11. View Slide

  12. View Slide

  13. "CPVU.F

    View Slide

  14. "CPVU.F

    View Slide

  15. ϑϨʔϜϫʔΫΛ࢖ͬͨ
    αϯϓϧΞϓϦέʔγϣϯ

    View Slide

  16.  1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  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  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));
    16  
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $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(Silex\Application  $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();

    View Slide

  17.  1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  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  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));
    16  
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $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(Silex\Application  $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();

    View Slide

  18.  1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  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  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));
    16  
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $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(Silex\Application  $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();
    ͳΜ͔͢Έ·ͤΜ

    View Slide

  19. 'VFM1)1ͱͷͳΕͦΊ

    View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. ͓޷͖Ͱ͢Ͷ

    View Slide

  26. ଞʹ

    View Slide

  27. View Slide

  28. ࠷ۙ͸

    View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. View Slide

  34. +40/Ͱ΍ΓͱΓ

    View Slide

  35. View Slide

  36. ͋Γ͕ͱ͏

    View Slide

  37. ͯ͞

    View Slide

  38. PNPPOPSH

    View Slide

  39. View Slide

  40. PNPPOPSH

    View Slide

  41. PNPPOPSH
    w೥͝Ζελʔτ

    View Slide

  42. PNPPOPSH
    w೥͝Ζελʔτ
    wࣸਅͱҰߦίϝϯτ͚ͩ

    View Slide

  43. PNPPOPSH
    w೥͝Ζελʔτ
    wࣸਅͱҰߦίϝϯτ͚ͩ
    w࠷ॳ͸)5.-'51Ξοϓϩʔυ

    View Slide

  44. ΊΜͲ͕͘͞Γ

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. ؆қԽͷྺ࢙

    View Slide

  49. ؆қԽͷྺ࢙
    w'MJDLS

    View Slide

  50. ؆қԽͷྺ࢙
    w'MJDLS
    w1)1.Z42-

    View Slide

  51. ؆қԽͷྺ࢙
    w'MJDLS
    w1)1.Z42-
    w'MJDLS&ZF'J

    View Slide

  52. ؆қԽͷྺ࢙
    w'MJDLS
    w1)1.Z42-
    w'MJDLS&ZF'J
    wಠࣗDSPOKPC

    View Slide

  53. View Slide

  54. ΦϨΦϨͳͷͰ׬੒͠ͳ͍

    View Slide

  55. View Slide

  56. 5BTLTBSFDMBTTFTUIBUDBOCFSVOUISPVHIUIFDPNNBOEMJOFPS
    TFUVQBTBDSPOKPC5IFZBSFHFOFSBMMZVTFEGPSCBDLHSPVOE
    QSPDFTTFT UJNFEUBTLTBOENBJOUFOBODFUBTLT5BTLTDBODBMMT
    NPEFMTBOEPUIFSDMBTTFTKVTUMJLFDPOUSPMMFST

    View Slide

  57. 5BTLT

    View Slide

  58. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ

    View Slide

  59. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ
    wDSPOKPCͱͯ͠࢖͑Δ

    View Slide

  60. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ
    wDSPOKPCͱͯ͠࢖͑Δ
    wόοΫάϥ΢ϯυॲཧͱ͔

    View Slide

  61. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ
    wDSPOKPCͱͯ͠࢖͑Δ
    wόοΫάϥ΢ϯυॲཧͱ͔
    wఆظతͳॲཧͱ͔

    View Slide

  62. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ
    wDSPOKPCͱͯ͠࢖͑Δ
    wόοΫάϥ΢ϯυॲཧͱ͔
    wఆظతͳॲཧͱ͔
    wϝϯςφϯεʹ

    View Slide

  63. 5BTLT
    wίϚϯυϥΠϯ͔Βݺ΂Δ
    wDSPOKPCͱͯ͠࢖͑Δ
    wόοΫάϥ΢ϯυॲཧͱ͔
    wఆظతͳॲཧͱ͔
    wϝϯςφϯεʹ
    wϞσϧ΍ΫϥεΛίϯτϩʔϥ͔ΒݺͿ࣌Έ͍ͨʹݺ΂Δ

    View Slide

  64. ͍͚Δ͔΋

    View Slide

  65. ΍ͬͯΈͨ

    View Slide

  66. View Slide

  67. ▾  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
    ֎෦ϥΠϒϥϦ

    View Slide

  68. ▾  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
    Ϋϥε

    View Slide

  69. 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;
           }
    }

    View Slide

  70. ▾  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
    λεΫ

    View Slide

  71. namespace  Fuel\Tasks;
    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();
                           }
                   }
           }
    }

    View Slide

  72. #  crontab  -­‐e
    *  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run

    View Slide

  73. View Slide

  74. PNPPOPSH

    View Slide

  75. λά෇͚͚ͩͰߋ৽Մೳ

    View Slide

  76. J1IPOFͷqJDLSΞϓϦͰ΋

    View Slide

  77. ࠓޙͷల๬

    View Slide

  78. View Slide

  79. View Slide

  80. UBTLΛੵۃతʹ࢖͍·͠ΐ͏

    View Slide

  81. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide