ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2013年7月1日月曜日

Tiny Tiny RSS+fever plugin+Mr. reader または Reederが最強な件

巷では7月1日でGoogle Readerのサービスが終了すると言うことで、移行先は何処にすれば良いのか話題で賑わっていました。自分のそのなかの一人であったのですが、今回の事で他人のサービスを当てにしているとろくな事は無いなと思った訳です。

と言うことで、私が選んだのはTiny Tiny RSSでした。Tiny Tiny Rssは他人のサービスを使用するものでは無く、自サーバーなどを用意しインストールして自らサービスを立ち上げるタイプのRSSです。これをさくらのVPSにインストールすれば、他人の都合に左右されずにサービスを享受することが出来ます。最高!!

Tiny Tiny RSSをサクッとインストールしてみたのですが、一つ問題がありました。Google Readerの時は使いやすいクライアントソフトが多く存在していました。自分はiPadでMr.Readerを愛用していました。もう手放せない、Mr.Readerじゃないと読む気が起きないというぐらい気に入っていました。

しかし、Tiny Tiny RSSをサポートしているクライアントソフトはお世辞にも良いとはいえないものばかりです。しばらくはwebインターファースで読むしか無いかなと思っていました。

Tiny Tiny RSS プラグイン

Tiny Tiny RSSにはプラグインが組み込める仕組みがあって、デフォルトで有用なプラグインが組み込まれていて、それ以外にも有志によって作成されたプラグインも公開されています。

何か便利なプラグインは無いかと物色していた所、Reeder (iOS) integration with TT-RSS (via Fever API)と言うプラグインが目にとまりました。どうやらFever APIをエミュレートしてReederでTiny Tiny RSSの記事を参照出来るようにするプラグインらしいです。そして、Mr.Readerの最新版もFeverをサポートしています。

そして、Fever API pluginのreadme.mdを見ると Supported/Tested Clients の所に Mr.Readerの文字が… これは入れるしか無いとインストールしてみました。

TinyTinyRSS Fever API pluginのインストール

  1. 最初にhttps://github.com/dasmurphy/tinytinyrss-fever-pluginからmaster.zipをダウンロードしてきます。

  2. 次に、適当な場所で解凍します。

  3. 解凍すると、feverディレクトリが出来ますので、それをTiny Tiny RSSのpluginsディレクトリ(自分の環境では/var/www/htdocs/ttrss/plugins)に入れます。
    # mv tinytinyrss-fever-plugin-master/fever /var/www/htdocs/ttrss/plugins

  4. 次にTiny Tiny RSSをブラウザで開いて「操作」→「Preference」→「plugin」を選択するとfeverのチェックボックスが現れるのでこれをチェックし、Enable seleced pluginsボタンを押下して有効にします。plugin設定画面

  5. fever pluginを有効にしてリロードすると「Preference」ページに「Fever Emulation」タブが追加されますのでこれを開いて、パスワード入力エリアにログイン時のパスワードを入力します。パスワード入力

  6. Mr.ReaderのAdd Accountからfeverを選びます。Mr.Reader Add Account

  7. Server URLはプラグインを入れたディレクトリを指定し、CredentialsにログインIDとパスワードを入力しログインします。Mr.Reader Login

  8. ログインすると同期が始まります。Mr.Reader 同期

  9. 記事の一覧Mr.Reader 記事の一覧

  10. 記事もGoogle Readerの時と同じように読むことが出来ました。Mr.Reader 同期

これで、Google Readerが無くなっても、快適なReader環境を整えることが出来ました。Reeder for iPhoneでも同様にログインして読むことが出来ることを確認しています。

2013年4月23日火曜日

phpで深いオブジェクトのメンバ変数を動的にアクセスする方法

phpでは変数に値を代入してオブジェクトのメンバ変数を動的アクセスすることが出来ます。

<?php
$foo->bar0 = "hoge0";
$foo->bar1 = "hoge1";
$foo->bar2 = "hoge2";
for($i=0;$i<3;$i++){
    $idx = "bar".$i;
    echo $foo->$idx."\n";
}
?>

これの結果は次のようになります。

$ php test.php
hoge0
hoge1
hoge2
$

しかし、オブジェクトが深くなるとこの方式ではアクセス出来なくなります。

<?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
    $idx = "bar->hoge".$i;
    echo $foo->$idx."\n";
}
?>

これだとUndefined propertyと言われてしまい、アクセス出来ませんでした。

$ php test.php
PHP Notice:  Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8

Notice: Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8

PHP Notice:  Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8

Notice: Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8

PHP Notice:  Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8

Notice: Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8

$

あまり、良い方法ではありませんがeval関数を使うとアクセス出来ます。

<?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
    $idx = '$foo->bar->hoge'.$i;
    echo eval("return {$idx};")."\n";
}
?>

結果は下記のようになりました。

$ php test.php
moge0
moge1
moge2
$

しかし、マニュアルにも書いてある通り、任意のPHPコードを実行できてしまう危険な関数なので用法はお間違えの無いように。

2012年8月25日土曜日

Smartyでclass定数(const)を表示する方法。

先日、phpのconstをsmartyで表示させようと思って苦戦したので、備忘録として書いておきます。

php側に下記のクラスが定義されていたとします。

<?php
class Hoge{
    const firstname = 'foo';
    const lastname = 'bar';
}
>

これをSmartyのテンプレートで表示するには次のようにします。assignはしなくてもアクセス出来る様です。

<div>firstname:{"Hoge::firstname"|constant}</div>
<div>lastame:{"Hoge::lastname"|constant}</div>