Twitter で定期ツイートする Web サービスがあると思ったら意外になくて驚きましたので PHP で簡単に作ってみました。設置方法を紹介します。ちなみにこのスクリプトは即興で作ったサンプルですので、みなさん個人個人で組んでみましょう。
今回の記事で作ったサンプルはダウンロードして勉強用にお使いください。
regularTweets ダウンロード
Twitter に定期ツイートするスクリプトの仕様
- 共用サーバーなどの cron の実行間隔に制限のあるサーバーを想定
- cron でスクリプト起動した時間から10分過去までのものをツイート
- 一度ツイートしたものは再度ツイートされないようにタスク管理
全体の構成
- index.php
- tweets.yaml
- logs.yaml
- PEAR
- spyc
index.php
実際に定期ツイートをするスクリプトを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | require_once "spyc/spyc.php"; $tweets = Spyc::YAMLLoad('tweets.yaml'); $logs = Spyc::YAMLLoad('logs.yaml'); $task = Array(); $end_task = Array(); for($i = -10; $i <= 0; $i++) { $key = date('H-i', strtotime("$i minute")); if(!isset($logs[$key]) && isset($tweets[$key])) $task[$key] = $tweets[$key]; } $twitter = new twitterOAuth(); foreach($task as $tweet) { $twitter->twitterPost($tweet); } for($i = -90; $i <= 90; $i++) { $key = date('h-i', strtotime("$i minute")); if(isset($logs[$key])) $end_task[$key] = $logs[$key]; if(isset($task[$key])) $end_task[$key] = $task[$key]; } $end_logs_yaml = Spyc::YAMLDump($end_task); file_put_contents(dirname(__FILE__) . '/logs.yaml', $end_logs_yaml); class twitterOAuth { const CONSUMER_KEY = '1234567890', CONSUMER_SECRET = '1234567890', ACCESS_TOKEN = 'qwertyuiop', ACCESS_SECRET = 'qwertyuiop'; public function __construct() { set_include_path(dirname(__FILE__) . '/PEAR'); include 'HTTP/OAuth/Consumer.php'; $this->consumer = new HTTP_OAuth_Consumer(self::CONSUMER_KEY, self::CONSUMER_SECRET); } public function twitterPost($status) { $this->consumer->setToken(self::ACCESS_TOKEN); $this->consumer->setTokenSecret(self::ACCESS_SECRET); $response = $this->consumer->sendRequest("http://twitter.com/statuses/update.xml", Array('status' => $status), "POST"); } } |
twitterOAuth クラスの定数部分は自分のアプリケーションのキーやアクセストークンなど入れてください。最近アクセストークンを簡単に習得できるようになったので楽です。
tweets.yaml
なんとなく yaml を使います。以下のように時間をキーにしてツイート内容を書きます。
1 2 3 4 5 6 7 8 9 | 00-20: これは00:20のツイートです 00-30: これは00:30のツイートです 00-40: これは00:40のツイートです 00-50: これは00:50のツイートです 01-00: これは01:00のツイートです 01-10: これは01:10のツイートです 01-20: これは01:20のツイートです 01-30: これは01:30のツイートです 01-40: これは01:40のツイートです |
logs.yaml
これはツイートしたログを残すものです。既にツイートしたかを確認して重複のツイートを防ぎます。このファイルが作れるようにパーミッションなどを設定しておいてください。
PEAR
以下の PEAR ライブラリを使います。PEAR ディレクトリに格納しましょう。
spyc
spyc という yaml を扱うのに良いライブラリがあります。
spyc – A simple YAML loader/dumper class for PHP – Google Project Hosting
これをダウンロードして spyc ディレクトリにしてそのまま入れましょう。
ディレクトリ名や階層など変更したら index.php も変更しましょう。
実際に cron で実行してみる
index.php を動かしましょう。
1 | php index.php |
これで動いたら cron などで毎分とかに叩いて実行します。そうすると指定した時間に近いツイートが自動で投稿されます。
ちなみに heteml で cron で実行する場合は毎10分で実行可能です。そんでもって sh で PHP ファイルを実行するときは少し癖があるので私のシェルスクリプトを公開しておきます。
レンタルサーバー「heteml」 – cron 設定マニュアル
1 2 3 4 5 6 7 | #!/bin/bash #!/usr/local/bin/php53 cd /path/to/regularTweets /usr/bin/php53 index.php exit |
コメント