【Twitter】 BOT製作支援スレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/27(日) 14:15:59ID:Dz08qoo4[公式] http://twitter.com/
[Twitter 開発ブログ 日本語版] http://twitterjp.blogspot.com/
*どの言語でもOKですがソースを書く際は何の言語なのかも記載してください。
*初心者のために、なるべくぶつ切りのソースではなく全体的に載せてほしいです。
0577529
2009/12/14(月) 20:21:19ID:???ありがとうございます!とりあえず===にしました
エラーはFatal error: Maximum execution time of 8 seconds exceeded in…というエラーが時々出ます。
鯖とツイッターどちらでタイムアウトしているかは分かりません。
とりあえず今set_time_limitで指定しましたが今は結果待ちです。
cron-jobが全く動いてくれないのもこのせいでしょうか?
今日の昼に毎日毎時0分に叩くよう設定しましたが1回も動いてくれません…。
@pagesとcron-jobで動いている人は沢山いるようなのでコツがあるのでしょうか?
Aktiv?はちゃんとjaにしています。
0578529
2009/12/14(月) 20:28:28ID:???@pagesではset_time_limitが使えませんでした…
0579543
2009/12/14(月) 21:33:06ID:???うーん。変数の型が違うと暗黙の型変換が行われるから===を使うべきってのはわかってるんだ。
また同じことを言っちゃうけど、「同じ型の場合」に == と === で何が違うの?て話なんだ。
もちろん、値が保障されない場合も考えて===を使う「べき」ってのはわかるし
コーディングするときはもちろんそうするだろうけど
型が同一の場合にも==だとなんか問題あるのかなって確認したかったんだ。
特になさげかな。
0580DAWNTO_Windy-melt ◆Windy/f9HNwg
2009/12/14(月) 22:07:50ID:???今現在@windymeltanにmaximaプラグインを積んでいます。数式処理のテスト中です。
@windymeltan maxima:2+4;
のように書いてテストしていただいて結構です。
乱筆しました。失礼。
0581nobodyさん
2009/12/14(月) 22:59:49ID:???0582nobodyさん
2009/12/15(火) 00:07:48ID:???毎時0分はたくさんの方が設定していると思われます。
処理内容にもよりますが、ジャストタイムが不要ならば13分とか、48分とかの
中途半端な時間に設定した方が良いかもしれませんね。
1分とかだとサーバーがまだ0分のヤツを処理してたりしてw
0583DAWNTO_Windy-melt ◆Windy/f9HNwg
2009/12/15(火) 00:43:48ID:???PHPのバッククォートはきちんとエスケープしませう。というお話でした。
0584nobodyさん
2009/12/15(火) 08:40:01ID:???なぜナウやnawではなく「なう」なのか
http://d.hatena.ne.jp/RRD/20090727/1248682147
0587nobodyさん
2009/12/15(火) 11:12:56ID:???0588nobodyさん
2009/12/15(火) 14:13:06ID:???PHP呼び出すHTML作ってアクセス解析付けたけど何もログが残ってない
0590nobodyさん
2009/12/15(火) 14:31:21ID:???10ツイート/day程度の頻度で、ポスト候補のテキストパターンは100近く仕込んであるのに
やたら同じのばかり選ばれるみたいで、ポストが飛んでしまうことがよくある。
cronも安定してるし他の挙動には問題ないので、この状態がすごく気になる…
どうにか回避する方法はないでしょうか。
0591nobodyさん
2009/12/15(火) 15:41:37ID:???自分の発言最新10件と一致しなければpostする様にするとか
0592nobodyさん
2009/12/15(火) 15:49:39ID:???0597nobodyさん
2009/12/15(火) 18:10:54ID:???//ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
$results = 0;//重複判定用
//キーに該当するポストとログが同じか調べる
foreach($log as $logs){
if($logs === $plist[$key]){//ログと重複した場合
$results=1;//重複している
break;//重複しているのでforeachから抜ける
}
}
if($results==0){//$resultsが0すなわち過去10件と重複してない場合
$post=$plist[$key];//ポストする文にする
}
これでどうだ
0598nobodyさん
2009/12/15(火) 18:37:19ID:???0601nobodyさん
2009/12/15(火) 20:07:07ID:???被ってたらポストしないじゃなくて
>>529が>>539で言ってたみたいにもう一度array_randしないと
結局ポストせず終わるから駄目じゃないか?
それするとタイムアウトするみたいだけど
0602nobodyさん
2009/12/15(火) 20:15:04ID:???・ポストリストからランダムにポストする文を選ぶ
・ログと被ってないか判断
・被ってたら選び直し
・最新ポスト追加した最新10ポストのログ再作成
・ポスト
>>529はこれだけ入れたソース作ったみたいだけど
確かに判定入れるならこれだけやらないと意味ないんだよね…
別プログラムでリプライとか入れてるならそっちも含めたログにすると理想的
0603nobodyさん
2009/12/15(火) 20:33:24ID:???0604nobodyさん
2009/12/15(火) 20:43:17ID:???ちゃんとポストするために入れてるんじゃないの?
結局ポスト出来ないなら判定もログ保存もツイッターがしてくれるからいらないよ
0605nobodyさん
2009/12/15(火) 23:59:15ID:???botがまったく無反応になってしまった・・・
0606DAWNTO_Windy-melt ◆Windy/f9HNwg
2009/12/16(水) 00:14:04ID:CexvtTFshttp://knowledge.ddo.jp/info/index.php?option=com_content&view=article&id=51:maximaplugin&catid=35:2009-12-12-10-21-55
0607nobodyさん
2009/12/16(水) 00:59:49ID:???//ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
//キーに該当するポストとログが同じか調べる
foreach($log as $logs){
if($logs === $plist[$key]){//ログと重複した場合
$key=array_rand($plist);//もう一度探す
continue;//foreachに戻る
}
}
$post=$plist[$key];//ポストする文にする
こうか
0608nobodyさん
2009/12/16(水) 01:08:08ID:???これは・・・ゴクリ
0609nobodyさん
2009/12/16(水) 01:11:00ID:???0610nobodyさん
2009/12/16(水) 01:34:58ID:???ばれなきゃいいと思ってたけど指摘されたか。
//ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
$i=0
//キーに該当するポストとログが同じか調べる
while($i<10){
if($log[$i] === $plist[$key]){//ログと重複した場合
$key=array_rand($plist);//もう一度探す
$i = 0;//$logのキーを元に戻す
continue;//whileに戻る
}
$i++;//$logのキーを1つ進める
}
$post=$plist[$key];//ポストする文にする
何度もすまん。けっきょくwhileに戻ったな。
@pagesみたいな鯖じゃなくてもっといい鯖使えばいいのにとか思ったり。
0611nobodyさん
2009/12/16(水) 01:54:02ID:???$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
$key = array_rand($plist);
$log_slice = array_slice($log, 0, 10);
while (in_array($plist[$key], $log_slice)) {
$key = array_rand($plist);
}
$post = $plist[$key];
//do〜whileでもいいけど
0612nobodyさん
2009/12/16(水) 10:29:53ID:???↑これって配列をつくって並べてる、であってる?
まずいの?
phaさんのこれじゃね?
0613nobodyさん
2009/12/16(水) 10:44:25ID:???あと改行削るべきだし、できたらファイル読み込みとかにエラーチェック入れたいが。
$filename = "plist.txt";
$filename2 = "log.txt";
$plist = @file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$log = @file($filename2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$plist_uniq = array_diff($plist, array_slice($log, 0, 10)); //重複しない候補
$post = $plist_uniq[array_rand($plist_uniq)];
0614nobodyさん
2009/12/16(水) 10:45:55ID:???エラー出さなくするものだから。
0615nobodyさん
2009/12/16(水) 11:02:27ID:???xmlで取って来れないものか
そうしたら最新10件のログを作成する部分だけはいらなくなる
0616nobodyさん
2009/12/16(水) 11:06:29ID:???0617nobodyさん
2009/12/16(水) 11:13:08ID:???まあいんじゃね。
ていうかxmlでもjsonでもAPI叩けば拾ってこれるし。
0618nobodyさん
2009/12/16(水) 11:35:25ID:GKFzjgHobotというかPHP初心者で取っ掛かりが分かりません。
スクリプトがあまり重くなると困るので、
タロットの結果を書いたxmlを作って「占って」とリプライされたら
そのつどタロットのxmlを読み込んで結果をランダムに出力するとか可能ですか?
それともみなさん、
$tarot=array("",""......);
とかでやってるんでしょうか・・・?
0619nobodyさん
2009/12/16(水) 12:20:23ID:???ログ生成を追記モードでやってる場合は下の方が最新ログになるから
ログ読み取りの部分と被ってない部分の抽出はこうじゃ駄目かな
//ログ読み取りの部分
$filename2 = "log.txt";
$fp2 = fopen($filename2,'r+');
flock($fp2, LOCK_EX);
for($i = 0;!feof($fp2);$i++){
$log[$i] = fgets($fp2);
}
fclose($fp2);
//被ってない部分の抽出
$plist_uniq = array_diff($plist, array_slice($log, $i-10, $i));
上から10個が最新ってログ作成の時にやりにくいしタイムアウトの一因になると思う。
ただfgetsの時はどうやって空行と改行文字飛ばせばいいか分からないし
array_slice使ったこと無いから位置指定に変数が使えるかどうか試してない。
配列の最後のキーを簡単に取得できる方法があったらごめん
0620nobodyさん
2009/12/16(水) 14:11:14ID:???そこで行数カウントしなくても
$plist_uniq = array_diff($plist, reverse(array_slice($log,0,10)) );
reverseで逆転すればいいだけだし
要素数カウントするなら別に $i = count($log) ;みたいなこともできる。
0621nobodyさん
2009/12/16(水) 14:14:05ID:???$plist_uniq = array_diff($plist, array_slice($log,-10) );
0622nobodyさん
2009/12/16(水) 23:19:30ID:j0jV78ZZここにヒントが...
0623nobodyさん
2009/12/17(木) 01:12:23ID:???0624nobodyさん
2009/12/17(木) 21:45:44ID:???そのDMのメッセージ内容に相手のname(screen_nameじゃない方)を使いたいときどうすればいい?
0625nobodyさん
2009/12/17(木) 22:32:36ID:???0626nobodyさん
2009/12/18(金) 00:57:26ID:???0627nobodyさん
2009/12/18(金) 19:37:19ID:???フォローイングとフォロワーのAPIでname取得できなくね?
0628nobodyさん
2009/12/18(金) 19:42:38ID:???0629nobodyさん
2009/12/18(金) 20:11:26ID:???クライアント名を変えられるのが人気らしいですね。
使ってますか?
私はまだベーシック認証ですが。
0630nobodyさん
2009/12/18(金) 21:22:41ID:???phaさんのプログラミングを利用させてもらっています。
本日botのパスワードを変更したらその後まったくbotがうごかなくなってしまいました。
普通投稿とリプライ投稿ともまったく別のエラーになります。
普通投稿の方は パスワードかユーザー名が違うとのことですが、
普通にこのIDとパスでtwitterにログインできるので間違っているはずがありません。
どこか別の記述が間違っているのかと別IDでpostしてみましたが通常通り動きました。
何故か一体のbotだけうまくいかない状況です。
もう一点、同botなのですがリプライの方は
Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in /usr/local/www/htdocs/○○/public_html/Services/Twitter/Jsphon/Error.php on line 185
と出、185行目にエラーがあるそうですが、185行目は
$message = convert_text($message);
で何が問題あるのかさっぱりわかりません。
他の正常に動いているbotのソースを丸々コピーしてみましたが同じエラーになります。
自分ではこれ以上の原因究明ができませんでした。
twitterのアカウントに問題がある気がするのですが、
twitterのhome画面ではちゃんと書き込みができるのようでもう何が何やらさっぱりです。
申し訳ございませんが誰かご教授いただけると嬉しいです。
0631630
2009/12/18(金) 21:30:49ID:???何故か今、回復してしまいました
サーバーの調子が悪かったのでしょうか・・・
スレ汚してしまい本当にすみません
0633nobodyさん
2009/12/18(金) 23:08:00ID:???返すリプライによって画像を変えたい場合ってどうしたらいいんですかね?
他の方のプログラムだとみつけたんだけどphaさんのって発言はテキストファイルで他の人とちょっと勝手が違うからよくわからないです…
0634nobodyさん
2009/12/19(土) 00:14:49ID:???0635nobodyさん
2009/12/19(土) 00:32:47ID:???0636nobodyさん
2009/12/19(土) 01:02:08ID:???http://pcod.no-ip.org/yats/
http://buzztter.com/
このあたりがRSS吐いてるから適当に解析するよろし。
0638nobodyさん
2009/12/19(土) 07:18:16ID:???ベーシック認証が廃止になるから
http://twitter.com/tweeterjp/status/6522684422
0640nobodyさん
2009/12/19(土) 14:52:54ID:???http://apiwiki.twitter.com/OAuth-FAQ
0641nobodyさん
2009/12/19(土) 17:58:05ID:???自分なりに色いろやってみたのですが、どうしてもうまくいかないので相談させてください。
ttp://d89.s41.xrea.com/twitter/howtomake_bot.html
こちらをを参考に、cron.yaml/app/yaml/task.pyを作成し
GAE launcherで読み込んだのですが、Runさせようとすると数秒でエラーのアイコンが出て先に進めません
ログはこんな感じになっています。URLがダメなんでしょうか…
Running command: "['C:\\Python25\\python.exe', 'C:\\Program Files\\google\\google_appengine\\dev_appserver.py', '--admin_console_server=', '--port=8089', 'C:\\bot']"
ERROR 2009-12-19 08:32:38,951 dev_appserver_main.py:363] Fatal error when loading application configuration:
Invalid object:
Unknown url handler type.
<URLMap
static_dir=None
secure=default
script=None
url=/.*
static_files=None
upload=None
mime_type=None
login=optional
require_matching_file=None
auth_fail_action=redirect
expiration=None
>
in "C:\bot\app.yaml", line 8, column 1
2009-12-19 17:32:39 (Process exited with code 1)
0644nobodyさん
2009/12/19(土) 19:51:19ID:???0645nobodyさん
2009/12/19(土) 19:52:17ID:???0646nobodyさん
2009/12/19(土) 19:56:18ID:???0647nobodyさん
2009/12/19(土) 19:57:39ID:???まぁ、やってみなよ、おもしろいから。
DDNSとかで
セキュリティ??知らんがな(´・ω・`)
メールとかいろいろ遊べるし
0648nobodyさん
2009/12/20(日) 16:24:25ID:???同じようなとこで躓いた経験があります。yamlファイルの記述に問題があったようです。
そこのサイトで紹介しているyamlファイルのテキストをブラウザからコピペしたもの
ではなく、そのサイトからリンクされているページで紹介されている
ソースコードをコピペしてやってみると幸せになれるかもしれません。
違っていましたらあしからず。
0650nobodyさん
2009/12/20(日) 23:25:31ID:???0652nobodyさん
2009/12/21(月) 00:32:05ID:???できなくなったら対策考えればいい。
ググればいくらでも出てくるからな。
ググらないのは甘え
0653nobodyさん
2009/12/21(月) 00:51:02ID:???慣れるの大変だなまた
これで他人のソース丸コピペBot量産厨が減るといいけどwww
0654nobodyさん
2009/12/21(月) 00:53:31ID:???もっとましな方法はないのか…
0655nobodyさん
2009/12/21(月) 00:58:00ID:???0656nobodyさん
2009/12/21(月) 10:45:51ID:???0657nobodyさん
2009/12/21(月) 12:58:32ID:???http://d.hatena.ne.jp/sotarok/20080807/1218114681
0658nobodyさん
2009/12/21(月) 14:12:31ID:???0659nobodyさん
2009/12/21(月) 21:17:30ID:???わざわざ使わなくてもHttp_Requestがある
curlの仕様自体が変態
0660nobodyさん
2009/12/21(月) 22:25:00ID:???0662nobodyさん
2009/12/23(水) 02:57:59ID:???htmlのページにフレームかなんかでphp埋め込んで、そのページを延々更新し続けるとcron使わなくても動くんじゃない?
自分はめんどくさくてそんなことせずにcronくんでるんだけど誰かcronわからなくてhtmlの知識持ってる人は試してみてほしい
24時間ずっとブラウザ立ち上げてなきゃいけないけど
うーん、やっぱり駄目かな。アホなこと考えてごめん
0663nobodyさん
2009/12/23(水) 03:35:15ID:???自分が起きる時間にBOTは起きて自分が寝る時間にBOTは寝る感じで
0664nobodyさん
2009/12/23(水) 11:48:56ID:???考えたことあった
ただ>>663が言うように常にPCを上げておかなきゃいけないからね
それが問題にならないbotなら出来ると思うよ
0665nobodyさん
2009/12/23(水) 11:58:43ID:???0666nobodyさん
2009/12/23(水) 11:59:24ID:???0668nobodyさん
2009/12/23(水) 14:35:27ID:???0669nobodyさん
2009/12/23(水) 16:50:10ID:???0670nobodyさん
2009/12/23(水) 21:40:03ID:???0671nobodyさん
2009/12/24(木) 14:59:33ID:???このボットジェネレーターが結構使えると思うんだがどう?
0672nobodyさん
2009/12/24(木) 16:16:13ID:???0673nobodyさん
2009/12/24(木) 16:32:20ID:???どうせtwitterなんて流行り物だし、使い続けるようなものでもないでしょ
0674nobodyさん
2009/12/24(木) 23:28:41ID:???reply_pattern.phpの中身の反応させる言葉なんですけど、
複数の単語がある場合に反応する方法はありますか?
たとえば、「ごちそうさま。おいしかった」と@貰ったら
「お粗末さま。おいしくて何より」といった返答をするように、
「ごちそうさま」と「おいしい」の2つの単語がある場合に、
用意した言葉を返答するという感じ。
「ごちそうさま」だけに反応させるものもあるので、二つの言葉がある
場合に、反応する正規表現を教えて下さい。
0675nobodyさん
2009/12/24(木) 23:29:34ID:???http://www.mnet.ne.jp/~nakama/
■ このスレッドは過去ログ倉庫に格納されています