Post on 11-Jun-2015
description
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 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 created21 FROM posts ORDER BY created DESC LIMIT 522 ');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();
1 <?php 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 created21 FROM posts ORDER BY created DESC LIMIT 522 ');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();
1 <?php 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 created21 FROM posts ORDER BY created DESC LIMIT 522 ');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();
なんかすみません
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 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(); } } }}
# crontab -‐e
* * * * * cd /var/www/omoon.org; /usr/bin/php oil refine flickr:run
omoon.org
タグ付けだけで更新可能
iPhoneのflickrアプリでも
今後の展望
task を積極的に使いましょう
ありがとうございました