SlideShare a Scribd company logo
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 を積極的に使いましょう
ありがとうございました

More Related Content

What's hot

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 

What's hot (20)

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
Fuel php osc tokyo2012
Fuel php osc tokyo2012Fuel php osc tokyo2012
Fuel php osc tokyo2012
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
PHP勉強会 #51
PHP勉強会 #51PHP勉強会 #51
PHP勉強会 #51
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 

Viewers also liked

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
nasneg
 
CodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみるCodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみる
智之 大野
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Hidenori Goto
 

Viewers also liked (20)

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
FuelPHP で DynamoDB
FuelPHP で DynamoDBFuelPHP で DynamoDB
FuelPHP で DynamoDB
 
CodeIgniterのライセンスについて
CodeIgniterのライセンスについてCodeIgniterのライセンスについて
CodeIgniterのライセンスについて
 
Codeigniter3フレームアップデート
Codeigniter3フレームアップデートCodeigniter3フレームアップデート
Codeigniter3フレームアップデート
 
CodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみるCodeIgniterでXMLを処理してみる
CodeIgniterでXMLを処理してみる
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリング
 
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
 
OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料
 
CakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsCakePHP Console Application 拡張Tips
CakePHP Console Application 拡張Tips
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
 
Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
 
8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
BEAR.Sunday 1.X
BEAR.Sunday 1.XBEAR.Sunday 1.X
BEAR.Sunday 1.X
 
BEAR.Sunday $app
BEAR.Sunday $appBEAR.Sunday $app
BEAR.Sunday $app
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみた
 

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

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
 

Similar to omoon.org の裏側 〜FuelPHP の task 活用例〜 (20)

Using Dancer
Using DancerUsing Dancer
Using Dancer
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
Capistrano
CapistranoCapistrano
Capistrano
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Silex入門
Silex入門Silex入門
Silex入門
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
Functions
FunctionsFunctions
Functions
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
test
testtest
test
 

More from Sotaro Omura (7)

RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda Box
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールする
 
seleniumをPHPで使う
seleniumをPHPで使うseleniumをPHPで使う
seleniumをPHPで使う
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (11)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 

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

  • 1. omoon.org の裏側 FuelPHP の task 活用例 FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2) October 12, 2013 Sotaro OMURA @omoon
  • 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
  • 11.
  • 12.
  • 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.  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();
  • 18.  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(); なんかすみません
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 27.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 35.
  • 39.
  • 45.
  • 46.
  • 47.
  • 53.
  • 55.
  • 56. 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.
  • 57. Tasks
  • 66.
  • 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 外部ライブラリ
  • 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 クラス
  • 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;        } }
  • 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 タスク
  • 71. 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();                        }                }        } }
  • 72. #  crontab  -­‐e *  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run
  • 73.
  • 78.
  • 79.