Twitter連携(2) phpソース

harayoki

2007年05月16日 12:59


twitterSample links


Twitter連携サンプルのphpソースもhttpRequestモジュールより先に公開しておきます。

オフィシャルのデベロッパー向けページ
にあるサンプルphpソースを改造しただけです。

ざっとですがphpの処理の流れを解説します。

SLよりhttpRequestを用いたPOST送信の内容を受け取り、
ユーザ名、パスワード、メッセージが含まれているか確認。
そうでなければ"error パラメータがたりないヨ"文字列をSLへ返します。
その後curlを用いて(すいません良く知りません)TwitterのAPIにアクセスします。
APIアクセスが成功すれば"success"の文字列をSLへ返します。
失敗した場合は"error なんたらかんたらな理由です"という文字列をSLへ返します。

TwitterのAPIアクセスにはBASIC認証が必要な模様です。
lslWiki llHTTPRequestによれば

Although the HTTP_AUTHORIZATION parameter is not available, you may still login to websites requiring basic authentication by formatting your url appropriately:

string username = "Your Name";
string password = "Your Password";
string url = "http://" + llEscapeURL(username) + ":" + llEscapeURL(password) + "@domain.com/page.php";

HTTP_AUTHORIZATIONパラメータは実装されていないが、
上記のようなフォーマットでurlにアクセスすればBASIC認証が必要なサイトにアクセスできる(かも??)

とあるので、ひょっとしたらphpをはさま無くても
直接lslからTwittersのapiをたたけるかもしれませんが、
楽天CD検索サンプルの時の用に2048バイトの壁に苦労しそうな気がしたので、試していません。
色々外部と連携をとるときは合間のphpを書いたほうが
lslだけで実装するより全然楽だなあ…とは思うのですが
lslだけですむのなら別途リソースを必要としないので、それも魅力的ですね。


<?php

function postToTwitter($username,$password,$message){

$host = "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($message)));

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);
$resultArray = curl_getinfo($ch);

curl_close($ch);
if($resultArray['http_code'] == "200"){
echoStatus(TRUE,"");
} else {
echoStatus(FALSE,"http_code is ".$resultArray['http_code']);
}
}
function echoStatus($bOn,$errormes){
if($bOn){
echo "success";
}else{
echo "error ".$errormes;
}
}
$p_user = $_POST['user'];
$p_password = $_POST['password'];
$p_message = $_POST['message'];

if($p_user==""){
echoStatus(FALSE,"invalid username");
}else if($p_password==""){
echoStatus(FALSE,"invalid password");
}else if($p_message==""){
echoStatus(FALSE,"invalid message");
}else{
postToTwitter($p_user,$p_password,$p_message);
}
?>


Twitterのサーバ、重いですね…。
すぐネコがでる。
Twitterボール