ちょっと書いてみたのでせっかくなので公開してみますね。最大の問題点はユーザ名とパスワードをどのように格納するかという話ですが、ここでは安直にファイルにそのまま書いています。少なくともこのファイル自身はApacheで見えないパスに格納して、別のPHPファイルから呼び出すなど、セキュリティには十分留意してください。
<?php
//PEAR:HTTP_Requestを必要とする
require_once "HTTP/Request.php";
/**
* ユーザ名とパスワードの定義
* 注意! このファイルはApacheから見えないパスに配置するなど、
* セキュリティに十分留意してください
* 別途DBに格納するなどの方法をお勧めします
*/
define('TWITTERUSER','hogehoge@hoge.local');
define('TWITTERPWD' ,'xxxxxxxx');
define('NOWAUSER','hogehoge');
define('NOWAPWD' ,'xxxxxxxx');
/**
* Twitterに投稿する
* @param $message メッセージ
* @return 投稿結果(true or false)
*/
function sendToTwitter($message)
{
return sendMessage($message, "http://twitter.com/statuses/update.xml", TWITTERUSER, TWITTERPWD);
}
/**
* nowaに投稿する
* @param $message メッセージ
* @return 投稿結果(true or false)
*/
function sendToNowa($message)
{
return sendMessage($message, "https://api.nowa.jp/status_message/update.json", NOWAUSER, NOWAPWD);
}
/**
* Twitter互換API投稿メソッド
* @param $message メッセージ
* @param $url 投稿URL
* @param $user ユーザID
* @param $pwd パスワード
* @return 投稿結果(true or false)
*/
function sendMessage($message, $url, $user, $pwd)
{
// メッセージ検証
if (!isset($message)) return false;
$message = trim($message);
if ($message == '') return false;
// HTTP_Requestを組み立てる
$req =& new HTTP_Request($url);
$req->setBasicAuth($user, $pwd);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$message=mb_convert_encoding($message, 'UTF-8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS');
$req->addPostData('status', $message);
// HTTP_Request実行
$response = $req->sendRequest();
// 結果検証
if (PEAR::isError($response)) {
return false;
} else {
return true;
}
}
/**
* Twitterから最近のメッセージを取得する
* @return [日時配列, メッセージ配列]の配列
*/
function getMyMessage()
{
// HTTP_Requestを組み立てる
$req =& new HTTP_Request("http://twitter.com/statuses/user_timeline.xml");
$req->setBasicAuth(TWITTERUSER, TWITTERPWD);
// HTTP_Request実行
$response = $req->sendRequest();
// 結果検証
if (PEAR::isError($response)) {
return false;
}
// XMLから日時とメッセージを取得
$xml = simplexml_load_string($req->getResponseBody());
$dates = $xml->xpath('/statuses/status/created_at');
$texts = $xml->xpath('/statuses/status/text');
return array($dates, $texts);
}
?>


