「 twitter 」一覧

twitterのbotで超巨大なステータスナンバーを比較できた

やっと困っていた問題が解決した。
その問題とはtwitterのbotにおけるステータスナンバーの比較だ。
以前話題になった問題の一つに『2,147,483,647問題』というのがあった。
これはプログラム言語での処理時にオーバーフローを起こし、自分が意図した処理とは別のことが起こってしまう問題だ。
その原因は変数の許容する数字の桁数だった。

変数の型について

プログラム言語の変数には型と言われる分類があり、
それにより色々な処理が楽にできるようになっている。
その型の一つに『interger』と言うのがある。
これは数字を扱う型の一つなんだけど、
その型というのは数学としての数字と文字列としての数字を区別するのに必ずいる。
数字を計算しようとしてるのに連結したりしたら困るからね。

で、PHP言語における解決方法としてはintergerじゃなくてfloatを使う。
これで多くの問題は解決する。
このfloat型の変数というのは14桁の数字まで扱える。
これは10兆の桁まで扱えるものなんだけど、現在のTwitterのステータスナンバーは1000兆の桁を超えているみたい。
そりゃエラーも出ますね。

僕の環境ではbotがステータスナンバーを比較して返答をする時にその不都合は効いてくる。
毎度取得するステータスナンバーが変数の桁数から溢れて、全然正しくないランダムな数字になる。
これにより特定の発言へ延々と返信したり、全く返信しなかったりしたのだ。

ステータスナンバーの比較

さっそく自分が書いたコードを貼り付ける。
[php]
//TwitterAPIを呼び出すのは省略
$xml = “TwitterのAPIを呼び出した結果がxmlで入っている”

//比較されるステータスナンバーを配列に入れる
$hikaku_number = “10000000000000000”;
$array_hikaku_number = str_split($hikaku_number);

//比較開始
foreach( $xml->status as $value ){
//発言のステータスナンバーを配列に入れる
$status_number = strval($value->id);
$array_status_number = str_split($status_number);

//ステータスナンバーの比較のためのフラグ
$reply_flag = false;
$break_flag = false;

//まずは桁数の比較。次に前から順に数字に変換して比較。
if( count($array_status_number) > count($array_number) ){
$reply_flag = true;
} else {
$i = 0;
foreach( $array_status_number as $value ){
if( $value === $array_hikaku_number[$i] && $break_flag === false){
//何もせずに次の位へ
}elseif( $value > $array_hikaku_number[$i] && $break_flag === false){
$reply_flag = true;
$break_flag = true;
}else{
$break_flag = true;
}
$i++;
}
}
if ($reply_flag){
//投稿処理
}
}
[/php]
『$xml』の中には既に呼び出されたAPIがXMLの形で入っているとする。

そして比較方法はステータスナンバーを配列に一桁ずつ入れ、それを比較するという感じ。
最初はステータスナンバーを文字列として扱い、それを前から一つずつ配列に入れていく。
配列に入れたら数字をinterger型に変換して比較作業へと移る。
6行目と12行目が一桁ずつ配列に入れているところね。

15,16行目は配列を比較するための分岐フラグ。
19行目で桁数を比較し、異なる場合はステータスナンバーの方が大きいと判断。
同じ場合は23行目から33行目までの間で処理をする。
23行目は数字が同じだった時、26行目はステータスナンバーの方が大きかった時、29行目は小さかった時です。

そして大きかった時のみ35行目から37行目の間で投稿処理等をする。

まとめ

記事を書いていて思ったけど、もっとスマートな方法があるんだろうな。
ステータスナンバーの比較で詰まったとか最近は全く見あたらない気がするし。
でも、この配列を利用する方法なら桁数が大きくなっても結構いけると思う。
いつかは桁数が溢れる時が来るけど、それはまだ大分先だろう。

さて、次の問題は自動フォローアンフォローのスパムブロック機能付きを探すことかな?
これがあればbotもスパムに汚染されなくて良いし助かるんだけどな。
もし良い方法があればコメントとかで教えてくださいლ(╹◡╹ლ)


twitterのbotなどで OAuthを使う方法(PHPバージョン2)

twitterのbotなどで OAuthを使う方法(PHPバージョン)』へたくさんの人が来られるのでその誘導用記事。

まずtwitterに登録しよう

bot用のOAuthの設定を始めるに当たってtwitter側で登録する必要がある。
botのアカウントでtwitterにログインをした状態で以下のリンクへ。
Twitter Applications | dev.twitter.com
すると下の画像のようなアプリケーション一覧画面になる。
まだOAuth用の登録をしていないなら一覧には何も表示されません。

登録してあるOAuthの一覧

画面右側にある『新しいアプリケーションを登録する』をクリック。
そうすると下のような設定画面がでて来る。

簡単な設定画面

設定してアプリケーションを登録した後、アプリケーション一覧画面へ戻る。
登録したアプリケーションの画像をクリックすると個別の情報ページへと飛ぶ。

アプリケーションの個別画面

モザイクかけてあるところが秘密にするべき情報。
bot用の設定ならばCallback URLは空欄だ。
この画面の中の『Consumer key』と『Consumer secret』が今回OAuthを使うのに必要なもの。

そして画面右側にある『My Access Token』をクリック。
そうすると『Access Token』と『Access Token Secret』が発行される。

これら4つのランダムな文字列を使ってOAuth用のプログラムを動かす。

プログラムの準備をしよう

まず、『abraham’s twitteroauth at master – GitHub』からプログラムをダウンロードしよう。
バージョンは0.2.0以降のものをダウンロードする。βが付いてるけど動くみたい。

バージョン0.2以降をダウンロード

ダウンロードし解凍した中の『twitteroauth』フォルダの中の『OAuth.php』と『twitteroauth.php』を使ってbotを動かす。
それら二つをbotと同じ場所にコピペだ。

動作テストの例としてAPIを使うサンプルを少し詳しく紹介。
http://api.twitter.com/1/statuses/mentions.xml?count=30』の内容をモニョモニョする。
PHP5以降が必須です。

[php]
OAuthRequest(“http://api.twitter.com/1/statuses/mentions.xml”,”GET”,array(“count”=>”30”));
//扱いやすくする
$xml = simplexml_load_string($result);

//foreachを使い処理をする
foreach( $xml->status as $value ){
$status_number = $value->id; //個別発言のステータスナンバー
$text = $value->text; //発言内容
$screen_name = $value->user->screen_name; //発言者のtwitterID

//各発言を表示する(botだと$textに特定文字列がある場合リプライするとかの処理を入れる)
echo $screen_name . “さんから@が飛んできました。
“;
echo “発言内容は” . $text . “で、その個別ページはhttp://twitter.com/” . $screen_name . “/status/” . $status_number . “です。
“;
echo “
“;
}
?>
[/php]

コードの上にマウスを持ってくるとコードの右上の方にプリンタの画像とかが出てくるので、
その一番左にあるプレインテキストの画像をクリックすれば別ウインドウにコピペしやすく再表示されます。

以上で解説は終わりです。
何か質問があればコメント欄へよろしくお願いいたします。


CakePHPで作った携帯電話用twitterクライアントのソースを公開

けーついのコンセプトはパケ死しない

2ヶ月ほど前に携帯電話用のtwitterクライアントを作った。
色々あってソースコードを公開することにした。

ちょっと一人で開発を続けるのに時間がかかりすぎるのもあって公開に踏み切った。
あとサーバーの限界がわからないとか色々。
このブログと同じサーバーに上げているので何かあったらブログ共々ダメになるしね。

ソースコード:hosimitu’s k-twi at master – GitHub

それからどこかに使い勝手の良いサーバー無いかな?
GAEはダメじゃないけどフレームワークが動かせないし・・・。


『プログラミングができなくても作れるTwitter botの作り方』を勝手にOAuthにした

プログラミングができなくても作れるTwitter botの作り方』の投稿部分を勝手にOAuthにした物を、著作権表記を付けたまま勝手に配布。
使い方は上記のページを参照。

ダウンロード

ダウンロード(ver.1.42をベースに独自にOAuth関係を組み込んだ) 動作確認済み
ダウンロード(ver.1.42をベースにver.2.04の機能を盛り込んだ) 動作未確認

著作権とか重要なお約束

twitterのbotなどで OAuthを使う方法(PHPバージョン2)』の記事を参考にOAuth登録出来た人のみが使用することを許される感じです。
『まずtwitterに登録しよう』以降を参考にして手順を進めてください。

OAuthを呼び出したりする部分のプログラムは『abraham’s twitteroauth at master – GitHub』を使っています。
また、twitterにOAuthを登録する部分のプログラムは『PHP+OAuthでTwitter』を使っています(; ・`д・´)

ライセンス関連がいまいちわからないのでご一報で即削除します。

仕組みとか

$oauthがtrueの時OAuthを使って投稿します。
falseの時は従来通りのユーザー名とパスワードで動きます。
OAuthを使う時パスワードは必要ないですが、ユーザー名は設定してください。
タイムラインから自分の発言を除いたりする時に使っています。

『Servises』フォルダ内の『Twitter.php』をリネームして『Twitter_oauth.php』とし、それを改造しています。

2010.1.30 記事修正
2010.3.5 ver.2を組み込んだものを公開

2010.3.16 プログラム修正
ユーザーさんから『Twitterbot の特定の単語に反応してリプライ反応するサンプルスクリプト ver.2』を使いたいと要望があったのでver1.42bを修正。
こんなことするのなんて今回だけなんだからねっ!
礼儀正しかったからしただけなんだからねっ!


CakePHPで携帯用twitterクライアント作った

今さら感が溢れる所なんだけど、自分最適されたものが欲しかったので作って見た。
CakePHPと言うフレームワークを使って、あとから機能が足せるように作っている。
そんなヤツの名前は『k-twi/けーつい』だ。

けーついのコンセプト

コンセプトはパケ死しない方向で。
今はまだ他と比べてダントツ軽いというわけではない。
基本的な機能を押さえているとは思うけど、公式より便利、他のクライアントよりは・・・と言う位置づけ。

いろいろ調べてるんだけど、2009年12月時点でクラウドサービスではcakePHPが動いた事例を見つけれていないので、
登録者数が増えたら登録を停止するかも知れない。
また、写真系の他サービスとも連携が取れていないところが痛いな。
自分一人の力の限界を感じてしまう(w_-; ウゥ・・

今後の方向性としては小ネタアプリの集合体にする予定。
友達間で遊べるゲームとかを作りたいなと。
アイデアは湧くけど、指先からコードが湧かない。

質問とかはメールかtwitterの方で。
すぐに返答できるとは限らないですが。。。

2010.2.16 追記
CakePHPで作った携帯用 twitterクライアントのソースを公開


スポンサーリンク
スポンサーリンク
スポンサーリンク