10分で作る Twitter に定期ツイートする PHP スクリプト

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

コメント

コメントは受け付けていません。