• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TwitterのBotをEasyBotter2.0+@Pagesの無料)

TwitterのBotをEasyBotter2.0+@Pagesの無料サーバで運用しています。

このQ&Aのポイント
  • 自動フォロー返し時にリプライを送る方法に関して質問です。
  • フォローしたユーザーに対してランダムなリプライを送りたいですが、現在はDしか送信されません。
  • PHPの基礎知識がなく、解決方法を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 EasyBotter2.0のソースを覗いてみました。  自動フォロー返しで処理をしようとしているのであれば、autoFollow関数に改造を加えているのかと思われますが、ランダムなリプライを送りたいのであれば、これはデータをテキストファイルから読みだしている形ですがpostRandom関数(というより実際に発言データをランダムに抽出しているmakeTweet関数)の方も参照してみてはいかがでしょうか。  質問に書かれているソースのように、単に$valueに複数のステータスを入れても、setUpdateの先でランダムで取り出してくれるわけではないので、ランダムなリプライはできません。(というか、setUpdateの先では$value["status"]は単一の文字列としか扱っていないので、ここに複数の文字列を入れようとしても意味ありません。  ランダムにリプライするなら$value["status"]に設定する以前に複数データから1個のデータをランダムに取り出しておく必要があります。 例えばrand関数を用いて $rnd_reply = array( 0 =>"@{$rscreen_name} A", "@{$rscreen_name} B", "@{$rscreen_name} C", "@{$rscreen_name} D" ); $value = array(); $value["status"] = $rnd_reply[rand(0,3)]; とするのも一つの方法です。

xxdaiadxx
質問者

お礼

ありがとうございました!!できました!! 今回のことでかなり勉強になりました~。 完成形はこんな感じになりました。 //■■フォローした時にリプライを送る■■ foreach($followList as $rscreen_name){ $rnd_reply = array( 0 =>"@{$rscreen_name} A", "@{$rscreen_name} B", "@{$rscreen_name} C", "@{$rscreen_name} D" ); $value = array(); $value["status"] = $rnd_reply[rand(0,3)]; $response = $this->setUpdate($value); $result = $this->showResult($response); $results[] = $result; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

どうしてこれでランダムに出力できると判断しているのか謎ですが、Dしか出ないのは実質的に配列にDしか格納されていないからです。同じキーで代入したら、新しいものが順番に上書きされるので、最後のものしか残りません。 $value = array( "status"=>"@{$rscreen_name} A", "@{$rscreen_name} B", "@{$rscreen_name} C", "@{$rscreen_name} D", ); のように2番目以降のキーを省略するか、 $value = array( "status1"=>"@{$rscreen_name} A", "status2"=>"@{$rscreen_name} B", "status3"=>"@{$rscreen_name} C", "status4"=>"@{$rscreen_name} D", ); のように違うキーを使う必要があります。

xxdaiadxx
質問者

お礼

早速のご回答ありがとうございます! よく分からないなりにも、前者の方は試した(つもり)のですが、 その時は動かなかったので、もう一度これで正確にやってみます。 (Dの後の,が無かったかも・・・) それでダメだったら後者の方でやってみて、ちょっと 様子を見たいと思います。 ありがとうございました!!

xxdaiadxx
質問者

補足

magicalpassさんの回答を両方共、2日間ずつ試しましたがダメでした。 エラーは出ませんが、出力をしない状態です。 現在は以前のように、一つのリプライパターンで正常に動いています。 ですので、引き続き募集させていただければ幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • twitterのbotが自動フォロー返しなくなった

    基本はEasyBotterで作ってあります 【バージョン】 Ver2.04beta 【設置鯖名】 @PAGES 【PHPのバージョン】5 【手動】 フォロー返し以外は手動も自動も正常に動いています 【実行】 GAE-Cron 【実行間隔】 2分間隔 bot.phpに $response = $eb->autoFollow(); を入れて、 EasyBotter.phpに //自動フォロー返し function autoFollow(){ $response = $this->getFollowers(); $followList = array(); foreach($response as $user){ $follow = (string)$user->following; if($follow == "false"){ $followList[] = (string)$user->screen_name; } } foreach($followList as $screen_name){ $response = $this->followUser($screen_name); } //■■フォローした時にリプライを送る■■ foreach($followList as $rscreen_name){ $value = array("status"=>"@{$rscreen_name} フォローしました"); $response = $this->setUpdate($value); $result = $this->showResult($response); $results[] = $result; } } を入れてあります。 最近まで動いていたのですが、 フォロワーが1000人を超えたあたりからなぜか動かなくなりました。 というのをEasyBotter初心者質問スレ3(http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1287944674/)で質問したところ、 「最新のAPI確認 公式でフォロー数規定確認 」 という回答をいただきました。 確認してみたのですが 公式のフォロー数規定は超えてないようです 最新のAPIというあたりから勉強不足でよくわからないのですが、 どうしたらいいのでしょうか? よろしくおねがいします

    • ベストアンサー
    • PHP
  • ツイッターbot:特定のアカウントへのリプライの事

    http://pha22.net/twitterbot/2.0/faq.php http://www26.atwiki.jp/easybotter_wiki/pages/1.html 主にこちらのサイトを参考にしてツイッターのボットを製作しています。 一応それなりに動いて稼働してはいますが、特定のアカウントに対して別のリプライパターンを読み込ませる、というところで躓いております。 上記のサイトはもちろん他のサイトも参考にしてphpを打ち込みましたが、如何せんphpへの理解がまだまだ足りておらず、どこが分からないのかもよく分かっていません。 曖昧な質問で申し訳ありませんが、こうしたらどうか?などのアドバイスをお待ちしております。 EasyBotter ver2.1.1 サーバー:@pages エディタ:Terapad FTP:FFFTP cron:My Free Web Cron Service 【】の部分を書き換えた //■■特定の人には別パターン■■ $userName = (string)$reply->user->screen_name; switch(true){ case stristr($userName, "【ユーザーID】")://【ユーザーID】と名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile); break; default://それ以外 $replyPatternFile = $org_repfile; //デフォルトのパターンファイル名 } と $org_repfile = $replyPatternFile; //デフォルトのファイル名を保管 は指定の場所にコピペ済みです。

  • if文での条件分岐後の出力内容を他のページへ移動させたい

    お世話になります。現在ショッピングカートを製作しているのですが、b.phpで条件分岐をし、商品名、金額を表示させるのですが、表示させた内容をどのようにしたら、c.phpやd.phpに移動させることが出来るのでしょうか?ちなみにセッションを利用しています。 a.php(選択画面)→b.php(商品名・金額を表示)→c.php(送付先入力)→d.php(送付先入力確認)→e.php(メール送信) a.php ------------------------------------------------- <form name="form1" method="post" action="b.php"> <input type="radio" name="a" value="1">ラーメン <input type="radio" name="a" value="2">ソバ <input type="radio" name="b" value="1">うどん <input type="radio" name="b" value="2">パスタ <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- b.php <form name="form1" method="post" action="c.php"> <?php session start(); $_SESSION['php']=$_POST['a']; $_SESSION['p']=$_POST['b']; ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "ラーメン&うどん" } 省略 ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "1000円" 省略 <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- 上記のラーメン&うどん、と1000円をc.phpへ移動させるにはどのようにすればよいでしょうか? おわかりになられる方ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • Twitter Botの作成についてご教授願います

    タイトルの通り、TwitterのBot作成についてご教授願います。 [環境] 改修ソース:EasyBotter Ver_1.42(http://pha22.net/twitterbot/) サーバ  :PHP5に対応 備考   : PHP専用のデバッグ環境などはなく、変数の確認はブラウザにechoで出力して確認しています。 相手から特定のワードを含むリプライをもらった場合、 FlagをON-OFFさせる処理を追加しようと考え、以下のようにコーディングしました。 [source] $flag = 0; $text = $rdata["text"]; $test = "AAAA"; if(strpos($text,$test) === FALSE){ $flag = 0; //TURE }else{ $flag = 1; //FALSE } $textには、EasyBotterがデフォルトで定義している構造体から、相手の発言を代入。 $testには、特定のワードを代入しています。 それぞれの変数に、想定どおりの値が代入されていることを確認しているのですが、 ifの条件式($textに$testが含まれているか否か)の結果に関わらずTURE時の処理しか行いません。 また、strposが0や""を返す場合があることも考慮して、0や""を条件に実施してみましたが結果は同じでした。 ちなみに、条件式の結果(戻り値)自体は確認できておりません。 確認しようと式単体で実施しましたが、式が間違っているのか値が何も返ってきませんでした。 (これが原因ではないかと踏んでいます) ・こうすれば改修できる ・こうしたほうが楽 ・過去の回答を参考に 上記のような観点で、ご教授頂ければと思います。 なお、過去の質問は目を通したつもりですが、漏れがあるかも知れません。 お手数ですがURLを載せて頂けますと幸いです。

    • 締切済み
    • PHP
  • ツイッターで自分のリプライだけが表示されない

    Aさんが投稿したツイートに対しリプライを送ると、そのAさんのツイートの詳細を開いた際にそのツイートに対するリプライが全て見えると思うのですが、そこに自分のリプライだけ表示されません… Bさん、Cさんがリプライしたというのは表示されていてわかるのですが自分のリプライだけ見えておらず Aさんが自分のリプライに対しリプライをしたときに、ようやく元のツイートの詳細に自分のリプライが現れる状態です。 このことから、Aさんのタイムライン上には自分のツイートが見えているようではあるので、不都合があるというわけではないのですが、今までは普通に表示されていたため心配性な自分はリプライが返ってくるまでは相手に届いているか不安になってしまいます。 Aさんと自分は相互フォローしており AさんとBさん、AさんとCさんも相互フォローしています。 自分とBさんとCさんはお互いフォローはしていません。 ちなみに、アイフォンの公式アプリ、ついっぷる、パソコンで同じ状況になっています。 ので、アカウントが原因だと思うのですが、設定も何もいじってないのでさっぱりわからない状態です。 わかりにくいかもしれませんが、教えていただけると幸いです。

  • PHPでUndefined variableエラー

    PHPでUndefined variableエラーが発生します: <b>Notice</b>: Undefined variable: result in <b>/opt/lampp/htdocs/samples/chapter3/3-2/gen_defined_vars.php</b> on line <b>58</b><br /> どうやって直せばいいのか教えてください。 58行目がおかしいと出ていますが、$resultが未定義なので54行目のことだと思います。 ちなみに 9ー12行目は自分で直しました。お願いします。 1 <html> 2 <head> 3 <title>環境変数コード生成フォーム</title> 4 </head> 5 <body> 6 <?php 7 // 選択リストの値を取得 8 $name = "param"; 9 if ( isset($_POST[$name]) ) { 10 $selected_value = $_POST[$name]; 11 } 12 //$selected_value = isset($_POST[$name]) ? $_POST[$name] : ""; 13 14 // 定義済み変数を取得 15 $array = get_defined_vars(); 16 17 // 配列から選択リストを作成する関数 18 // パラメータ:配列/選択リスト名/選択値 19 function disp_list($array, $name, $selected_value = "") { 20 echo "<select name=\"" . $name . "\">"; 21 while (list($value, $text) = each($array)) { 22 echo "<option "; 23 if ($selected_value == $value) { 24 echo " selected "; 25 } 26 echo " value=\"".$value."\">" . $value . "</option>"; 27 } 28 echo "</select>"; 29 } 30 31 // 入力内容を処理する 32 $temp = "<?php echo \$_SERVER[\"%s\"] ?>"; 33 if (isset($_POST["param"])) { 34 $param = $_POST["param"]; 35 $result = sprintf($temp, $param); 36 } 37 else { 38 $param = ""; 39 } 40 41 ?> 42 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> 43 <table cellpadding="10"> 44 <tr> 45 <td>環境変数を選択:<br /> 46 <?php echo disp_list($array["_SERVER"], $name, $selected_value); ?> 47 <input type="submit" value="作成" name="sub1"> 48 </td> 49 </tr> 50 <tr> 51 </tr> 52 <tr> 53 <td>作成されたコード:<br /> 54 <textarea name="ta1" rows="3" cols="40"><?php echo $result ?></textarea> 55 </td> 56 </tr> 57 </table> 58 </form> 59 </body> 60 </html>

    • ベストアンサー
    • PHP
  • フォームに入力された値を計算する方法

    私はまったくの初心者なのですがどなたか教えて下さい。 ●A,B,Cという3つの入力フォームがあるとします。 Aのフォームに入力された数字は「A÷20」という値に、 Bのフォームに入力された数字はそのまま、 Cのフォームに入力された数字は「C×10」という値に変更して、 (A+C)÷B×30という計算を行なって、その答えを Dのフォームへ表示するというシステムをcgiやphpで作りたいのです。 あれこれと試行錯誤しながら、javascriptでなんとか出来たんですが… どなたか教えて頂けませんか? function keiri() { a = document.takeko.case.value; a = eval(a); a = a / 20 b = document.takeko.time.value; b = eval(b); c = document.takeko.days.value; c = eval(c); c = c * 10 ans = (a + c) / c * 30; document.spec.result.value = ans; } <form name="takeko"> <input name="case" type="text" size="12"> <input name="time" type="text" size="12"> <input name="days" type="text" size="12"> <input name="button" type="button" onClick="keiri()" value="CLICK"> <input name="result" type="text" size="12"> <br></form>

    • 締切済み
    • PHP
  • PHPのforeachでMysqlにINSERT

    PHPのforeach文を使いMysqlにデータをINSERTしたいです。 配列$resultは以下のような連想配列になっています。 Array ( [0] => Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 ) [1] => Array ( [A] => 2 [B] => 4 [C] => 6 [D] => 8 [E] => 10 ) ) 上記の連想配列をforeach()文で以下の処理をします。 foreach ($result as $key => $value) { /** * データベースへの追加(新規追加時だけ実行。コメント忘れずに) */ $sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)'); $sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E])); } その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。 print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。 アドバイス頂きたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • PHP

    PHPで <p>曜日</p> <p> <input type="checkbox" name="youbi[]" value="1" <?php if(strstr($result[4],'1')) echo"checked"; ?>>月 <input type="checkbox" name="youbi[]" value="2" <?php if(strstr($result[4], '2')) echo"checked"; ?>>火 <input type="checkbox" name="youbi[]" value="3" <?php if(strstr($result[4],'3')) echo"checked"; ?>>水 <input type="checkbox" name="youbi[]" value="4" <?php if(strstr($result[4],'4')) echo"checked"; ?>>木 <input type="checkbox" name="youbi[]" value="5" <?php if(strstr($result[4],'5')) echo"checked"; ?>>金 <input type="checkbox" name="youbi[]" value="6" <?php if(strstr($result[4],'6')) echo"checked"; ?>>土 <input type="checkbox" name="youbi[]" value="0" <?php if(strstr($result[4],'0')) echo"checked"; ?>>日 </p> <p>時間</p> <p> <input type="submit" value="設定" /> とやると日曜日を選択してsubmitするとチェックが外れます。なぜでしょうか?

    • ベストアンサー
    • PHP
  • 選択された値をセッションで保存したい

    ラジオボタンで選択された値をセッションで保存し、DBまで持って行きたいのですが、どのようにすればよいでしょうか?なお、ラジオボタンからはPOSTで渡しています。どなたかわかる方ご教授お願いします。流れは【a.php => b.php => c.php => d.php => DB】c.phpにラジオボタンがあります。 [c.php]はこのような感じです。 <form name="form1" method="post" action="d.php"> <input type="radio" name="color" value="なし" >なし <input type="radio" name="color" value="赤">赤 <input type="radio" name="color" value="青">青 <input type="submit" name="Submit" value="送信">

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • PT-P900WでQRコードをレイアウトに取り込む際の対応可能データ形式について知りたいです。
  • 使用している環境はWindows10で、接続は有線LANです。
  • 関連するソフト・アプリや電話回線の種類は特にありません。
回答を見る