忍者ブログ

bot制作まとめ

twitterのbot基本動作まとめ

[1]  [5]  [4]  [3]  [2

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2-2.TL発言とリプライ発言の時間間隔をずらしたい

cronでのプログラム実行時間設定というのは一つしか出来ません。
なのでこのままではTL実行時間とリプライ実行時間が一緒なbotしか出来ません。
今回はTL実行を10分間隔、リプライ反応を2分間隔で行いたいと仮定して作ってみようと思うのでcronの設定を10分に設定してみたとします。
すると、先程の2-1で述べた最後のリプライ用プログラム

*@付きリプライの部分
if(date("i") % 2 === 0){
$response = $eb->reply(2,"not.txt","reply_pattern2.php");
}

*TL上で反応する部分
if(date("i") % 2 === 0){
$response = $eb->replyTimeline(2,"reply_pattern.php");
}

上記を用いている場合、2分間隔でリプライは実行されません。
あくまでもbotのプログラムはcronが動く時しか実行してもらえないので2分毎にリプライ反応の単語を取得したとしてもプログラム自体は動かないのです。よって10分毎の発言しか行えません。
そこでcronの実行間隔を2分にしたらリプライもしてもらえるの?という事になりますが、なります。……が、このままではTL発言も2分間隔で行われてしまします。それだと今回は困る、ので。
TL実行プログラム(今回はランダムにpostする方を使用)が最初の設定では

 $response = $eb->postRandom("data.txt");

と、なっていますがリプライ反応用プログラムのように

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

と書き加えてみたらcronの設定を2分毎にしても10分間隔でTL発言が行われ万事オッケーです。20分間隔でTL発言したいときは「date("i") % 10 === 0」を「date("i") % 20 === 0」に。30分間隔でしたい時は「date("i") % 30 === 0」に。
あ、cron設定はリプライ反応かTL発言のどちらかの実行間隔が狭い方に合わせて設定してやって下さいましね。

何でそうなるの??て人向けに以下はプログラムの解説。
まず今回はプログラム文法の一つとしてif文を用いてます。
ifと言えば、中学校とかの英語でもおなじみ「もし~ならば…」みたいなやつですね。
んで、プログラミングで使われるif文の基本構成は

if( 条件 ){
 条件が満たされたときに実行される部分
}

これをもう少し発展させて条件によって実行するものを変えたいときは

if(条件A){
 条件Aが満たされたときに実行される部分
}
else if(条件B){
 条件Bが満たされたときに実行される部分
}

と、なり、else ifは何個作ってもオッケーなので

if(条件A){
 条件Aが満たされたときに実行される部分
}
else if(条件B){
 条件Bが満たされたときに実行される部分
}
else if(条件C){
 条件Cが満たされたときに実行される部分
}
else if(条件D){
 条件Dが満たされたときに実行される部分
}

とかいうのもアリ。
簡単な例としては(プログラミング一切無視しての日本語で例えてみると)

if(魚が食べたい){
 焼き魚定食にする
}
else if(お肉が食べたい){
 焼肉定食にする
}
else if(洋食が食べたい){
 パスタを食べる
}
else if(お腹が空いてない){
 ご飯は食べない
}

とかいうプログラムだった場合(凄くデタラメですが)、もしその日の気分が「洋食が食べたい」という条件と一致した場合「パスタを食べる」を実行します。他の部分は条件が満たされないので一切実行されません。

まぁ今回は一番簡単な

if( 条件 ){
 条件が満たされたときに実行される部分
}

↑これのみを扱います。
そしてTL発言用プログラムの場合の条件は

date("i") % 10 === 0

と、なってますね。次はその条件の意味の説明。
先ず「data("i")」というのは時間の「○○時△△分」の「△△」を受け取る(表す)関数です。数学で「y=5x+3」とかいう「x」や「y」の部分。
次に「%」はプログラミングにおいて用いられる演算子(数学での+や÷といった種類)の一つで除算の余りを求める演算子です。
よって「date("i") % 10 」というのは「date("i") 」を10で割った時の余りを求める計算式になってたりします。
これを「===0」で結ぶ事により「date("i")を10で割った時の余りが0だったらTL発言用プログラムを実行する 」という条件が完成します。
例えば、cronで実行された時の時間が9時52分だったとき、「date("i") 」は「52」なので「52÷10=5…2」という計算なので求まる余りは「2」。条件は満たされないのでTL発言のプログラムは実行されません。
以上から考えると10で割ったときに余りが0になる条件が満たされるのは 0分、10分、20分、30分、40分、50分 の時。
だから結果的に10分間隔でTL発言プログラムを実行して貰えるわけです(`・ω・´)シャキーン!
応用して「date("i") % 20 」にすれば 0分、20分、40分 の時に条件が満たされるので20分間隔でプログラムを実行してもらえます。

そんな感じで今回の説明終わり。
PR

この記事にコメントする

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字

無題

大変参考になりました。
TL発言とリプライの時間をどうずらせばいいのかずっと悩んでいたので、とても助かりました。
しかし、この場合、例えば夜のうちは別の発言(例:data_night.txt)に切り替えたい場合、分岐はどのように書けばいいのでしょうか…。
最近始めた素人なので良く分かりません。
もしよろしければご助言ください。
  • 砂糖
  • 2011/11/25(Fri)23:02:37
  • 編集

この記事へのトラックバック

この記事にトラックバックする:

はじめに HOME 2-1.@付きリプライで反応させたい言葉とTL上で反応させたい言葉を区別したい

カレンダー

08 2025/09 10
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリー

フリーエリア

最新CM

[11/25 砂糖]

最新TB

プロフィール

HN:
うずら
性別:
非公開

バーコード

ブログ内検索

P R

忍者ブログ [PR]
Template by repe