このエントリーをはてなブックマークに追加

CakePHP 2.x のシェルを使って、レンサバの cron にて RSS を自動で取得する

読了目安 3分50秒

修正しました:Cron → cron

最近 RSS を取得して表示する機能を作っています。コーヒースポットのコーヒーニュースページみたいな感じです。

現状では、ニュースページにアクセスがあったら、RSS を取得しに行ってます。んで、まだそんなにアクセスがあるわけではないので良いですが、今後増えるのを見越して、cron で定期的に取得する方法にしたいと思いました。

なお、使っているサーバーは、VPS とかではなくて、レンタルサーバーのエックスサーバーを使っています。さくらやヘテムルとかでも cron 使えるみたいですね!

CakePHP で cron を動かす

CakePHP で cron を動かす方法は、2種類あるようです。

  1. アクセスしたファイルからアクションを呼び出す
  2. シェルを使って RSS を取得

らしいです。結果的には、後者の方を使っています。

2つの違い

ざっくり言うと、外部からアクセス可能かどうかってとこでしょうか。他にも違いあるかもですが。

前者だと、アクションを呼び出しているので、外からアクセスすると、プログラムが実行されます。F5アタックとかされると困っちゃうのかな。

後者のシェルを使う方法だと、外部からアクセスできないよね、ってなあれです。合ってるかな。

1. アクセスしたファイルからアクションを呼び出す

こちらは、僕の環境なのか設定なのか分かりませんが、うまく動かすことができませんでした。チーン。ですが、ググると上手くいっている情報が出てくるので、こっちの方が気軽かもしれません。

この辺りとか。
さくらインターネットのcronでcakephpのアクションを動かしたい<CakePHP> | BLIFE

2. シェルを使って RSS を取得

今回は、こちらの方法を採用、てか、やらざるを得ない感じではじめたのですが。シェルを使った感想としては、「思ったより簡単にシェルが使えました!」という感じです。

手順としては、シェルのファイルを作って、そいつを cron に登録みたいな感じです。たったの2ステップ。レッツシェル。

シェルの作成

シェルの作成は、公式のサンプルを見るのが分かりやすかったです。

コンソールとシェル — CakePHP Cookbook 2.x ドキュメント

<?php
class HelloShell extends AppShell {
    public function main() {
        $this->out('Hello world.');
    }
}

これをサクッと作って、コンソールで実行。そんな感じで、進めてみて下さい。だいたいコントローラーと似た感じで書けました。なので、ソースはそのまま流用。コンポーネントあたりだけ修正しました。

コンポーネント周辺

こことか見て幸せになれました。
[CakePHP 2.x] shell(シェル)からComponent(コンポーネント)を呼び出す – Qiita

App::uses('ComponentCollection', 'Controller');
App::uses('ほげぇComponent', 'Controller/Component'); 

public function startup() {
     $collection = new ComponentCollection();
     $this->ほげぇ = new ほげぇComponent($collection);
     parent::startup();
}

を書き足しつつ、ほげぇを読み込みたいコンポーネントに書き換えると楽しいです。いじったのはそれくらい!あとは、コントローラーをそのまま移植です。

エックスサーバーでの cron の設定

エックスサーバー マニュアル | レンタルサーバー 高速・高機能・高安定性の【エックスサーバー】

とか

【エックスサーバー】cronの設定方法 – ysklog

をご覧ください!

今回の収穫としては、シェルが思ったより気軽に使えるんだなということでした。ではでは。

このエントリーをはてなブックマークに追加
読了目安 0分31秒

ウエツハラについて

主に Web 系、アプリ系のネタを提供していくかもしれないサイトです。比較的雑多。

中の人

横浜でタネマキというコワーキングスペースをやっています。
コーヒースポット(2014年1月)」ってのを作りはじめました。最近は、iPhoneアプリの制作してます。

連絡手段など

info@uetsuhara.com
≫Twitter
≫Facebookページ

I love comments !

メールアドレスが公開されることはありません。* が付いている欄は必須項目です