したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

Twitter Bot初心者質問スレ

1名無しさん:2010/02/16(火) 12:28:55
どんな初心者レベルの質問でも質問していいスレッドです。
内容もTwitter Botに関するものなら何でもありです。phaさんのスクリプト以外の質問もOKです。
でも返事が返ってくるかどうかはたまたま分かる人がいるかどうかなので、返事が返ってこなくても泣かない。
返答してくれた人にはお礼をね。

951948:2010/05/10(月) 23:02:55
>>949
見逃していました、申し訳ありません;
サーバーの時間、というのはどういう事なのかちょっと分からないので
検索してきます、レス有難う御座います

952898:2010/05/10(月) 23:22:14
>>898 >>903 >>908
で、質問させていただいたものです。
エディタが問題なのかなと思い、サクラエディタからPHPエディタに
変えてみたのですが、変化はありませんでした。

構文のほうは構文チェックにかけて特に問題はありませんでした。
怪しいと思っていた、正規表現のほうも>>904様のおっしゃるもの
に変えてみたのですが、やはりreply_pattern.phpがある一定のファイルサイズになるとdata.txtからリプライを返してくれなくなります。
reply_pattern.phpからは返してくれるのですが…

ファイルの中身はいじっていないのですが、ポストとリプライ、TL反応を分けるためにbot.phpをコピーしてファイル名を変えて使っていますが、特にエラーは出ていませんでした。
自分でいじったのはそこだけなので、理由がわからないのですが、他のファイルにエラーが出てないか、調べたところ、

PEARフォルダ内のHTTPフォルダのRequest2.phpに

Warning: require_once(Net/URL2.php) [function.require-once]: failed to open stream: No such file or directory in /usr/local/www/htdocs/*****/public_html/bot/PEAR/HTTP/Request2.php on line 47

Fatal error: require_once() [function.require]: Failed opening required 'Net/URL2.php' (include_path='.:/usr/local/lib/php') in /usr/local/www/htdocs/*****/public_html/bot/PEAR/HTTP/Request2.php on line 47

とあったのですが、これはどうやったら治るのでしょうか?
初心者なので、漠然と47行目に何か足りないのかな?ぐらいにしかわかりません。
あと、他のページにも似たようなエラーがあったのですが、自分で触ると、逆に悪化しそうなので、怖くて触れません。
たびたび申し訳ありませんが、どうかご指南のほどよろしくお願いいたします。

…エラーの出てるページって全部書いたほうがいいですか?

【バージョン】Easybotter 2.04beta
【設置鯖名】@pages
【PHPのバージョン】PHP-5.2.6
【実行】GAE-Cron
【手動】動く
Cronも問題なく動いてます。

953名無しさん:2010/05/10(月) 23:46:55
リプライの事で質問です。

「○○(名前)のこと好きなの?」とリプライしても
○○の反応がかえってくるのですが、
どうやったら、「○○(名前)のこと好きなの?」の返事リプライが帰ってくるのでしょうか?
どう設定したらいいですか?
(○○)(好き)でやっても、駄目でした;

954名無しさん:2010/05/10(月) 23:55:06
>>953

既に○○を反応語句として設定しているということでしょうか?
そういうこととして答えさせて頂きますね。

"○○のこと好きなの?"=> array(
"返答",
),
"○○"=> array(
"返答",
),

というように、名前より先に記述することで優先順位があがり理想的な返答が返るようになると思われます。
ただ、上記のまま「○○のこと好きなの?」という風に設定すると融通が利かなくなるのでそれはご自身で編集なさって下さい。

955名無しさん:2010/05/11(火) 00:13:20
■■初心者さん、書き込み前にちょっと読んでね■■

>>953みたいに高度なリプライを考えてる子は「正規表現」を勉強しよう
既出の話題でもあるし、>>575でも必要だと言われてること
意味がわからなくてもまずはリファレンスに目を通して

それから通常ポストとリプライの間隔を違うものにしたい>>948みたいな子
こちらも同様に>>575で必要だと言われている
条件分岐・演算子・比較演算子・date関数あたりをしっかり勉強しなきゃ

956946:2010/05/11(火) 11:55:56
bardothodoさんのサンプルソースをOAuthなどの各自の設定以外は弄っていませんので
リプライは「じゃんけん」と「占い」だけです。
「じゃんけん」「占い」とリプライしても、対応外の言葉でリプライしても返事はなく
やはり「@」と吐くだけのようです。

957ワイン:2010/05/11(火) 19:21:17
【バージョン】Easybotter 2.04beta
【設置鯖名】ロリポップ
【PHPのバージョン】5
【実行】ロリポップcron
【手動】動く
【不明点など】
$response = $eb->postRandom("data.txt"); や、
$response = $eb->postRotation("data.txt");では自動投稿に成功したのですが、
$response = $eb->replyTimeline(10,"reply_pattern.php");がうまくいかず、
ブラウザでアクセスしても真っ白な状態です。

実現したいことは、フォローしている人の特定の発言がタイムラインに表示
された際に、reply_pattern.phpで設定した文章をリプライするという単純
な仕組みです。

reply_pattern.php のファイルだけにphpの?>が無かったので入れてみましたが
真っ白な状態が続いています。

パーミッションの設定は、data.txtとreply_pattern.phpとlog.datのパーミッション
を666にしています。

ロリポップcronの間隔は10分に設定しています。

958名無しさん:2010/05/11(火) 20:58:38
>>955
なるほど・・・正規表現ですか・・!
調べてみます、ありがとうございました!

959名無しさん:2010/05/11(火) 21:24:15
>>957
>> reply_pattern.php のファイルだけにphpの?>が無かったので入れてみましたが
おかしいのはこのせいだと思わなかった?
無くていいんだよ

960ワイン:2010/05/11(火) 21:52:39
>>959さん

無くても動かないんです。。。

961名無しさん:2010/05/12(水) 00:13:26
Ver.1.4、Ver.2.0のどちらのも、解凍(展開)したらファイル内が空っぽになるのですが、なぜでしょうか?

ちなみにvistaです。
パソ的に合わないんですかね…?

962名無しさん:2010/05/12(水) 02:29:55
>>961
解凍ソフト違うの使ってみようとは思わないの?

>>957
パーミッションは現状、log.datを変えるだけでいい
そしてロリポはdatパーミッションは666じゃない
ロリポの仕様きちんと見たの・・・?
wikiの手順どおりもう一度最初からやってみようか

963名無しさん:2010/05/12(水) 13:51:31
お世話になります。現在EasyBotter2.04を使わせていただいてます。
以前は1.42を使わせていただいてました。

form.php の機能を、2.04でも使うことはできないでしょうか?
BASIC認証廃止後もform.phpの機能を使いたいのですが・・

あるいは、同様の手動投稿用フォームで、OAuth認証対応のものがあったら教えてください。よろしくお願いします。

964名無しさん:2010/05/12(水) 15:15:53
>>963
http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1265625817/213

965名無しさん:2010/05/13(木) 04:12:32
>>957がもしフォローあまりいない状態なら思い当たることが。
TL上に何も投稿がない時は真っ白ページ、
反応語句が含まれてなくても何かしら投稿があれば普通に
「○分以内の〜」とメッセージが出る、自分のとこのbotは。

966名無しさん:2010/05/13(木) 12:56:40
時間別でポストをさせたいのですが、質問です。

if(date("i") % 15 === 0){
$response = $eb->postRandom("minute.txt");
}

if(date("G") > 7 && date("G") < 9){
$response = $eb->postRandom("hour08.txt");
}

これだと1つ目が15分ごとにポスト、2つ目が8時にポストだと思いますが、
この二つを合わせる事は可能でしょうか?

例えば8:00になったらテキストをhour08.txtに切り替え、さらに8:15 8:30 8:45にも同じhour08.txtから発言させる、と言う感じです。
記述の仕方が分からなかったのですが、下記のやり方で正常に動作しますでしょうか?

if(date("G") > 7 && date("G") < 9)(date("i") % 15 === 0){
$response = $eb->postRandom("hour08.txt");
}

ちなみにバージョンは2.04betaを使っております。

967名無しさん:2010/05/13(木) 14:09:23
>>966
それは間違ってます

「分」が15分単位の時{
  「時間」が「8」の場合{hour08.txtからランダムポスト}
  上記に当てはまらない場合{minute.txtからランダムポスト}
}

このようにしなければなりません
ifの中にifを入れるのがわからないのなら

「時間」が8 かつ 「分」が15分単位の時{hour08.txtからランダムポスト}
「時間」が8以外かつ「分」が15分単位の時{minute.txtからランダムポスト}

このように並列して描いても良いが、上の方がスマートだとは思う

968名無しさん:2010/05/13(木) 15:24:43
>>967
とりあえずこんな感じにしてみました。

if(date("i") % 15){
if(date("G") > 7 && date("G") < 9){$response = $eb->postRandom("hour08.txt"}
{$response = $eb->postRandom("minute.txt");
}

1つ目のパターンを作っていたのですが、直してるうちによく分からなくなってきてしまい、
上記に当てはまらない場合の表現の仕方が思いつかず断念。
もう一つ、2つ目のパターンも作ってみました。

if(date("G") > 7 && date("G") < 9) && (date("i") % 15){$response = $eb->postRandom("hour08.txt");}
if(date("G") > 7 && date("G") < 9 ) ! && (date("i") % 15){$response = $eb->postRandom("minute.txt");}

こちらも何となくこんな感じなのかなあと思って作ってみましたが、正直自信はあんまりないです。

969were:2010/05/13(木) 15:39:53
家電屋さん始めたよー^^
良かったら見てねー^^
商品情報ブログ
http://ameblo.jp/a-it/

970名無しさん:2010/05/13(木) 22:35:40
>968
上の方は間違ってる
if(date("i") % 15){ ←ココおかしくなった
{$response = $eb->postRandom("minute.txt"); ←条件づけが無い上に閉じてないよね

971名無しさん:2010/05/13(木) 22:40:00
>968
下の方も間違ってる「時間」は8で固定した方がスマート
if(date("i") % 15){ ←これもおかしいね
あと「!」の使い方がおかしい

というわけで「比較演算子」と「演算子」ともっと勉強しよう、基礎の基礎だよ
http://www.scollabo.com/banban/php/php_06.html#enzan2

972さえ:2010/05/13(木) 22:54:15
他スレですでに投稿しましたが、初心者スレのほうが適切かと思いこちらで質問させていただきます。

TLに反応させようとしたのですが、初期のほうは反応していてくれたのですが、今では反応してくれません。
設定をいじりすぎたのか、と思い、また新しくDLし、必要最低限だけを入力、同じようにTLに反応する語句も指定し、自アカウントで発言した後にbot.phpを読みこんだのですが、やはり駄目でエラーが表示されます。
そのエラー文が下記なのですが、どこかでこのエラー文はリプライパターンとの照合が上手くいっていないとおっしゃってらしたのですが、果たしてどこが上手く照合出来ていないのか私にはさっぱりで…

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in /usr/local/www/htdocs/あかうんとID/public_html/EasyBotter.php on line 279



Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in /usr/local/www/htdocs/あかうんとID/public_html/EasyBotter.php on line 279



Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in /usr/local/www/htdocs/あかうんとID/public_html/EasyBotter.php on line 279



Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in /usr/local/www/htdocs/あかうんとID/public_html/EasyBotter.php on line 279



Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 7 in /usr/local/www/htdocs/あかうんとID/public_html/EasyBotter.php on line 279

サーバーは@atpages、Cronは1分間隔に設定しています。

bot.phpの一部は
$response = $eb->reply(1, "ramhen.txt", "reply_pattern.php");
$response = $eb->replyTimeline(1,"reply_tl.php");
と設定しています。

ちなみにTLに反応したときに読み込ませるファイルがphpじゃ駄目なのかと思ってtxtでも試してみたのですが同じ結果でした…。
具体的にどこが照合できてないのでしょう…お願いします。

973名無しさん:2010/05/13(木) 23:22:24
>>972
無駄な改行は不要、>>575読んでまずは調べる
過去経験だとTL反応はフォロワー数やTL反応間隔によってエラーになる場合もある

974名無しさん:2010/05/13(木) 23:57:35
はじめまして。初めてのbot作りに挑戦中です。
EasyBotter2.04betaを@pageのサーバで使用しているのですが、実際に動かすところで躓いてしまっています。
通常のポストは問題なくしてくれるのですが、リプライをさせようとすると
object(SimpleXMLElement)#10 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(22) "Status is a duplicate."
}
とのエラーが出て失敗してしまいます。
wikiを見たところ、
http://wiki.livedoor.jp/easybotter_wiki/d/ver.2.0*%A4褯%A4%A2%A4%EB%BC%C1%CC%E4*PHP%A5%A8%A5顼
こちらのエラーに該当していましたので、data.txtとreply_pattern.phpの文字コードを確認してみたのですが、両方ともUTF-8、改行もLFになっていました。
どのようにしたらリプライを返してもらえるのか……ご教授願います。

975名無しさん:2010/05/14(金) 00:12:39
>>974
Status is a duplicateでスレ内検索

976名無しさん:2010/05/14(金) 00:52:25
>>975
ありがとうございます。早速スレ内検索をしてみたところ、連続投稿規制と分かりました。
通常発言、リプライ反応それぞれ20種類以上あるのですが、もっと発言数を増やせばいいのでしょうか……
かさねがさねで申し訳ありません……

977名無しさん:2010/05/14(金) 00:55:14
>>976
テスト段階で公開してないのなら、テストしたツイートを消してみれば?
消しても同じエラーが出るなら別の原因

もっとも、板内検索重ねれば別の原因も見つかるんだけどね

978名無しさん:2010/05/14(金) 09:05:22
家電屋さん始めたよー^^
良かったら見てねー^^
商品情報ブログ
http://blog.livedoor.jp/av2010/

979名無しさん:2010/05/14(金) 10:46:00
>>977
アドバイスありがとうございます。テスト段階でしたので、全てのツイートを消してから再度返信をさせてみたのですが、今度は返信に対するエラーすら出なくなってしまいました。
設定している二分以内にbotにリプライを送り、手動で動かしても通常ツイートのみしかしてくれず、何の反応も無くなってしまいました。
一度アップロードし直した方がいいのでしょうか……

980名無しさん:2010/05/14(金) 11:04:56
DMにDMで返すのはムリ?

981名無しさん:2010/05/14(金) 11:15:52
>>980
可能、詳しくは公式APIを参照
しかしBOTでやるとスパム扱いされやすいから注意

982名無しさん:2010/05/14(金) 11:33:24
>>980
ありがとうございます。スパムにならないよう気をつけます!

983うら:2010/05/14(金) 13:00:16
>>956
うーん、先方様に聞いていただきたいというのはダメなんですかね。

察するところ、
Twitter 側からの Mentions がきちんと取得できていない、
受け取った何らかのモノが解析できていない、
データがない場合の処理がないからまともなツイートが作れない、
というところでしょうか。

ま、プログラムがんばってください。
件のスクリプト、シンプルだけどその分拡張性に富んでますよね。

984名無しさん:2010/05/14(金) 14:02:08
月曜日から初めてbotを作りはじめて、現在行き詰ってしまいました。
よろしければご教授願います。
cronの設定がうまくいきません。過去ログなど参照して
30分に一回通常ポスト、5分に一回リプライとして
下記のようにbot.phpを書いています。


<?php
//=============================
//EasyBotterを呼び出します
//=============================
require_once("EasyBotter.php");
$eb = new EasyBotter();
//=============================
//botの動作をここに書いてください
//先頭に//がある行はコメント扱いなので実行しません。実行したい行の頭の//を削除してください。
//=============================
$response = $eb->autoFollow();
if(date("i") % 30 === 0){
$response = $eb->postRotation("data.txt");
}
if(date("i") % 5 === 0){
$response = $eb->reply(5,"data.txt","reply_pattern.php");
}
?>

しかし、手動で試したところ、真っ白で何も反応がない状態です。
ちなみにcron設定でifを使わない場合

<?php
//=============================
//EasyBotterを呼び出します
//=============================
require_once("EasyBotter.php");
$eb = new EasyBotter();
//=============================
//botの動作をここに書いてください
//先頭に//がある行はコメント扱いなので実行しません。実行したい行の頭の//を削除してください。
//=============================
$response = $eb->autoFollow();
$response = $eb->postRandom("data.txt");
$response = $eb->reply(5,"data.txt","reply_pattern.php");
?>

は問題なく投稿されました。
原因は上記のcron設定でしょうか・・・?

また、現段階で設定がうまくいっていないことが原因なのか、
free web cron schedule serviceで5分おきに叩くように設定したのですが
こちらも叩かれていないようです。
(GAEはうまくいかず、こちらにしました)
ちなみにサーバは@pagesです。
あと一歩のところなのですが・・・
よろしくお願いいたします。

985名無しさん:2010/05/14(金) 17:48:31
【バージョン】Easybotter 2.04beta
【設置鯖名】@pages
【PHPのバージョン】PHP-5.2.6
【実行】GAE-Cron
【手動】動く

「GAEでcron動かすやり方をゆとり向けにまとめ〜」のページを参考に作成し、
cronの動作はSuccessと表示されているのですが定期ポストが成功しません。
CrontwitServlet.javaの書き変える箇所を
http://www**.atpages.jp/○○○/bot.php」(@pages内に設置したbot.phpのURLそのまま)
と変更したのですが、叩かせるページが間違っているのでしょうか?
ご教授お願い致します。

986うら:2010/05/14(金) 18:35:21
>>952
bot.php を複数個お使いのようですので、念のため確認します。
その data.txt の中身は単なる発言のみが書かれているのですね?
その data.txt を使っての通常ポストは問題なく行われているのですね?
今も reply_pattern.php を削って 5kb 以下にした場合は問題が起こらないのですね?

またエラーメッセージですが、実行ごとに表示されるのでしょうか?
PEAR ディレクトリの構成は、解凍されたものと同じ構成になっていますか?
ちなみにテキストファイルでも php ファイルでも、バイナリ転送にすると良いですよ。

987うら:2010/05/14(金) 19:02:56
>>984
>>575をチェックして、まず postRotation が動くところから確かめましょうよ。
ちなみに指定するファイルが書き換え可能じゃないとエラーになりますよ。
また、5分ごとに cron するつもりなら、 reply() の条件づけは不要かと。

ところで bot.php で実行の条件づけは cron にはあたりませんよ。

>>985
そちらのスクリプト、実行の結果、つまり出力された HTML は得られないんでしょうか。
なお、 cron は cron スレで。

988985:2010/05/14(金) 19:24:47
>>987
レスありがとうございました
webcron.orgを使ってみたところ上手く動作しましたので、そちらに乗り換えようと思います。
スレ違い失礼致しました

989名無しさん:2010/05/15(土) 03:26:38
ファイルの数が多くなってきたのでいくつかのランダムポストやリプライデータを
フォルダに分けて整理したいのですが
ディレクトリの下の階層からそのデータを呼び出す時はどういう記述にしたらいいんでしょうか?

990名無しさん:2010/05/15(土) 03:28:29
>>989
/

991名無しさん:2010/05/15(土) 03:29:39
ごめん、途中送信した

>>989
基本的には フォルダ名/ファイル名.拡張子 で大丈夫

992名無しさん:2010/05/15(土) 03:36:01
>>991
お早い回答ありがとうございます
凄く簡単な事だったんですね、助かりました

993名無しさん:2010/05/15(土) 04:48:51
wikiの
『ランダムPOSTで複数のファイルからランダムに発言させたい』
と言う項目に

$randfile = array("one.txt","two.txt");//ランダムPOST-ファイル名
$response = $eb->postRandom($randfile[array_rand($randfile)]);//ランダムPOST
とすることでone.txtかtwo.txtをランダムに選び、更にtxt内の一行をランダムにPOSTします。
人格を分けて発言させたい場合、one.txtに1人格目・two.txtに2人格目のセリフを入れましょう。

と、ありますが、これは他の設定と組み合わせる事は出来ますか?
例えば月曜日の16時〜20まで外出イベントで、イベント内容は01〜05からランダムに選ばれ、
選ばれたら以降20時まで同じデータから順にポストする。同時にリプライデータも選ばれたデータに対応するものに自動選択。
みたいな感じです。

994名無しさん:2010/05/15(土) 06:48:03
>>993
それくらいならifかswitchで分岐させる方が初心者さんには簡単じゃないの?

995うら:2010/05/15(土) 08:50:38
>>993
プログラムは呼ばれた瞬間しか分からない、のです。
ですので、条件分岐をするためには、分岐したことが分かる仕掛けが必要です。
要は結果をファイルに残せばいいので、多少 bot.php に手を入れるだけですみますが、
実現にはある程度のプログラムスキルが要求されますね。

996名無しさん:2010/05/15(土) 10:20:48
度々恐れ入ります。
>>974で同様の質問をした者なのですが、調べてもどうしてもわかりませんでしたので、再度質問させて頂きます。スレ汚しすみません。
EasyBotter2.4bataを@pageのサーバで動かしているのですが、手動のところで躓いてしまっています。
通常のポストは問題ないのですが、リプライをさせようとすると
object(SimpleXMLElement)#10 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(22) "Status is a duplicate."
}
とのエラーが出て失敗してしまいます。
wikiを見たところ、
http://wiki.livedoor.jp/easybotter_wiki/d/ver.2.0*%A4褯%A4%A2%A4%EB%BC%C1%CC%E4*PHP%A5%A8%A5顼
このエラーに該当していましたので、data.txtとreply_pattern.phpの文字コードを確認してみたのですが、どちらも両方ともUTF-8、改行もLFになっていました。

>>975でアドバイスを頂いて調べてみましたところ、連続投稿エラーなので発言数を増やしてください、との答えでしたので
通常ポストの発言数、リプライ数、それぞれ25以上にまで増やしてみたのですが、同様のエラーが出てしまいます。

>>977でこのエラーメッセージには他の原因もあると教えていただき、”Status is a duplicate.”で板内検索もしてみたのですが見つけることができませんでした。
どこかで書き間違えているのかと思い、satting.php、bot.phpで最低限の動作だけ設定して鯖に送って試してもみたのですが、やはり同様のエラーが出てしまいます。
度々で申し訳ありませんが、どうかご教授お願いします。

997名無しさん:2010/05/15(土) 11:44:33
>>996
そのStatus is a duplicate.を今度はググってみ?
一番上に出てきたところで欲しかった答えが出ているから

998名無しさん:2010/05/15(土) 15:34:33
>>997
アドバイスありがとうございます。
早速ググってみたところ、
http://u-thule.sakura.ne.jp/blog/2010/03/114
こちらのサイトが出てきました。
近い時間帯で全く同じ発言を〜、とあったので、一時間以上を置いてリプライだけさせてみたのですが、やはり同様のエラーが出てしまいます。
他、
http://soudan1.biglobe.ne.jp/qa5858864.html
http://kstki.blog99.fc2.com/blog-entry-184.html
こちらも出てきましたので、アドバイスに従ってさらに通常ポスト、リプライでの発言数をそれぞれ40以上まで増やしてみましたが、まだ駄目なようです。
どうしたらリプライをしてくれるのか、恐れ入りますがご教授願います。

999名無しさん:2010/05/15(土) 15:36:40
今日botを作り始めたのですが、どうしても分からないので教えていただきたいです。
タイムラインに指定したワードがpostされたら、RTを返すようにしたいのですが 実際に試してみると、
failed: nothing to repeat at offset 0 in /usr/local/www/htdocs/【ID】/public_html/twibot/EasyBotter.php on line 279
こんなエラーと、
failed: nothing to repeat at offset 13 in /usr/local/www/htdocs/【ID】/public_html/twibot/EasyBotter.php on line 279
こんなエラーがたくさん出てきてできません。
どういう意味なんでしょうか…

1000名無しさん:2010/05/15(土) 18:31:06
>>998
1時間置いただけじゃダメ
20行くらい発言流れればOK
まず全部発言消して、それからテストしてみようよ?




掲示板管理者へ連絡 無料レンタル掲示板