【Twitter】 BOT製作支援スレ
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2009/09/27(日) 14:15:59ID:Dz08qoo4[公式] http://twitter.com/
[Twitter 開発ブログ 日本語版] http://twitterjp.blogspot.com/
*どの言語でもOKですがソースを書く際は何の言語なのかも記載してください。
*初心者のために、なるべくぶつ切りのソースではなく全体的に載せてほしいです。
0893nobodyさん
2010/01/09(土) 22:19:03ID:???//OAuth経由でTwitterに投稿する
function tweetOAuth($message,$id,$key,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
$message = mb_convert_encoding($message, "UTF-8","ASCII,JIS,UTF-8,EUC-JP,SJIS");
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterへPOSTする。パラメーターは配列に格納する
$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message,"in_reply_to_status_id"=>"$id"),"POST");
}
//OAuth経由でTwitterから取得
function getObjOAuth($host,$cnt,$last_id,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
// OAuthオブジェクト生成
$to = new TwitterOAuth($host,$consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterからGETする
if(($cnt != null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt,"since_id"=>$last_id),"GET");
}else if(($cnt != null)&&($last_id == null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt),"GET");
}else if(($cnt == null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("since_id"=>$last_id),"GET");
}else{
$req = $to->OAuthRequest($host,array(),"GET");
}
$req_array = simplexml_load_string($req);
return $req_array;
}
?>
0894nobodyさん
2010/01/09(土) 22:31:57ID:???8bitnoteさんとこのスクリプトだと思うけどそこは関係ないよ
その下の
elseif( preg_match("/眠い/",$text)){ //上記で調べた自分へのリプライがなかった場合にこの処理に移る。POST内容に眠いが含まれていたら次の処理に移る
の前に@が含まれるpostを弾く処理を入れればいいはず
0895888
2010/01/10(日) 01:00:53ID:???ソースありがとうございます!
891さんのソースをコピペして動かしてみた結果、Arrayという文字だけはPOSTしてくれるようになりました。
もうちょっとどうにかしてこようとおもいます。
ありがとうございました!
0896nobodyさん
2010/01/10(日) 01:20:14ID:???回答ありがとうございます
このPHPにはbotへの@リプライとTLから特定単語を拾ってリプライする動きを書いてます
@が含まれるpostを弾くと、このbotへのリプライに反応する事ができなくなってしまいます…
また
if( $screen_name != $username){ //POSTが自分のPOSTではなかった場合にサブルーチンから抜ける
return;
}
を打ってみたのですがやはりエラーが出ました
0897nobodyさん
2010/01/10(日) 01:56:39ID:???「botへのリプライ以外の」@を弾くだけだから大丈夫なはずだけど…
ちなみにうちではこんな感じで、反応語のチェックはswitchで書いてる
if( $screen_name == $username){ //POSTが自分のPOSTだった場合にサブルーチンから抜ける
return;
}if( preg_match("/\@$username/",$text)){ //POST内容にry
(略)
}elseif(! preg_match("/^[0-5]{0,1}$/",$now_g)){ //botが寝てる0〜5時台でなければTL反応させる
switch(true){
case preg_match("/\@/",$text) : return; //他の人への@ならサブルーチンから抜ける←これでbot宛以外のリプライには反応しない
break;
(略)
default : return;
break;
}
}
else{return;}
0898nobodyさん
2010/01/10(日) 05:42:07ID:???エラー表示されないから何が何だか・・・
0899nobodyさん
2010/01/10(日) 05:42:42ID:???$username = "1111";
$key = "3333";
が何だかわからないんだけど、ごめん参考元?ってなにになるのかな?
0901nobodyさん
2010/01/10(日) 12:03:57ID:???ごめん$key要らない・・・
自分は複数BOT作ってて複数でも使いまわせるようにしてるんで、その名残だ
要らないところ削除して直したつもりが残ってたみたい
0902nobodyさん
2010/01/10(日) 12:17:50ID:???>>891のソースにはどこにも出力命令が無いんだから
ブラウザでアクセスして何も表示されないのは当たり前だろ
0903nobodyさん
2010/01/10(日) 16:18:50ID:???ごめん。真っ白になるだけでポストしないからどこかにエラーが出るはずだと思ったんだけど
さっき確認したら今まで普通に動いていた別のスクリプトでも同じ現象が起こった
そっちは弄ってないから原因は>>891ではないみたい
0904nobodyさん
2010/01/10(日) 23:13:36ID:???たまにフォローだけしてDM送られなかったりフォロー失敗してDMだけ送られたりする
この問題解消するときってどうすりゃいいのかな
0905nobodyさん
2010/01/11(月) 17:34:10ID:???(例)「おかえり、今日の夕飯は○○ですよ」
という文章で、○○の部分をランダムで変えたいのですがプログラムが分かりません
$mesi = array("和食","洋食","中華");
と書いて、
$mes['night'] = array( //夜の時間に発言
"おかえり、今日の夕飯は $mesi ですよ");
とやっているのですが、「おかえり、今日の夕飯はArrayですよ」と表示されてしまいます
0906DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/11(月) 17:40:24ID:???> $mesi = array("和食","洋食","中華");
>
> と書いて、
>
> $mes['night'] = array( //夜の時間に発言
> "おかえり、今日の夕飯は $mesi ですよ");
$mesi = array("和食","洋食","中華");
$num = array_rand($mesi,1);
$mes['night'] = array(
"おかえり、今日の夕飯は $mesi[$num] ですよ");
でいいと思う。
0907nobodyさん
2010/01/11(月) 18:02:52ID:???早い回答ありがとう!
ついでに聞いておきたいんですが、$num = array_rand($mesi,1);の1ってなんの意味?
この中から1つ選ぶ…って事?
0908nobodyさん
2010/01/11(月) 18:07:19ID:???0909nobodyさん
2010/01/11(月) 18:12:07ID:???それが正しく帰ってきてればOKでいいじゃん。
0910nobodyさん
2010/01/11(月) 18:25:16ID:???そしてまた行き詰ったんだが、>>906やり方でやってみたら
ときどき何もランダム単語表示されない時がある…
「おかえり、今日の夕飯は ですよ」
みたいな感じ
0911nobodyさん
2010/01/11(月) 18:36:05ID:???0912nobodyさん
2010/01/11(月) 23:35:54ID:???0914nobodyさん
2010/01/12(火) 01:54:55ID:???0915nobodyさん
2010/01/12(火) 06:32:37ID:???GAEやろうとして行き詰まってたところだったから助かった!
0916nobodyさん
2010/01/12(火) 19:19:52ID:???phpを2分おきにGAEのcronで叩いてるんですが、タイムアウトにひっかかっているらしく、
たとえば30分以内の@に対しおみくじを返すように設定しても15回中5〜8回程度しか返って来ません。
これを「ひとつの@につきひとつのリプライを返す」というふうに、php側で処理することは可能でしょうか?
GAEのtask queuesも試してみたんですが、This queue is empty.と出て動きません。
きっと非常に初歩的なミスをしているのだと思いますが、どちらかについてご存知の方は
ご助言をお願いしますorz
0917nobodyさん
2010/01/12(火) 19:59:34ID:???0918nobodyさん
2010/01/12(火) 21:19:02ID:???重くなってる処理はないか確認してみる
GAEはだいたい4~8秒くらいでタイムアウトになるからその分処理を軽くしなければならないよ
まあ晒せる範囲でソース晒してみたら
0920nobodyさん
2010/01/14(木) 15:32:58ID:???0921nobodyさん
2010/01/14(木) 19:33:13ID:???@pages使ってる人だと動き不安定?
一度削除して登録し直そうとしてもタイムエラー出るんだが…
0923nobodyさん
2010/01/14(木) 22:16:36ID:???demoでログインしたらサーバーのcp.phpが入ってた
チェック中なのかな?明日には直ってくれるといいね
0924nobodyさん
2010/01/14(木) 22:16:37ID:???今まで調子よかったのになんで急に…入金したばっかりなのに
0925nobodyさん
2010/01/14(木) 22:51:55ID:???有料垢だろうがjpドメインの鯖を規制してるっぽい。
0926nobodyさん
2010/01/14(木) 22:57:00ID:???0927nobodyさん
2010/01/14(木) 23:06:05ID:???0928nobodyさん
2010/01/14(木) 23:11:02ID:???XREA…(´・ω:;.:...
0929nobodyさん
2010/01/14(木) 23:27:59ID:???0931nobodyさん
2010/01/15(金) 00:30:49ID:???0932nobodyさん
2010/01/15(金) 01:11:26ID:???0933DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/15(金) 01:56:33ID:???sendmail,postfixが言う事を聞かないのでメールに頼らない認証方法を確立したいのですが、どうすれば良いでしょう…(人任せ)
せっかくTwit専用なのだしtwitterのアカウント経由で認証するのもありだと思います。
そうすれば管理もtitter経由で可能になりますし。
いかがでしょう。
0934nobodyさん
2010/01/15(金) 01:59:48ID:???jpドメインでも使えるようにする案と、場合によっては返金するよって内容のものだった。
自分は自力で使えるようになったけど一応、対応はしてくれるみたいでちょっと安心した
0935nobodyさん
2010/01/15(金) 02:03:03ID:???0936nobodyさん
2010/01/15(金) 13:49:35ID:???スクリプト中の「何分以内にもらったリプライを読み込む」を2分に、GAEのcronファイルも2分毎に更新にしてあるんだけど、どうも取りこぼしがあるみたいなんだよね。
そういうもん?
0937nobodyさん
2010/01/15(金) 14:01:44ID:???0938nobodyさん
2010/01/15(金) 14:08:56ID:???GAEが誤差があるからな
$limittime = $now - $cron * 60;
ここを変えれば良い
自分は62にしてる
それでも取りこぼしはあるけどね
あまり秒数を増やすと今度は2重投稿しちゃうよ
0939nobodyさん
2010/01/15(金) 15:58:06ID:???アメリカのでこんなの見つけたけど、使えない?
0940nobodyさん
2010/01/15(金) 16:38:38ID:???一切反応しない…
5分間隔と20分間隔にしているんだけど何が原因なんだろう
0941nobodyさん
2010/01/15(金) 17:04:16ID:???特に感情を持たせるにはどうすればいいかアイディアをくれないか?
一応疑問文に応答するアルゴリズムは大方できてるんだ。
問題は人間らしい感情をどうやって持たせるかなんだ。
0944DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/15(金) 22:00:57ID:???感情のパラメータを作成して、単語ごとにエモーショナルレベルを設けて喜、哀、憂、怒などに数値を加算して表現してはいかがか
0945nobodyさん
2010/01/15(金) 22:07:19ID:???$today = getdate();
$day1 = (55-date(z));
で日付取得と残り日数を計算して
今日は${today['mon']}月${today['mday']}日です。〜〜まであと".$day1."日です
っていうカウントダウンをポストしているんだが、定期だとうまく行くんだがリプレイだと日付が取得できないんだ。
リプライに対応するためにはソース書きなおさなきゃだめなのかな?
0946nobodyさん
2010/01/15(金) 22:25:00ID:???0947nobodyさん
2010/01/15(金) 23:08:29ID:???今日は月日です。〜〜まであと日です。
ってなるんだ。
理由は私が聞きたい\(^O^)/
0948nobodyさん
2010/01/15(金) 23:32:27ID:???私も同じような事なった事あるけど、半角スペース入れたら直ったよ
0949DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/15(金) 23:49:40ID:???""でくくらなくてよくないか?
""の中に直接変数を書き込めなかったっけ
"〜〜まであと$day日です"でおkだったと思う
0950nobodyさん
2010/01/16(土) 00:08:39ID:???引数が渡ってないとかじゃないかな
取得をまるっとユーザー関数の内側に入れてみてはどうだろう
見当違いだったらごめん
0952nobodyさん
2010/01/16(土) 10:18:47ID:???0953nobodyさん
2010/01/16(土) 12:33:09ID:???URLとかRTとかノイズ除去するのがわりと手間だね。
0955nobodyさん
2010/01/16(土) 23:38:57ID:???bot製作のblogとか見ながら作ると「1人の人への連続replyはしない」ようになってるから
誰かを間に挟まないと(もしくはdata.txtの中身を消さないと)リプライしてくれない。
どうすればいいかわからん・・・。誰か教えてください
0956nobodyさん
2010/01/16(土) 23:59:48ID:???0957nobodyさん
2010/01/17(日) 00:09:41ID:???ああすまん。「銀さんのbot」と「プログラミングを始める〜」を参考に
設置サーバーも銀さんと同じところにしてる。
とあるbotが特定の言葉をつぶやいたら、それに@で返信させるようにしたいと思ってる
TLに反応させてリプライさせる「プログラミングを〜」にあったものをほぼコピペしてます
0958DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/17(日) 00:33:33ID:???botに発言してスケジュール管理です。
0959nobodyさん
2010/01/17(日) 00:41:40ID:???0962nobodyさん
2010/01/17(日) 03:18:45ID:???http://pc11.2ch.net/test/read.cgi/php/1243654802/
0963nobodyさん
2010/01/17(日) 03:27:36ID:???0964nobodyさん
2010/01/17(日) 05:30:18ID:???ここの記事のカッコに囲われた文字のみをオウム返しする機能を付けたいんだけど
phaさんのスクリプトじゃなくてbardothodolさんのスクリプトで対応させる方法がわかりません
最初そのままつっこんでみたけどやっぱり動かなかったので教えてください
0965nobodyさん
2010/01/17(日) 09:00:07ID:???0966964
2010/01/17(日) 09:19:39ID:???bardothodolさんのとこのと色々当てはめてやってみたんだけど
$replies2も$iも見当たらなくて何に当てはめ直せばいいのかがわからなかったorz
もうちょっと睨めっこしてみます
0967nobodyさん
2010/01/17(日) 09:36:11ID:???0968nobodyさん
2010/01/17(日) 09:41:25ID:???たとえば「おはよう」に対して「おはよう」と「グッドモーニン」の二種類のリプで返したい場合、
「おはよう」を受け取ると「おはよう」と返信
「おはよう」を受け取ると「グッドモーニン」と返信
こう二行やるのと
「おはよう」を受け取ると「おはよう","グッドモーニン」と返信
こうやるの、どっちがちゃんと動くんでしょうか
0969nobodyさん
2010/01/17(日) 09:49:32ID:???0970nobodyさん
2010/01/17(日) 11:32:40ID:???>>961
自分もエラーが出てGAE Launcher動かないんだが
コマンドプロンプトにコマンド直打ちでデプロイ出来たよ
0971nobodyさん
2010/01/17(日) 12:50:08ID:???スレ汚し失礼しました。
0972nobodyさん
2010/01/17(日) 14:01:44ID:???スクリプトが重いのかな
0975nobodyさん
2010/01/18(月) 02:18:12ID:???ここのソースを借りてTL上の単語に反応するようにしたいと思っています。
手動でブラウザからphp叩けばきちんと動くんですが
cronで叩くと「ファイルが開けません 」というメールが返って来てしまい、動作しません
ソース見た限りではおそらくdatファイルが開けないという事だと思うんですが…
手動でやる分には問題無いのでcron側の問題でしょうか
メールでphpのエラーメッセージを持ってきているので
cronの実行コマンドのファイルパスは合っていると思います。
プログラミング・cron等は全く手をつけたことがなくて、色々調べてみたのですが
分かりませんでした。
解決方法ご存じの方いらっしゃいませんでしょうか。
0976DAWNTO_Windy-melt ◆Windy/f9HNwg
2010/01/18(月) 03:05:41ID:???ソースうpが原則です、その方がスグに解決しますよ
0977nobodyさん
2010/01/18(月) 03:13:31ID:???0978975
2010/01/18(月) 04:13:21ID:???失礼しました。ソースうpしました。
http://kissho.xii.jp/1/src/1jyou102317.txt
反応語句部分ところとusernameとpass以外いじってません。
>>977
パーミッションというとdatファイルのでしょうか?666に設定してあります。
これで手動ではきちんと動くんですが、もしかしてphpの方も設定しないといけないんでしょうか
試してみます。
0980nobodyさん
2010/01/18(月) 13:57:52ID:???今度マルコフ搭載したボット作ろうと思うんだけど、ちゃんと勉強したい
プログラムを自分で組めるまではいかなくても、改変出来る程度の知識を身に付けたいと思ってる
なんか良いおすすめの本とかあるかな?
ちなみに自分のレベルは毛の生えた初心者
0981nobodyさん
2010/01/18(月) 14:06:01ID:???マルコフ連鎖とか形態素解析とかそういうのは最低限の土台できてからであって
いきなりやろうとしてもろくなことにならんよ。
0982nobodyさん
2010/01/18(月) 14:19:22ID:scJ7qSxRgoogle_appengine_projects.ini
を探して消す。
0983nobodyさん
2010/01/18(月) 15:21:00ID:???よく解除するときはリムーブじゃなくブロックしてくれってあるのはどうしてですか?
リムーブだとなにかまずいんでしょうか
0985nobodyさん
2010/01/18(月) 15:27:26ID:???管理が面倒臭いからじゃない?
フォローしてる人に話しかけるタイプのbotだったりしたら
リムられてるのに話しかけてしまうのは迷惑だろうから
フォロワーとフォローは同じにしておきたいと思うんじゃないか
0986975
2010/01/18(月) 15:50:11ID:???cronの実行コマンドのパスでしょうか?
何度も確認してみたのですが、やはりファイルパスは合っています
正常に動くphpと同じディレクトリに入れてあるので、それをコピペしてファイル名書き換えてます
動いているもの→/usr/local/bin/php /home/*****/public_html/*****/post_random.php
動かないもの→/usr/local/bin/php /home/*****/public_html/*****/reply_tlget.php
ちなみにphpのパーミッション設定も変えてみましたが、ダメだったようです。
0988975
2010/01/18(月) 17:30:36ID:???それで動くようになりました!!
反応が不安定ですがとりあえず動くようになりました!!
不安定なのはphpの問題っぽいので自力で何とかしてみます
本当にありがとうございました!!
0990nobodyさん
2010/01/18(月) 18:04:06ID:???相当難しくなると思う。
初心者ならまずphpでいろんなbot作って基礎を確実にして。
マルコフ連鎖もWikipediaだけではよくわからないと思う。
個人的に思うんだが、マルコフ連鎖を使って呟かせるより他の人の過去の呟きを拾ってbotに呟かせたほうがより人間っぽいと思う。まぁ楽しむ目的でbotつくるならマルコフ連鎖でもいいけど。
0991nobodyさん
2010/01/18(月) 20:03:50ID:???0992テンプレ案1(GAEのがj.mpになってるのはURLが長かったから)
2010/01/18(月) 21:45:52ID:???http://twittbot.net/
Perl
http://search.cpan.org/dist/Net-Twitter/
PHP
http://pear.php.net/package/Services_Twitter
http://labs.transrain.net/products/services_twitter/
Ruby
http://twitter4r.rubyforge.org/
Java
http://yusuke.homeip.net/twitter4j/ja/index.html
プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/twitterbot/
cron
http://www.onlinecronjobs.com/
http://www.setcronjob.com/
https://mywebcron-com.loopiasecure.com/
http://cron-job.de/
GoogleAppEngineによるcron
http://code.google.com/intl/ja/appengine/
http://j.mp/861dO8
http://d.hatena.ne.jp/deeeki/20091201/gae_register_account
レス数が950を超えています。1000を超えると書き込みができなくなります。