2016.4.22
0からはじめるPHP#89【cronによる自動ツイート#2】
日記更新をツイートする機構を考えてみようということですが、実際どのように検知すべきかを考えたいと思います。
僕が正確に日記を更新できれば、その日付の日記が存在するかどうか調べてーみたいなことをやればいいのですが
過去や未来の日付を平気で書くので、もう少し考えなくてはいけません。
そこで
データベースの活用です。
サーバーに情報を書き込んだり保存したりってのはデータベースの十八番ですからね。まぁこれぐらいならテキストファイルかなんかに入れときゃいいんですが
バグるとヤバいので、管理が簡単なデータベースを使うことにしましょう。
さて、具体的な指針としてはこんな感じです。
(1)データベースに格納された日付を参照し、それよりも未来でかつ現実の日付を超さないファイルが存在するかチェックする。
(2)新しいファイルが見つかった場合「更新」と判断し、題名ファイルをincludeして題名が存在していたらDBを更新しツイートする。
※ファイルとタイトルどちらか一方が欠けてたら表示されないようになってます)
※ちなみにSQLiteを使用する予定です。
SQLiteを使う理由は
サーバー以外が更新することがない(同時書き込みが存在しない)ことが理由です。
使い慣れたMySQLを使ってもいいんですけど、まぁMySQLしか使えない、ってのはアレですし、ちょっと違うものも使ってみましょうよ、ということで。
そSQLiteはデータベースとしてはおもちゃみたいなものなんですが、速度が早いし組み込み型のファイルタイプなので特別なデータベースシステムを必要としないとかで、適材適所な使い方をすればとても良い感じになります。
ということで、練習も兼ねてデータベースシステムとしてはSQLiteを使おうかなと思っています。
具体的なメソッドとしては(1)に書いた通りなんですけど、それをどのように表現するか、ですね。
twitterで告知する以上、バグったら大変なので、複数タイトルの更新とか追加とかはあんまり告知しない方が良いかもなぁと。
まぁ実際、1日に複数の話題を別々に追加して更新することって稀だと思うので。
だったら明日のネタにしよ^^ってなりますから←
cronをどれぐらいの頻度で実行すべきかはよくわかりませんけど、そんな負担をかけるわけでもないと思うので1分間隔とかで回しても問題ないんじゃないかなぁとか思ってます。
とりあえず肝としては、日付の情報をデータベースに格納するということですね。形式はDatetimeでいいと思いますけど、扱いづらかったら自作するかも知れません。
ちょっと文章で考えてみましょうか。
基準が「現在時刻」と考えて、まずデータベースに問い合わせをしなくてはいけません。
どのような問い合わせをするかというと、データベースに書き込まれている日付と同一かどうかというのを見るわけですね。
しかしDatetime型だと、timeの部分が鬱陶しいですね。Dateだけにするって手もありますが、将来的な拡張性とか考えてDatetimeで実装してみることにしましょう。
・・・・・・と思ったのですが、
どう考えても時刻は邪魔でしかないので、Date型で進めた方が良いという結論になりました。
というのも、ファイル名が日の部分を司ってるので、比較演算する時はやっぱ整数の方がいいかなと。
将来的に時刻が必要になったら、また別のカラムに用意すれば良いだけの話な気がしてきました。とりあえず、UNIX哲学にもあります通り
早すぎる最適化は諸悪の根源であるとのお言葉にしたがって、まずは日付のみで比較演算しようかなと思います。
いい感じに結論が出たので次は実装に入るとしましょうか。
あ、予告ですが
明日はJKをストーキングします。