プログラミングに関する質問

このQ&Aのポイント
  • プログラミングに関する質問です。EASYBOTTERを使用してTwitterのbotを作成しています。
  • 質問内容は、時間帯ごとに異なる言葉を出力するファイルを作成し、cronを使用して定期的に実行し、特定の条件下で反応するようにしたいというものです。
  • 現在、単体での動作はうまくいっているが、複数のファイルを組み合わせる方法が分からず、1回に5回のつぶやきを行う設定がうまく行っていないという問題があります。
回答を見る
  • ベストアンサー

プログラミングに関しての質問です。

プログラミングに関しての質問です。 今EASYBOTTERをつかってツイッターのbotを作っています。 やりたいことは以下です。 ・時間帯ごとにはきだす言葉(ファイル)を変える。 ・cronを10分ごとに稼働させ、通常のつぶやきは5回に1回、リプライは稼働させたときにbotに対するリプライがあったとき、またはTL上に反応できる言葉があったとき随時(cron稼働時)。 上記それぞれ単体だとうまくできていると思うのですが、両方組み合わせるやりかたが分かりません。 今は if(rand(0,4) == 0){ $response = $eb->postRandom("0-7.txt","7-14.txt","14-18.txt","18-24.txt"); } if(date("G") > 0 && date("G") < 8){ $response = $eb->postRandom("0-7.txt"); } elseif(date("G") > 7 && date("G") < 15){ $response = $eb->postRandom("7-14.txt"); } elseif(date("G") > 14 && date("G") < 19){ $response = $eb->postRandom("14-18.txt"); } else{ $response = $eb->postRandom("18-24.txt"); } このように指定してますが、5回に1回というのがうまく行ってないです。 複数のファイルを指定する方法を教えていただきたいです。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数3

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

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

> if(rand(0,4) == 0){  乱数は数値の出現確率を保証してくれるものではありません。  「だいたい5回に1回」で良いのなら構いませんが、「正確に5回に1回」という場合は他の手段をとる必要があります。  一般的なのは静的なカウンタを使って5回に1回をカウントする方法です。 > $response = $eb->postRandom("0-7.txt","7-14.txt","14-18.txt","18-24.txt");  独自の改造を加えていないのなら、postRandomの引数は単一ファイルなので、ファイル名を複数指定してもダメです。  これも静的なカウンタを使って、カウンタの値によってファイル名を順番に割り振った方が良いでしょう。

mito8ronron
質問者

お礼

ありがとうございます。 ほぼ5回に1回で大丈夫です。今5回に5回つぶやいてしまっている感じなので。。 静的なカウンタですか・・・勉強してみます!

関連するQ&A

  • phpでbotに3時間ごと、分にツイートさせた

    ド素人で申し訳ございません。 if(date("G") % 3 === 0 && date("i") == 11){ $response = $eb->postRandom("data.txt"); } phpで上の記述で、3時間ごと、11分にツイートさせたいのですが、 うまく動きません。 if(date("i") % 15 == 0){ $response = $eb->postRandom("data.txt"); } ネットで拾った15分ごとのこの記述はキチンと動きます。 どこか間違っているでしょうか?

  • botがいつの間にか止まっていた

    EasyBotterを使っています GAE-Cronを使っています botが2014年01月15日3:23を最後に知らない間に止まっていたようです それまでは正常に動いており、1月はbotのスクリプトを一切いじっておりません 手動で叩くと 2分以内に受け取った未返答のリプライはないようです。 Twitterへの投稿に成功しました。 @に投稿したメッセージ: http://t***** と出ます。 GAEも「code: 200 」と出て、調べたら正常に動いてるようです どこを直せばいいのでしょうか? botもう全然触ってなくてbotのためにPHPも勉強したのでいろいろ忘れてしまっているので初心者向けに教えていただけるとありがたいです よろしくおねがいします

    • ベストアンサー
    • PHP
  • Easybotterのエラーについて教えてください

    Easybotterを使用してbotを作っているのですが、更新も何もしていないのに今日の午前中から急にリプライができなくなってしまいました。(今まではできていました) botは3体いるのですが、2つは正常に稼動していて、一つだけがエラーになります bot.phpを叩くと Warning: Invalid argument supplied for foreach() in /home/users/0/xxxxxxxx/web/xxxxx/EasyBotter.php on line 414 3分以内に受け取った未返答のリプライはないようです。 Warning: Invalid argument supplied for foreach() in /home/users/0/xxxxxxxx/web/xxxxx/EasyBotter.php on line 414 3分以内のタイムラインに未反応のキーワードはないみたいです。 こういうエラーが出ます reply_pattern.php、もしくはEasybotter.phpの記述が悪いのかと思って両方デフォルトのものに差し替えてみましたが変化ありません。Easybotterのバージョンは最新にしてあります。 原因がわかる方是非ご教授ください。

    • ベストアンサー
    • PHP
  • 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; //デフォルトのファイル名を保管 は指定の場所にコピペ済みです。

  • EasyBotterの改造◆特定のフォロワーへ返信しない動作を簡潔にす

    EasyBotterの改造◆特定のフォロワーへ返信しない動作を簡潔にする方法。 →→Pha様のEasyBotterを使用させていただき、bot運営をしております。現在順調に動いております。改造の質問になります。本家サイトの掲示板にてヒントはいただき調べてはいるのですが、こちらでもう少しヒントをいただきたく質問させていただきます。 「特定のフォロワーからのリプライに対し、返信をしない」の動作に関してなのですが、 この動作自体は非公式wikiの"特定の人を除外"で出来る事は分かっているのですが、 これをいちいちEasyBotter.phpをいじらず簡潔に、都度変更出来るようにしたいと思っております。 改造方法としては… ■1 上記"特定の人を除外"のソース↓ ------- $bottername = array("abcd","efgh"); if($this->_screen_name == $replyName || in_array($replyName, $bottername)){ ------- ↑の$bottername部分を、外部ファイル(txt…?)で別途用意し、読み込ませるようにする。 ■2 外部ファイルのtxtの中身を書き換えられるフォームを作る。 と、考えてしまっているのですが、改造の手段として根本的に違っていますでしょうか… フォームに入力した内容をテキストに書き出す、というphpのソースは 色々検索していたら出てきたのですが、そもそも外部で呼び出すファイルがテキストで良いのか テキストファイルで良い場合は、どのように記述するのかもあやふやで…。 ------- $bottername = "notreplyid.txt"; if($this->_screen_name == $replyName || in_array($replyName, $bottername)){ ------- に書き換えて、notreplyid.txtにリプライしないフォロワーのIDを書けば 出来るなんて簡単な話ではないですよね…。 そふぃ様のPHP入門のページを読んではいるのですが まだ1つずつ理解をしているので時間がかかってしまっています。 まだまだ勉強しはじめたばかりで不相応な事をしているのは承知しておりますが、 行き詰ってしまったために、何かきっかけをいただきたく質問させていただきました。 ちょっとしたことでも結構ですので、何かヒント(特にPHPのここを勉強すると理解できる、 このソースを改造すれば出来るかも、お叱りの言葉等々…)いただけないでしょうか。 何卒、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • Access 日付範囲の条件指定

    いつも質問ばかりですいません。 指定の日付範囲外の値に対してメッセージを出して再入力させたいのですが上手くいきません。 《条件》 今日より先は NG 今日より2日以上前は NG 1日前:OK 今日:OK Dim txt01 As Date ' Dim txt02 As String ' Dim txt03 As Integer Dim ckDate As Date ckDate = Date - 2 '日付のチェック If IsNull(Me.txt01) Then 'Nullチェック MsgBox "txt01=Null" Me.txt01.SetFocus Exit Sub ElseIf IsDate(Me.txt01) <> True Then MsgBox "日付形式ではありません。" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value < Date Then '前チェック Debug.Print Me.txt01.Value MsgBox "今日より先" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value <= ckDate Then MsgBox "2日以上前!" Me.txt01.SetFocus Exit Sub End If 2番目の、Elseifからの日付範囲の条件設定が上手くいきません。 Me.txt01.valueの後ろを"<"を">"にしたり、"="を付けたりしましたが、希望通りになりません。 多分、もっとスマートな書き方が有るとは思うのですが、あとあとメンテナンスしやすい書き方をお教え頂けたら幸いです。

  • TwitterのBotをEasyBotter2.0+@Pagesの無料

    TwitterのBotをEasyBotter2.0+@Pagesの無料サーバで運用しています。 そこでPHPプログラムの書き換えに関して質問です。 自動フォロー返し~こちらからのフォロー時にリプライを飛ばすのを 下記のようにやっています。 //■■フォローした時にリプライを送る■■ foreach($followList as $rscreen_name){ $value = array( "status"=>"@{$rscreen_name} A", "status"=>"@{$rscreen_name} B", "status"=>"@{$rscreen_name} C", "status"=>"@{$rscreen_name} D", ); $response = $this->setUpdate($value); $result = $this->showResult($response); $results[] = $result; } 3行目~6行目のA,B,C,D4種類のリプライをランダムに 出力したいのですが、上記だとDしか出力しません。 PHPの基礎知識がなく、けっこう調べたのですが 分かりません・・・ どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エラーが出るのですが…

    実行結果 只今 14時 42 分 58 秒です。 おはよう 内容 0以上6未満 寝てるよ 6以上9未満 おはよう 9以上17未満 ちぃーす!! 17以上23未満 こんばんは 23以上   寝ます 上の実行結果のように出したいのですが エラーが出てしまいます。なぜでしょうか? <?php $g = date("g"); if( 0 <= $g && $g < 6) { echo "寝てるよ"; } elseif(6 <= $g && $g < 9) { echo "おはよう"; } elseif(9 <= $g && $g < 17) { echo "ちぃーす!!"; } elseif(17 <= $g && $g < 23) { echo "こんばんわ"; } else(23 <= $g) { echo"寝ます"; } ?>

    • 締切済み
    • PHP
  • Twitter BOTのアイコン変更について

    Twitter BOTのアイコン変更について http://twbot.blogspot.com/2010/03/easybotter2pearhttpoauth.html?spref=tw 上記のサイトを参考に、Twitter BOTのアイコン変更をしたいと思っています。 同じく、上記サイトからDLできるソースをそのまま設置しbot.phpを実行したのですが 以下のエラーが表示され、アイコン変更は出来ませんでした。 エラー内容 Fatal error: Call to undefined method HTTP_OAuth_Consumer::sendRequest2() in /home/***/public_html/***/bot.php on line 11 line 11 のソース $response = $eb->consumer->sendRequest2('http://twitter.com/account/update_profile_image.xml', null, "POST", array('image' => 'fc.jpg','mime' => 'image/jpeg')); OAuthの関係かと思ったのですが、通常の動作(post)は出来、困惑しております。 どなたが御知恵を拝借頂けますと助かります。 宜しくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう