したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が900を超えています。1000を超えると投稿できなくなるよ。

TwitterBotPHP質問スレ

421名無しさん:2010/07/24(土) 17:51:44
こんにちは。
リプライに「●●」という言葉が含まれていた場合、
reply.phpというファイルに飛ばし、
それ以外は以降の処理を行うという風に分岐させようと思い、
bot.php(リプライ、TL反応用ファイルです)を以下のようにしました。
が、実際「●●」を含めてリプライを飛ばす→bot.phpを手動で叩いても
真っ白な画面になってしまいます。
(特にエラーは出ません)
 リプライがない状態では、当たり前ですが
「5分以内に受け取った@はないようです」と出ます。

以下、bot.phpのソースです。

<?php
require_once("EasyBotter.php");
$eb = new EasyBotter();

//もらったリプライに「●●」が含まれていた場合
$aaa = "●●";
if(preg_match("/".$aaa."/u",$reply->text)){
$response = $eb->reply(5,"","reply.php");

これ以降elseifが続きますが、現在稼動しているものですので問題ないと思います。
どこがおかしい可能性があるのか、ご教示くださいませんでしょうか。
よろしくお願いします。

422421:2010/07/24(土) 17:53:59
すみません、コピーし忘れましたが
ifを閉じる}は付いています。

よろしくお願いします。

423名無しさん:2010/07/25(日) 00:21:42
>>417
>>418
>>419 さん

どうもありがとうございました。
419さんの構文でローカルチェックしたところ、うまく行きました!
たくさんの回答本当にありがとうございました。

424名無しさん:2010/07/25(日) 12:09:22
>>421
リプライはbot.phpで指定でなくEasyBotter.phpを改造した方がいいと思うけど…
wikiのID分けを単語でファイル分けるように改造するとか

425うら:2010/07/25(日) 12:22:45
>>420
「できる/できない」で問われれば、答えは「できる」です。
プログラムですからね。
といいますか、そういう風に仕込むのですよ。仕掛けを。

>>421
その $reply->text には、処理の時点で何が代入されるとお考えですか?
ちょっと echo してみましょう。

なお、非公式 wiki の方にユーザ別処理の改造が載っていますので、
そちらを参考に改造してみてください。

426名無しさん:2010/07/25(日) 14:07:22
質問させていただきます。

【バージョン】Easybotter Ver.2.03(あえて更新してません)
【設置鯖名】 @Pages
【PHPのバージョン】5
【手動】 動作に問題ありません
【実行】 GAE-Cron
【実行間隔】 5分間隔
【不明点】通常動作は問題なし。「Easybotter.php」をカスタマイズしたい

「EasyBotter 非公式wiki」様
(ttp://www26.atwiki.jp/easybotter_wiki/pages/1.html)に載っている、
「reply」の「特定のリプライ反応をリプライではなくTL発言にする」という
機能を利用させていただいているのですが、
どうやらこの機能は直接リプライを向けられた時にしか反応しないようなのです。
この機能をタイムラインの単語反応時にも利用したいのですが、
生憎自ら改造できるほどの知恵がありません。
どうか、ご教授お願いします。

427名無しさん:2010/07/25(日) 15:21:34
>>426 を書いたものですが、自己解決致しました!
タイムライン返信部にも同じ改造を施せる部分があったようです!
ありがとうございました!

428名無しさん:2010/07/25(日) 20:52:43
>>425
ありがとうございます!
どうすれば良いですか?
Easy Botterの改造が必要でしょうか?

429名無しさん:2010/07/26(月) 01:54:26
>>428
規定外のことやろうとするなら、EasyBotterの改造は必要に決まってる
自分でスクリプトのアウトラインくらいは考えてるの?

wikiの改造方法を見れば、いくつかを組み合わせて応用すればできる……とわかりそうなものだが

430名無しさん:2010/07/26(月) 03:08:33
>>428
どうすればいいのですか?って…
どうしたいか聞いたのだったら、どうしたらいいのかも想像がつくはず。
すでに書いてあるプログラムに対して、自分のしたいことに合わせて書き換えないと
意図通りに動かないということくらいは分かるよね?

次はどう改造したらいいんですか?と聞くつもりだったのだったのなら
まずはEasyBotter.phpを見て、どんな風に処理しているのかを見て考えたらいい
コメントが多いから、ここでこんな命令を出しているんだという流れが見えてくるから

431はげあたま:2010/07/26(月) 14:20:27
以下うまく動かない><もう自分ではお手上げなのでだれか添削してください
//自動Unフォロー
function autoUnFollow(){
$followers = $response = $this->getFollowers();
$followList = array();
foreach($followers as $user){
$followList[] = (string)$user->screen_name;
}
$friends = $response = $this->getFriends();
$friendsList = array();
foreach($friends as $user){
$friendsList[] = (string)$user->screen_name;
}
$unfollowQueue = array();
foreach(array_diff($friendsList, $followList) as $user){
array_push($unfollowQueue,$user->screen_name);
}
foreach($unfollowQueue as $screen_name){
$response = $this->UnfollowUser($screen_name);
}
}
--------
function UnfollowUser($screen_name)
{
$url = "http://twitter.com/friendships/destroy/&quot;.$screen_name.&quot;.xml&quot;;
return $this->_setData($url);
}

432はげあたま:2010/07/26(月) 15:22:50
うまくいったので、ご報告します。
//自動Unフォロー
function autoUnFollow(){
$followers = $response = $this->getFollowers();
$followersList = array();
foreach($followers as $user){
$followersList[] = (string)$user->screen_name;
}
//var_dump($followersList);
$friends = $response = $this->getFriends();
$friendsList = array();
foreach($friends as $user){
$friendsList[] = (string)$user->screen_name;
}
//var_dump($friendsList);
//var_dump(array_diff($friendsList, $followersList));
$unfollowQueue = array();
$unfollowQueue = array_diff($friendsList, $followersList);
foreach($unfollowQueue as $screen_name){
$response = $this->UnfollowUser($screen_name);
}
}
としたら、うまくアンフォロー出来ました。
お騒がせしました。

433はげあたま:2010/07/26(月) 16:50:10
//自動Unフォロー
で、追記。
bot.phpにいかを追加して完了です。

$response = $eb->autoUnFollow();

434421:2010/07/27(火) 14:38:39
>>424-425
いただいたアドバイスの通り、Wikiを見ながら
bot.phpではなくEasyBotter.phpを改造しました。
結果、希望通り動作いたしました!!

分岐したファイルにどうスクリプトを書くか、まだ先は長いですが
とりあえず一歩進めて嬉しいです。
アドバイスをありがとうございました。
また行き詰った時は相談させて下さい。

435名無しさん:2010/07/27(火) 17:25:43
>>429-430
wiki見るなり頑張ってやってみます!
ありがとうございました!

436名無しさん:2010/07/29(木) 11:00:29
質問させてください。

replay_pattern.phpの中にxmlの情報を取り込み、
それをリプライ文章に入れて投稿したいのですが、
エラーが出てしまいます。
以下、ソースです。

function aaa($b, $c){
$req="http://xxxx";
$req.="?b=".$b."&c=".$c;

$xml=simplexml_load_file($req);
$d = $xml->ddd;
$e = $xml->eee;
}
$b=111;
$c=222;

echo aaa($b,$c);

この$dと$eの値を取り込んで発言したいのですが、うまくいきません。
function aaa($b, $c){}の中に、$data = array(…を入れるとエラーが出るし
外に出すと、$dと$eが無視されて他の部分だけで投稿されます。

調べてみて、関数内で参照された変数は、関数内でしか有効でないと分かりました。
が、function aaa($b, $c){}内に入れるとエラーが出るので、どう書いたらいいのか・・・
staticにすればいいのかと思い書いてみましたが、書き方が悪いのかうまくいきませんでした。

という感じでお手上げです。
どうかアドバイスをお願いします。

437うら:2010/07/29(木) 12:22:28
>>436
こちらは Easybotter のサポート BBS です。
で、公式サイトにはちゃんと動く EasyBotter の php ファイルがあります。
この php の中で、関数はどのように値を吐き出すのか、実例があります。

ちゃんと勉強する気があるなら php 解説書をサラッとでも一読を。

438はげあたま:2010/07/29(木) 14:34:36
質問:
EasyBotter.phpの、自動フォローのところで、
foreach($followList as $screen_name){
$response = $this->followUser($screen_name);
> if($error = $response->error){
>break;
> }
}
>としたら、エラーで抜けますか?

439shami blue:2010/07/29(木) 22:15:34
http://sarah1635.blogspot.com/

440LOLITA BOARD:2010/07/29(木) 23:56:42
http://lix.in/-85767e

441436:2010/08/02(月) 11:40:09
>>437
今までネットのPHPリファレンスを読みながらなんとか記述していましたが、
いい機会だと思い、本を購入し読んでみました。
その上で分からない部分をネットで補足したりしながら書いてみて、
無事$data = array(…に反映させ、投稿する事ができました。

これからも行き詰る事がたくさんあるかと思いますが、
何とか頑張って勉強したいと思います。
ありがとうございました。

442名無しさん:2010/08/02(月) 18:15:02
スレ移動して来ました、よろしくお願いします

EasyBotter2.04betaを使わせていただいております
reply_pattern.phpの中で、もらったリプライ文章の中に
とあるワード(例の場合は$a)があるかないか、という事をしたいのですが、
リプライ元の文章は、どのように記述すればいいのでしょうか

$a = array(
"apple"=> "りんご",
"orange"=> "オレンジ",
);

foreach($a as $a_kay => $a_val){
if(preg_match("/" . $a_kay . "/u", ○○)){
$b = $a_kay;
break;
}

○○にリプライ元の文章を入れたいのです
返すリプライの中に含める場合は{tweet}だと分かるのですが
○○の部分にそのまま書いても認識してくれません
$reply->textかなと思いましたがダメでした

いろんなスレを見てまわりましたがどうしてもわかりません
ご教示お願いします

443名無しさん:2010/08/02(月) 22:38:22
>>442
今のあなたにアドバイスすることは「日本語でおk」ってことです
最初に書きこんだスレッドでのレスをもう一度読み返して下さい

というわけで、>>442は以降スルーで

444422:2010/08/03(火) 00:30:13
>>443
思い込みで勘違いしてしまいました
すみませんでした

445名無しさん:2010/08/05(木) 13:21:57
こんにちは。EasyBotter2.04を使わせていただいております。
現在、ランダム返信をrandam_reply.txtというファイル1つで行っているのですが、
これをリプライに特定の文字列(例えばbot名前)を貰ったときに
もう1つのファイルからランダム返信させる、ということは可能でしょうか?
文字列に対する反応としてreply_pattern.phpに全て記述しようとすると
ファイルが大きくなってしまうので(名前が2つあるためと、パターンを多くしたいため)
ファイル自体を分けられないかと考えたのですが

446名無しさん:2010/08/06(金) 00:03:56
>>445
wikiみてくると幸せになれるかも

447figronl:2010/08/06(金) 23:53:23
Dream Kelly
prev: hp://www.turboimagehost.com/p/3894174/Dreams.jpg.html
part1: hp://www.unibytes.com/EcaAhylJ2J-B
part2: hp://www.unibytes.com/wLoYKePScXsB
part3: hp://www.unibytes.com/CvhWFOyvhL0B
7kelly7

448のり:2010/08/11(水) 12:08:34
こんにちは。EasyBotter2.04を使わせていただいております。
早速ですが質問させていただきます。

自分のbotに私のことを登録している名前ではなく「お母さん」と呼ばせたいのですが…。
ID別に呼び方を変えるにはどのようにしたらいいでしょうか?
検索の仕方が悪いのかもしれないのですが出てこなかったのでお分かりの方いらっしゃいましたら教えていただきたく思います。
宜しくお願い致します。

449うら:2010/08/11(水) 14:02:57
>>448
検索してお分かりのことと思いますが、 EasyBotter にその機能はありません。
ですので、改造なりによってその機能を付け加えることが必要です。

EasyBotter.php は割と見やすいソースですので、処理の流れが容易に読めます。
流れが分かれば、どうしたら良いのかが見えてくると思います。
非公式 wiki には他の改造例が載ってますので、参考になさってください。

450のり:2010/08/11(水) 14:58:36
>>449
ありがとうございます。
改造する位置など不安になりましたらまたお世話になるかもしれませんがwikiを参考にし、呼ばせてみようと思います。
回答ありがとうございました!

451名無しさん:2010/08/12(木) 06:51:53
非公式wiki落ちてるような・・・

452名無しさん:2010/08/12(木) 13:24:11
>>451
スレ内、板内をちゃんと見てない証拠
新しいURLで稼働してる

453名無しさん:2010/08/15(日) 04:11:52
元AKB48の中西里菜AV出演!!サンプル動画
http://hotmaster.dtiblog.com/blog-entry-206.html

454名無しさん:2010/08/24(火) 02:27:47
>>448
一応こういうのがあるけど試して動作したら報告くれる?
http://twbot.blogspot.com/2010/08/http-setnickname.html

455名無しさん:2010/09/02(木) 12:07:38
質問失礼します。
Easybotter2.04を使っています。
リプライ上に特定の単語を含む場合、別のリプライパターンを読み込ませたいのですが、どのようにしたらいいでしょうか。

例:「おいしい」なら通常のパターンファイル
  「りんごおいしい」「おいしいりんご」等の場合は別のパターンファイル

456うら:2010/09/02(木) 12:34:58
>>455
リプライパターンの切り替えは一筋縄ではいかないと思います。
もちろんできることはできるはずですが。

なお、「りんごおいしい」「おいしいりんご」のパターンを「おいしい」より先に記述すれば
それぞれ別個のリプライを返すことはできますよ。

457455:2010/09/02(木) 22:17:16
>>456
レスありがとうございます。
「りんご」という単語が入った時、同リプライ内にある「おいしい」や「まずい」等複数の単語に対する特殊なリプライを返したかったので、
「りんご」を含む場合の返信を一つのファイルに纏められれば便利だと思ったのですが、難しいようですね…
素直に同じファイルに書き分けてみます。ありがとうございました。

458名無しさん:2010/09/03(金) 22:44:17
質問させていただきます。
特定のアカウントに対しては別のリプライパターンを読み込ませたいというwikiの項目を見てそれを入れたのですが、テストをすると反応ワード以外を実験で言うとランダム返信をします。
専用phpに入れた反応ワード以外をリプライすると無視するようにしたいのですがどのようにしたらよろしいでしょうか。
教えていただきたく思いますので宜しくお願い致します。

459名無しさん:2010/09/05(日) 22:17:15
EasyBotter.phpに関して質問します。

フォロワーIDと名前が一致しませんが、convertText関数が、それぞれランダムに生成しているためだと理解しています。
この置き換えを使用するときは、一致しているほうがなにかと便利だと思っていますが、なぜ一致しないような設計になっているのでしょうか?

ちなみに、自分は、ランダム部分を外に出し、その上で配列の最大値を超えないようにrand関数の引数を0とcountの-1にして動作させています。

460名無しさん:2010/09/07(火) 12:14:29
>>458
特定のアカウントにのみ反応ワード以外をリプすると無視させるってことだよね?
正しいやり方じゃないかもしれないけど…
自分は専用phpの最後に、

"."=> array(
"[[END]]",
),

を入れてますよ。

461名無しさん:2010/09/07(火) 15:05:46
1度実行されたら、複数のポストを投稿してくれるように出来ませんか?

最終的には、指定時刻に複数ポスト投稿をしようと考えています。

例:9時12時15時17時20時23時になったら、毎回
「私の名前は●●です。」
「私の趣味は●●です。」
「好きな食べ物は●●です。」
という、ポストを別々に投稿する。(つまり、毎時 計3回投稿)

確かに、
15時「私の名前は●●です。」
15時2分「私の趣味は●●です。」
15時4分「好きな食べ物は●●です。」
と、設定することもできるのですが、
投稿する内容を書き換えることが何度かあり、且つ投稿させる数の増減も予想されます。
ですので、その手間を考えると、最初に提案した方法が望ましいのですが、どなたか方法を教えていただけないでしょうか。

よろしくお願いします。

462名無しさん:2010/09/08(水) 11:09:05
>>461
Rotationの初期機能でできそうだが…

463名無しさん:2010/09/09(木) 00:20:48
質問させて頂きます。
TLに反応してTLで返答する、ということは出来ますか?

464名無しさん:2010/09/09(木) 01:31:11
>>463
出来ます。
非公式wikiのhttp://www26.atwiki.jp/easybotter_wiki
「特定のリプライ反応をリプライではなくTL発言にする」を応用すればいいだけです。

465現代ブランド市場激安ブランド問屋www.lv-best.net:2010/09/09(木) 12:03:19
◆ 連絡先: shop@lv-best.net
◆ 店 長: 小林 清美
◆ 当社URL: http://www.lv-best.net

466名無しさん:2010/09/10(金) 15:32:11
質問させていただきます。
普段、20分感覚でランダムポスト(+2分おきのリプライ反応、TL反応)をさせているのですが
ある日のある時間から数分間だけ、2分おきに別のtxtの内容を順番ポストさせたい場合の記述がわかりません。
(例えば、9月10日の1時30分〜45分の間だけabc.txtの内容を順番ポストさせたい、
txtファイルの中身を全部ポストし終わったら時間が来るまで黙る。といった感じです
できればその間はリプライ反応、TL反応共に止めたいです)
cronは2分おきになっているのでそこは指定しなくても平気かとは思うのですが
bot.phpの応用部分を見て組み合わせてみても上手くいかず・・・どのようにしたらいいでしょうか。
教えていただきたく思いますので、よろしくお願いいたします。

467名無しさん:2010/09/11(土) 04:48:49
フッターの文字列をランダムにする方法はありませんでしょうか?
setting.php内を
$footer_random = array("A", "B", "C");
$footer = array_rand($footer_random,1);
と書き換えてみたのですが何も表示されませんでしたので、よろしくお願いします。

468名無しさん:2010/09/15(水) 02:00:06
お聞きしたいことがあるのですが、A、B単体の単語では反応せず、"AB""A,B""〜A〜B"というふうにAとBの単語がどこかにあって初めて反応するように設定はできないのでしょうか?

469名無しさん:2010/09/15(水) 05:51:58
>>468
できますよ
初心者スレの1-3を読めば解決

470うら:2010/09/15(水) 12:45:51
>>467
とりあえず以下は確認されましたか?

EasyBotter 非公式wiki - ver.2.0*現状バグ
http://www26.atwiki.jp/easybotter_wiki/pages/22.html#id_5c160db0

471うら:2010/09/15(水) 12:52:42
>>466
ん?以下みたいな感じでいいのでは?

if(9月10日の1時30分〜45分の間) {
ローテーション(abc.txt, 最後の語句);
} else {
通常処理
}

472751:2010/09/16(木) 01:52:29
>>470
>>467はバグじゃない

>>467
array_randを理解してないから調べた方がいい

473名無しさん:2010/09/17(金) 01:32:29
質問させてください。
([^\s、。]+?)を使ってリプライをさせたいのですが、
「今日は」「○○は好き?」の二つの語句が入っている時別の反応をさせたいと思っています。
なのですが、
"([^\s、。]+)は好き?.*今日は|今日は.*([^\s、。]+)は好き?"=> array(
"$1おいしいです",
),
という形で設定すると
「○○は好き?今日は」には正しく反応するのですが
「今日は○○は好き?」とすると、$1が空白で返されてしまいます。
このような時、どのように書けばいいのでしょうか?ご教授お願いします。

474名無しさん:2010/09/17(金) 02:41:49
>>473
もう一度DLしたままのreply_pattern.phpか公式を読み直した方が良いよ
初歩的なところを勘違いしてる

そして正規表現の理解が及ばないレベルの初心者さんは初心者スレでどうぞ

475名無しさん:2010/09/17(金) 09:41:16
>>474
すみません、本当に使ってるものとはちょっと変えていたので
よく見たら間違っていました…
そして移動させていただきます、ありがとうございます

476digi-p:2010/09/18(土) 19:28:03
お世話になってます。 EasyBotter204ですが、自動応答(//$response = $eb->replyTimeline(30, "reply_pattern.php");)が、自分のアカウントのツイートに反応しないようにするには、どうすれば良いのでしょうか?

477名無しさん:2010/09/19(日) 00:23:15
>>476
非公式wikiのアカウント別処理を参考に改造すべし

478名無しさん:2010/09/23(木) 10:59:28
こんにちは
こちらのサイト様で配布されているデータで、Botがうまく動いてくれているので大変感謝しております。
pyaさま、ありがとうございます。

ここからが質問なのですが、今正常に動いているBotに天気予報をさせたいと思います。
include('./XXXXX/XXXXXX');
$feed = new XXXXXX();
$feed->set_feed_url("http://XXXXXXXXX/rss.xml&quot;);
$feed->init();

$mes=$item->get_content();
$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml&quot;,&quot;POST&quot;,array(&quot;status&quot;=&gt;$mes));

このような記述であっているのでしょうか。
フィードをとるのに一番簡単なサイトは何処でしょうか?
また、どこに挿入するのがいいのでしょうか。
無知でお恥ずかしい限りなのですがどなたかご教示下されば幸いです。

479うら:2010/09/23(木) 12:19:47
>>478
ええと? >>355 で質問をなさった方ではないんですよね?
とまれ、>>357 を参考にどうぞ。

480478:2010/09/23(木) 12:49:25
うら様、お返事ありがとうございます。
はい、その方は別の方です。
すみません、既出の質問だったのですね。
見落としてしまいました、申し訳ありません。
サイト様を拝見させていただきましたが、xmlファイルは別に作ってアップすればよいのでしょうか?
何度も申し訳ありません。

481うら:2010/09/23(木) 13:54:58
>>480
要は天気予報データの特定部分を変数として取得し、代入するプログラムの根幹の説明ですね。

初心者スレで答えたレスのサイトの方が分かりやすいですかね。
http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1273843076/344

482478:2010/09/23(木) 20:33:29
うらさん、ご回答いただきありがとうございます。
わかりやすいURLを教えていただき、感謝です。
なんとなくですが、掴めてきました。
少しずつ様子を見ながら頑張っていきたいと思います。
本当にありがとうございました。

P.S. はじめは本当に何も知らないど素人だったのですが(今もそんなに変わってないかもしれませんが^^:)
うらさんの作られたプログラムを基にいろいろと勉強しながらBOTをいじっていくのが
すごく楽しいです。
勉強するきっかけを与えてくださった事、本当に感謝します!
ありがとうございます!!!

483名無しさん:2010/09/24(金) 15:42:26
>うらさんの作られたプログラム
作ったのは@phaさんだよ

484名無しさん:2010/09/24(金) 17:51:36
phaさんも災難だな。未だにpyaさんて書く人もいるし
phaさんがなかなかこちらに来ないのもあるけど
ここもうらさんの独壇場になったのかねぇ…

485名無しさん:2010/09/24(金) 23:35:03
>>484
その書き方はうらさんに対して失礼じゃまいか?
質問があって、それに答えられる人がいれば答える、もし答えがなくてもしゃーない
っていうスタンスの板なんだし書き込み回数が多かろうと少なかろうと関係なかろw

486名無しさん:2010/09/24(金) 23:54:23
phaさんに失礼じゃなくても、うらさんには失礼なのか…

487名無しさん:2010/09/25(土) 13:01:38
>>486
うらさんの独壇場、という書き方がだよ

488名無しさん:2010/09/25(土) 15:10:41
整理age

489名無しさん:2010/09/26(日) 00:23:08
if(date("G") == 0){$response = $eb->postRandom("a.txt");}
if(date("G") == 7){$response = $eb->postRandom("b.txt");}
if(date("G") == 20){$response = $eb->postRandom("c.txt");}
if(date("G") == 23 && date("i") == 55){$response = $eb->postRandom("d.txt");}
if(date("G") == 0 && date("w") == 0){$response = $eb->postRandom("e.txt");}

時間指定で上のように書いたら文字化けして滅茶苦茶だんだが
なにか問題があるのか?

490名無しさん:2010/09/26(日) 04:21:27
>>489
文字化けするのは文字コード・改行コードの問題じゃない?

491名無しさん:2010/09/26(日) 06:38:45
そんなところのセッティング弄ってないのに関係あるのか?
data.txtにあたる部分もそれぞれ1行のみで改行すらしてないし

492名無しさん:2010/09/26(日) 06:44:51
正確にはbot.phpの中身は下のように書いてある

<?php
require_once("EasyBotter.php");
$eb = new EasyBotter();
if(date("G") == 0){$response = $eb->postRandom("a.txt");}
if(date("G") == 7){$response = $eb->postRandom("b.txt");}
if(date("G") == 20){$response = $eb->postRandom("c.txt");}
if(date("G") == 23 && date("i") == 55){$response = $eb->postRandom("d.txt");}
if(date("G") == 22 && date("w") == 0){$response = $eb->postRandom("e.txt");}
?>

最近なんかもっと逝かれて2、30個ぐらいの文字化けコメントを短時間に投稿してた

493名無しさん:2010/09/26(日) 21:20:19
>>491
関係あるから>>490さんはそう答えたんだと思うけど
他は全角になってないか、data.txtにあたるファイルのパーミッションが
666かも点検してみてください

494名無しさん:2010/09/26(日) 21:21:45
失礼。全角になってないかはbot.phpの方ね

495名無しさん:2010/09/26(日) 23:48:40
>>491
エディタやFTPやレン鯖が勝手に違う設定に書き換えることがある
と過去ログ読めばわかることですよ(^^)

496名無しさん:2010/09/27(月) 02:58:37
もともとランダムポストで問題なく動いていたEasyBotterを丸々コピーして
定時専用として独立させただけのものなんだ。
同じ鯖で同じソフト、パーミッションも間違いない。
だから>>490>>493>>495に挙げられた点が関係するとは考えられない。
今もコピー元のランダムポストのbot.phpは正常稼働してるんだから

497名無しさん:2010/09/27(月) 11:08:00
そこまで自信満々に否定するなら勝手にしたら?

498名無しさん:2010/09/27(月) 13:10:45
tu-ka鯖情報や使用ソフトもわからないのにそこだけ抜き出して答えろって言われてもねー
コピー元がおkなら、コピーしたのが原因なんじゃねーの

499名無しさん:2010/09/27(月) 14:34:24
たまにコピペしているのにエラーになるのがあったなそういえば
ウチのbot管理人のフォロワーにもそういう人いたわ
ある特定のところやあるソフトでコピペするとエラーになるって

500名無しさん:2010/09/27(月) 16:14:54
コピーしても変わってる場合あるからな
質問する前によく確認してからすることだ

501名無しさん:2010/10/08(金) 14:53:45
// twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
require_once("twitteroauth/twitteroauth.php");

//OAuthキーをそれぞれ入力
$consumer_key = "";
$consumer_secret = "";
$access_token = "";
$access_token_secret = "";

//最後に読み込んだリプライを保存するtxtファイル(同じフォルダに保存、パーミッションを書き込み可に)
$filename = "tenki.txt";
$host = "http://twitter.com/statuses/mentions.xml&quot;; //返信一覧


$fp = @fopen($filename,'rb') or die("ファイルが開けません");
flock($fp, LOCK_EX);
$line = fgets($fp, 64);
fclose($fp);

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);


//保存しておいたステータスid取得。このid以降の返信を読み込む。なかったり読み込めなかったら最新1件
if(!empty($line)){
$req = $to->OAuthRequest($host,"GET",array("since_id"=>$line));
}
else{
$req = $to->OAuthRequest($host,"GET",array("count"=>"1"));
}


//XML文字列をオブジェクトに代入する
$XML = simplexml_load_string($req);

//フレンドリストのオブジェクト作成
$host = "http://twitter.com/friends/ids.xml&quot;;
$req = $to->OAuthRequest($host,"GET",array());
$friends = simplexml_load_string($req);
$friendslist = array();
foreach($friends->id as $item){
$friendslist[] = (String)$item;
}


//順に返信
$i = count($XML)-1;
$j = 0;
while($i >= $j) {
$var = $XML->status[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;
$id = $XML->status[$i]->id;

//ゴチャゴチャするので、返信のセリフ組み合わせはユーザー定義関数で。
$message = serif($reply_name,$name,$com,$id);
//そのままポストの関数へ…
if($message){
$result = $to->OAuthRequest("https://twitter.com/statuses/update.xml&quot;,&quot;POST&quot;,array(&quot;status&quot;=&gt;$message,&quot;in_reply_to_status_id&quot;=&gt;&quot;$id&quot;));
print $result;
}
$i--;
}

//最終発言リプライのidを保存してる部分。先頭を調べて…
$string = $XML->status[0]->id;
//空じゃなかったら書き込み
if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}
//これでメインの処理は終わり


//セリフ生成のユーザー定義関数
function serif($reply_name,$name,$com,$id){

$break_flag = false;
$today = date("Y/m/d l H:i:s");//デバッグ用の日付表示(なくてよい)

502名無しさん:2010/10/08(金) 14:54:43
//お天気用
$w_city = array( // 都市名→都市番号の変換用配列
"札幌"=>4,"旭川"=>2,"函館"=>15,"青森"=>17,"むつ"=>18","八戸"=>19,"秋田"=>20,"盛岡"=>22,"仙台"=>25,"山形"=>27,"米沢"=>28,"酒田"=>29,"福島"=>31,"小名浜"=>32,"富山"=>44,"金沢"=>46,"輪島"=>47,"福井"=>48,"敦賀"=>49,"新潟"=>50,"長岡"=>51,"水戸"=>54,"土浦"=>55,"宇都宮"=>56,"前橋"=>58,"みなかみ"=>59,"さいたま"=>60,"千葉"=>67,"銚子"=>68,"館山"=>69,"東京"=>63,"八丈島"=>65,"横浜"=>70,"小田原"=>71,"長野"=>72,"松本"=>73,"飯田"=>74,"甲府"=>75,"静岡"=>34,"三島"=>36,"浜松"=>37,"名古屋"=>38,"豊橋"=>39,"岐阜"=>40,"高山"=>41,"津"=>42,"大津"=>77,"彦根"=>78,"京都"=>79,"舞鶴"=>80,"大阪"=>81,"神戸"=>82,"徳島"=>101,"高松"=>103,"松山"=>104,"宇和島"=>106,"高知"=>107,"室戸"=>108,"岡山"=>88,"広島"=>90,"松江"=>92,"鳥取"=>95,"米子"=>96,"下関"=>97,"山口"=>98,"萩"=>100,"福岡"=>110,"飯塚"=>112,"久留米"=>113,"大分"=>114,"日田"=>116,"長崎"=>118,"佐世保"=>119,"佐賀"=>122,"熊本"=>124,"人吉"=>127,"宮崎"=>128,"延岡"=>129,"都城"=>130,"高千穂"=>131,"鹿児島"=>132,"那覇"=>136 );
foreach( $w_city as $w_area => $w_areaNo){
if( preg_match( "/".$w_area."/u", $com ) ){
$cityName = $w_area ;
break;
}
}
if( empty($cityName) ){
$cityName = "東京";
}
$where = $w_city["$cityName"];

$w_day = array( // 日付→日付パラメータの変換用配列
"今日"=> today,"きょう"=> today,"明日"=> tomorrow,"あす"=> tomorrow,"あした"=> tomorrow,"明後日"=> dayaftertomorrow,"あさって"=> dayaftertomorrow );
foreach( $w_day as $w_time => $w_timeNo){
if( preg_match( "/".$w_time."/u", $com ) ){
$timeName = $w_time ;
break;
}
}
if( empty($timeName) ){
$timeName = "今日";
}
$day = $w_day["$timeName"];

$tenki_url = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=&quot;.$where.&quot;&amp;day=&quot;.$day;
$tenxml = simplexml_load_file($tenki_url);
$telop = $tenxml->telop;
$max = $tenxml->temperature->max->celsius;
$min = $tenxml->temperature->min->celsius;


//語句のマッチを探す
if($break_flag === false){
//配列を用意して…
$tenki=array("".$timeName."の".$cityName."の天気は".$telop."、 最高気温は".$max."度、最低気温は".$min."度だな");

//特定語句に反応する部分
if($reply_name != null){
$reply_name = "@$reply_name";

if(stristr($com, "RT")){
$return = null;
}else if(preg_match("/天気|てんき/u",$com)){
$key = array_rand($tenki);
$post = $tenki[$key];
$return = $reply_name." ".$post;
}

//戻り値
return $return;

}else{
//$reply_nameが空のときはnullになる
return null;
}
}
}

?>

503501:2010/10/08(金) 14:55:13
こんな感じで、天気予報をするソースを作ったのですが、これをEasyBotterに組み込むことは出来ますか?
どのような方法があるのかご指南いただければ幸いです。
お手数をおかけして大変申し訳ありませんが、ご教示ください。

504名無しさん:2010/10/08(金) 15:28:16
これ凄ぇwwwwwwwwwwww
http://gekiyasujyofoooo.sub.jp/

505名無しさん:2010/10/09(土) 00:36:52
{tweet}を使って「つ○○」と話しかけたときに
「○○だ!ありがとう」や「○○かぁ…いらないや」
のように複数パターンでおうむ返しさせたいのですが
スレッドを検索してみても、1つのパターンでの返し方しかわかりません。

どなたか教えて頂けないでしょうか。

506名無しさん:2010/10/09(土) 03:12:01
>>505
reply_pattern.phpの一番下ら辺にあるのを改変して使えば良いと思うんだが?

507名無しさん:2010/10/09(土) 14:31:41
>>506
それを参考に改変してみたのですが
つ○○と話しかけられると返事が
○○の最初の一文字しか返してくれなくなります。

"つ([^\s、。]+?)"=> array(
のようにしているのですが…

508名無しさん:2010/10/09(土) 21:39:13
>>507
そもそも意味が分かってない。正規表現をもっと勉強すべし

509名無しさん:2010/10/10(日) 02:01:44
>>507
初心者スレの現行スレを見れ

510名無しさん:2010/10/10(日) 10:44:45
>>507
これ使ってみ
http://www.rider-n.sakura.ne.jp/regexp/regexp.php

511名無しさん:2010/10/10(日) 21:30:16
初めまして、今晩和。お邪魔致します。
PHPは殆ど初心者で、何とかbotの製作を行っている次第です。

早速で申し訳ないのですが、現在リプライパターンの編集をしており
「○○という言葉を○回以上含む発言」に対しての返答を別に考えたいのですが
可能でしょうか?

よろしければご回答願えればと思います。

512名無しさん:2010/10/11(月) 01:46:07
>>511
リプライパターンだけじゃ無理そうですね。
easybotter本体を改造しないと。
function makeReplyTweets の
//パターンになかった場合はランダムに
の直前にその条件式と返答を直接書くのが早いと思います。
xがx回 っていう条件は preg_match_all関数でいけるとおもいます。

513名無しさん:2010/10/11(月) 10:34:24
>>512

回答ありがとうございます。
そうですね・・・少し考えてみようと思います。
助かりました。

514名無しさん:2010/10/12(火) 12:53:29
wikiにある時間別で発言させる方法を試してみたのですが、どうもうまくいきませんでした。
下記のような感じで設定しているのですが、どこかおかしい部分はありますでしょうか?

if(date("G") > 4 && date("G") < 6){ //5時に実行される
$response = $eb->postRandom("dataR_5.txt");
}else
if(date("G") > 5 && date("G") < 8){ //6時-7時に実行される
$response = $eb->postRandom("dataR_6_7.txt"); //ここは空のダミーファイル
}else
if(date("G") > 7 && date("G") < 9){ //8時に実行される
$response = $eb->postRandom("dataR_8.txt");
}else
if(date("G") > 8 && date("G") < 11){ //9時-10時に実行される
$response = $eb->postRandom("dataR_9_10.txt"); //ここは空のダミーファイル
}else
if(date("G") > 10 && date("G") < 12){ //11時に実行される
$response = $eb->postRandom("dataR_11.txt");
}else
if(date("G") > 11 && date("G") < 14){ //12時-13時に実行される
$response = $eb->postRandom("dataR_12_13.txt"); //ここは空のダミーファイル
}else
if(date("G") > 13 && date("G") < 15){ //14時に実行される
$response = $eb->postRandom("dataR_14.txt");
}else
if(date("G") > 14 && date("G") < 22){ //15時-21時に実行される
$response = $eb->postRandom("dataR_15_22.txt"); //ここは空のダミーファイル
}else
if(date("G") > 21 or date("G") < 0){ //22時に実行される
$response = $eb->postRandom("dataR_22.txt");
}else
if{ //24時〜4時に実行される
$response = $eb->postRandom("dataR_23_4.txt");
}

515名無しさん:2010/10/12(火) 13:00:29
15-22や24-4など所々時間とテキストデータの名前が違っているのは仕様なのでスルーしていただけると幸いです…。
連続投稿失礼しました。

516名無しさん:2010/10/12(火) 13:54:43
>>514
文法エラーですよ

517名無しさん:2010/10/12(火) 14:22:04
>>514
else と if を改行しているけど、wikiのような形にしたほうが分かりやすいかも?
あと、最後のほうの22時に実行する部分は「0より小さい」という指定をしているよ
決まった時間(5時・8時とか)を指定している所があるけど、そういう場合は=にしたほうがすっきりするんじゃないかな
(“PHP if =”などで検索すると色々と説明しているサイトがあるので、自力で調べてね)

518名無しさん:2010/10/12(火) 21:42:07
初心者スレ移動の内容だよ>>514

519514:2010/10/13(水) 20:57:01
>>516
そうですよね…全然うまくいかないので多分そうだと思ってました
ご指摘ありがとうございます

>>517
間違った部分がどうしても分からなかったので、大変助かりました
改行の部分は自分が見やすかったのでこの形にしてみたのですが、何かミスが起こると心配なのでやはりwikiの形にしてみますね
他にも適切なアドバイス、ありがとうございました

>>518
PHPの質問だったのでこちらに書き込みさせて頂いたのですが、スレ違いのようで、どうもすみませんでした…今度からはあちらで質問させていただきますね

520名無しさん:2010/10/13(水) 21:59:10
こんばんは、質問させてください。

フォロワーからのリプライを、リプライを送ってきた人だけではなく全フォロワーに見せたいのですが、どこを書き替えたらいいのか分かりません。

リプライを作る、のところを
$re["status"] = ".".$status;
にして全てのリプライに[.]が付くようにしたのですが、そのように反映されてはいるものの
viaの部分が
EasyBotterから@A宛 
と宛先を限定されてしまいます。

in_reply_to_status_id
をどうにかすればいいのではないかと考えて試行錯誤しているのですが改善されない&エラーばかりの状態です。
ご存じの方教えて頂けると嬉しいです。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

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