twitter BOT作成しようとしてみた その2(修正)
結局セッション使えないみたいな結論になったので、
違うやり方でやってみようと思います。
セッション使えない理由
・セッションは必ずしも保障されたものではない事
・コマンドから実行されるものはステートレスである事
があるみたいです。セッションIDが保持できていれば動くことは動きますが、
上記1つ目の理由でやめておいたほうがいいみたいです。
ファイルに書き込んでみました
<?phpApp
::import('Core', 'HttpSocket');App::import('Core', 'Xml');function
search() {$dir = WWW_ROOT . 'test.txt';
uses('file');//インスタンス化
$file = new File($dir);
$file->create();$HttpSocket = new HttpSocket();
$url = 'http://d.hatena.ne.jp/megane_bomb/rss';
$ret = $HttpSocket->get($url);if (
$ret) {
$Xml = new Xml($ret);
$data = $Xml->toArray();
}
$readData = $file->read();
if(!isset(
$readData)){
$file->write($data['RDF']['Item']['0']['title']);
}else{
if($readData === $data['RDF']['Item']['0']['title']){
$this->Twitter = ConnectionManager::getDataSource('twitter');
$this->Twitter->status_update($data['RDF']['Item']['0']['title']);
echo $data['RDF']['Item']['0']['title'];
}
}
}
!注意!
書き込むフォルダにきちんと権限あげないとファイルが作成できないので気を付けてください
権限もろもろのまとめ
・ファイルの権限は ls -al で見れます・r 読み / w 書き / x 実行
の三つで1カタマリです・1つ目のカタマリの権限は自分をあらわす
2つ目はグループ 3つ目はその他 みたいな感じです・ブラウザから実行した場合と、コマンドから実行した場合は実行者が違います
ブラウザの場合は所有者が、_wwwとかになります(アパッチとかってことかな)
コマンドは自分自身とか。(ユーザー名とか)なので、所有者が_wwwなファイル(rw-r--r--)に
同じグループのユーザーが書き込みをしようとしても、できないってことみたいです。そういうときは chmod 755 ファイル名 とかで権限かえてあげてください。
数字の意味は r:4 w:2 x:1 の論理和です
rw-r--r-- → 644
rwxr-xr-x → 755ってことです
memo
★標準出力と標準エラー出力
・ls とかで フォルダやファイルが勝手に出力されるのを標準出力
・ls hoge とかでエラーを勝手に言ってくれるのが標準エラー出力出力して欲しくない場合は、適当なファイルを作ってそこに出力するようにリダイレクトする
ls >test.txt とすると、結果がtest.txtにリダイレクトされて出力される
ls hoge > test.txt とすると、リダイレクトされそうなものだけど、実はリダイレクトされない。リダイレクトさせたい場合は >& を使用してリダイレクトする
他には 1> や 2> も使用できる
→1は標準出力 2は標準エラー出力 の時にリダイレクトできるなので、こんな使い方できる
ls >test.txt 2>&1 エラーを標準にリダイレクトするので、どっちでもリダイレクトしてくれます
まとめ
> 標準出力のみ
1> 標準出力のみ
2> 標準エラー出力のみ
cronは実行したら、メールが必ずくるみたいなので、コマンドの後に 1> /dev/null を付けるとエラー以外はメール来なくなります
→/dev/null はごみ箱みたいなもの?破棄してくれるってことみたいです
コマンドとかあんまり使ったことなかったから
php -f /Library/WebServer/Documents/www/cron.php
こんなんで、PHP実行できるとか初めて知りました
無知すぎてやばい