さんまがおいしい季節だねー(´・ω・`)

さくらがイかせてあげる ※ただしイケメンに限る

PHP,Twitter — タグ: , — さくら @ 2009/05/18 1:41

さくらです♡こんばんわ☆彡

さくらのお友達のレッサーパンダのロプロスたんが、※ただしイケメンに限る – 絶望感を味わえるWebサービスってウェブサービスをローンチしたの。
これ流行りそうとか思ってたら、案の定はてブのトップページの新着エントリに載ってたわ!!

はてブ キャプチャ

ローンチした後で「ついったーボットとか作んないの?なんならさくらが作るわよ」ってロプたんに聞いたら面白そうって言ってたんで、それ用のスクリプト置いとくわね。
もちろん他のことに使ってもらって構わないわよ。ややこしくないようにいつも通りの MIT ライセンスにしといたから、以下のファイルをダウンロードして使ってちょうだい。

Twitter.zip

zip にしたのは拡張子が .php のファイルはダウンロードできないからよwww
zip の中には Twitter.php ってファイルが一つだけ入ってるわ。
そろそろブログにソース置くのも大変になってきたから、github とか用意した方が良さげね。

Twitter.php の使い方

まあ例によって例のごとく超簡単なスクリプトなんだけど一応使い方を説明しとくわね。
こんな感じで呼び出したら発言を Twitter に投稿するわ。

<php
require_once('Twitter.php');
$t = new Twitter('USER', 'PASSWORD');
$t->twit('とぅるるるるる');
?>

もちろん ‘USER’ と ‘PASSWORD’ には自分の Twitter アカウントを指定してね。

それと Twitter.php を動かすには PHP の cURL モジュールと PHP-5.2.0 以降が必要なの。
cURL はどこの鯖にもだいたい入ってるから問題無いと思うんだけど、PHP-5.2.0 未満しか無かったら Twitter.php の json_decode を使ってる箇所をコメントアウトすれば動くわよ。
今んところ投稿する機能しか付けてないからこれで OK になんだけど、TL 見たりする場合は json_decode を外すと動かないから xml で結果を得るように REST する必要があるわね。
まあその辺は適当に改造してちょうだい。

組み込む際の注意点

今回はボットの元ネタありきの話なんでその辺のことについてもちょっと書いとくわね。
まず※ただしイケメンに限るで MySQL とか使ってると思うんだけど、データベースに投稿されたデータを挿入するあたりで Twitter への投稿も入れようとするんじゃないかしら?…こんな感じで。

$data = mysql_real_escape_string($_POST['data']);
if (!mysql_query("INSERT INTO ikemen (data) VALUES ('{$data}'")) {
    trigger_error("エラーだっぴょん", E_USER_ERROR);
}
$t = new Twitter('USER', 'PASSWORD');
if ($t->twit($_POST['data'])) {
    trigger_error("エラーだっぴょーーん", E_USER_ERROR);
}

ロプたんのソース見た訳じゃないから細かいところ突っ込まないでね。

大まかな方針としてはこれで問題は無いんだけど、Twitter って結構よく落ちるのね。
だからこれだと Twitter へのデータ反映漏れが結構出てくると思うの。
まあそれでも問題無いのなら別にいいけど、問題ある時は cron とかでエラーになったデータを後から Twitter へ再投稿するような処理を入れといた方がいいと思うわ。

まずこんな感じでオンラインで処理して…

$t = new Twitter('USER', 'PASSWORD');
$rv = (int)($t->twit($_POST['data']));
$data = mysql_real_escape_string($_POST['data']);
if (!mysql_query(
        "INSERT INTO ikemen (data, twit) VALUES ('{$data}', {$rv}")) {
    trigger_error("エラーだっぴょん", E_USER_ERROR);
}

cron とかで後からエラーデータを再投稿をするスクリプトを動かしたらいいと思うの。

$t = new Twitter('USER', 'PASSWORD');
$res = mysql_query("SELECT id, data FROM ikemen WHERE twit = 0");
while (($rec = mysql_fetch_assoc($res)) !== FALSE) {
    if ($t->twit($rec['data']))) {
        mysql_query("UPDATE ikemen SET twit = 1 WHERE id = {$rec['id']}");
    }
}

謝辞

最後に、今回のスクリプトは Twitter APIをphpで使う方法(サンプル) | りょーちの駄文と書評を参考に作りました。ありがとうございます、りょーち様!!

さくら

P.S. よく考えてみたら Twitter っぽいデザインと Twitter に投稿するリンクがあるだけで、※イケメソに限るって今のところあんまり Twitter と関係無いんじゃない?

1件のコメント »

  1. pZWiNeCveyZmZDCULK 3301

    コメント by orfvVwbBffxuiUu — 2014 年 10 月 5 日 @ 17:45

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity