Twitterでリプライを貰った時にメール通知する仕組みをPHPで自前で実現する方法 Part1

リプライとかメンション貰った時に、メールで自分宛にメール通知する方法。

という事で、ちょっと考えてみた。
まず、特定IDに対するリプライ・メンションは
http://search.twitter.com/search.json?q=@ツイッターID
を叩く事でJSON形式で取得出来る。
(ちなみに”リプライのみ”を取得する場合は http://search.twitter.com/search.json?q=to:ツイッターID で行けるはず。)

んで、個別のツイートを識別する要素として、idid_str ってのがあるんだけど、ドキュメント未読なので違いわからないし、とりあえずid_strで識別する事にする。
@ツイッターID で検索した結果の最新のid_strの値を保持しておけば、次にデータ取得した時のid_strとの比較で、相違があれば「新しいリプライが届いている」という事になる。
相違がある場合にのみメールを送信する形で、結構簡単に実現できるはず・・・。

というわけで、以下サンプルソース。

<?php
$replyMailInfo = new ReplyMailInfo();
$replyMailInfo->setMeta('ここにツイッターID', 'ここに通知先のメールアドレス');
$replyMailInfo->checkReplyMail();

class ReplyMailInfo {

    private $mailAddress;
    private $twitterId;
    private $nowReplyId;
    private $oldReplyId;

    //ツイッターIDと通知先メールアドレス
    function setMeta($twitterId, $mailAddress) {
        $this->mailAddress = $mailAddress;
        $this->twitterId = $twitterId;
    }

    //@ツイッターID が含まれる最新のツイートを1件のみ取得
    function setNowReplyId() {
        $nowReplyJsonData = @file_get_contents('http://search.twitter.com/search.json?q=@' . $this->twitterId . '&rpp=1') or die();
        $nowReply = json_decode($nowReplyJsonData, true);
        $this->nowReplyId = $nowReply['results'][0]['id_str'];
    }

    //過去にチェックしたリプライIDをチェック
    function setOldReplyId() {
        $oldReplyId = @file_get_contents(dirname(__FILE__).'/data/reply.dat');
        $this->oldReplyId = $oldReplyId;
    }

    //新規リプライが有る場合はメール送信
    function checkReplyMail() {
        $this->setNowReplyId();
        $this->setOldReplyId();
        if (!empty($this->nowReplyId) && $this->nowReplyId != $this->oldReplyId) {
            mail($this->mailAddress, 'NewReply', 'http://twitter.com/'.$this->twitterId);
            file_put_contents(dirname(__FILE__).'/data/reply.dat', $this->nowReplyId);
        }
    }

}

?>

テストしづらいのであんまり試してないけれど、スクリプトを適当に保存して、直下にdataディレクトリを作成し、書き込み権限を与えてやれば多分動くはず。
んで、定期的にcronとかで叩いてやればよいかなー。
多分使う人は居ないだろうけれど、使う場合は動作確認した上で、自己責任でどうぞ。
(ちなみにサンプルって事で、mail関数をそのまま使ってるので、通知メールに日本語使うと余裕で文字化けします。)

んでんで…。
これだと、新しいリプライが届いた事はわかっても、その内容まではメールのみでは確認する事が出来ない。
クエリにsince_idを付加する事で、特定のステータスID以降のつぶやきを取得する事も出来るので、それを使えば、貰ったリプライをまとめてメールで受信する事も出来るはず。
というわけで、次回紹介してみようと思う。

てか、よくよく考えると、この手の「メール通知」とかって…

って感じ!

2011/04/07追記:
Pingback頂いていたので紹介してみる!
@tiltlh さんが、実際にリプライ等を通知してくれるWEBサービスを作成されたようなので紹介してみる。
リプライとかメンションとかメールで通知プログラム
何気にこの手のフィードバックってとっても嬉しい!

ぶっちゃけて言えば、私もスマホは手放さないので
不要な可能性がひじょーーーーに高いわけですけどね。

笑った。自分は余裕でガラケーだけれど、基本的に常時PC使える環境に居るし、リプとかメンションなんて滅多に頂かないし、通知不要かも!
あと…

みたいな。

ただ、人によっては結構需要あると思うのでそういう方にとってはリプライ・メンション 通知プログラム便利なサービスだと思う!

@tiltlhさん

2011年04月04日  タグ:, , ,

Leave a Reply