少しばかり書いてみようかと。
後程、もう少し自分に余裕ができたら、「つれづれ」の方にも加筆転載しますかね。今日はあくまで身内向け。
なお、身内向けだから言うまでもないとは信じてるんだけど、使ってるのはEasybotterさんです。
さて、ランダムなタイミングで投稿するとか、100%じゃなくてもっと低い確率で返事したり、TL上の単語に反応させたりするには、スクリプトではif構文と乱数生成のrandを使っているようです。
木菟は大それた改造するほど知識がありませんので、このrandについて調べてみました。
if(rand(0,20) === 0){
$response = $eb->postRandom("data.txt");
}
これは1/21の確率でdata.txtから投稿を行うものです。この「rand(0,20) === 0」が意味するものは何でしょうか。
rand(A,B)とは、A以上B以下の数字から重複を許してランダムに数字を吐き出すコマンドです。重複を許さないと、数字が一周するまで同じ数字は出てきません。ものすごーく大雑把な説明だけど!プロが見たら突っ込んでくるかもだけど!!(爆)
if構文は、「if(【条件】){【条件にあてはまったら実行する事柄】;}」という構文。この場合、0以上20以下の数字からランダムに1個の数字を取り出して、それが0だった場合はdata.txtの中からランダムで1つ投稿する。という意味です。0以上20以下の数字からランダムに1個取り出して、それが0である確率は1/21なので、1/21の確率で投稿する、と言えるわけです。
イコール記号が3つ並んでますね。イコール記号は2つか3つ並べておかないと、「=」の意味を成してくれません。本当は2つの場合と3つの場合にも厳密な意味の差はあるのですが、元々曖昧さを生み出す事を目的に確率を付けようとしているので、今回はその意味に関しては割愛します。
さて、何故最低2つは必要なのかというと、不等号の意味を出す時にもイコール記号が必要だからです。≦や≧は全角では存在しますが、半角には存在しません。そして、今扱っているのはphpプログラムである以上、半角で書くのが基本です。<や>にイコール記号を付け足す事で≦や≧の意味を持たせているのです。
なお、主な等号不等号の書き方はこんな感じです。
=== (とても厳密に)等しい
== 等しい
>= ≦
<= ≧
< そのまま
> そのまま
以上の事を踏まえると、単純な「何分の一」という確率だけでなく、例えば「2/3の確率でTLに反応」という構文が作れたりします。
こんな感じ。
if(rand(0,2) > 0){
$response = $eb->replyTimeline(3,"reply_pattern.php");
}
これは0以上2以下の数字の中からランダムで数字を取り出して、それが0より大きければ3分前までのTLに反応する構文です。
蛇足ですが、このスクリプトを使っているbotは5分ごとにcronで叩いていますので、理論的には3/5×2/3=2/5くらいの確率で反応してる…筈?(笑) リプライに対してはきちんと5分前のものまで100%対応するよう設定してます。ランダムリプライはしてないけど。
最後におまけで、実際に運用しているbotのうち2つに使っているbot.phpをテキストファイル化したものはこちら。UTF-8ですので、文字化けしている場合はエンコードをいじって下さい。
後程、もう少し自分に余裕ができたら、「つれづれ」の方にも加筆転載しますかね。今日はあくまで身内向け。
なお、身内向けだから言うまでもないとは信じてるんだけど、使ってるのはEasybotterさんです。
さて、ランダムなタイミングで投稿するとか、100%じゃなくてもっと低い確率で返事したり、TL上の単語に反応させたりするには、スクリプトではif構文と乱数生成のrandを使っているようです。
木菟は大それた改造するほど知識がありませんので、このrandについて調べてみました。
if(rand(0,20) === 0){
$response = $eb->postRandom("data.txt");
}
これは1/21の確率でdata.txtから投稿を行うものです。この「rand(0,20) === 0」が意味するものは何でしょうか。
rand(A,B)とは、A以上B以下の数字から重複を許してランダムに数字を吐き出すコマンドです。重複を許さないと、数字が一周するまで同じ数字は出てきません。ものすごーく大雑把な説明だけど!プロが見たら突っ込んでくるかもだけど!!(爆)
if構文は、「if(【条件】){【条件にあてはまったら実行する事柄】;}」という構文。この場合、0以上20以下の数字からランダムに1個の数字を取り出して、それが0だった場合はdata.txtの中からランダムで1つ投稿する。という意味です。0以上20以下の数字からランダムに1個取り出して、それが0である確率は1/21なので、1/21の確率で投稿する、と言えるわけです。
イコール記号が3つ並んでますね。イコール記号は2つか3つ並べておかないと、「=」の意味を成してくれません。本当は2つの場合と3つの場合にも厳密な意味の差はあるのですが、元々曖昧さを生み出す事を目的に確率を付けようとしているので、今回はその意味に関しては割愛します。
さて、何故最低2つは必要なのかというと、不等号の意味を出す時にもイコール記号が必要だからです。≦や≧は全角では存在しますが、半角には存在しません。そして、今扱っているのはphpプログラムである以上、半角で書くのが基本です。<や>にイコール記号を付け足す事で≦や≧の意味を持たせているのです。
なお、主な等号不等号の書き方はこんな感じです。
=== (とても厳密に)等しい
== 等しい
>= ≦
<= ≧
< そのまま
> そのまま
以上の事を踏まえると、単純な「何分の一」という確率だけでなく、例えば「2/3の確率でTLに反応」という構文が作れたりします。
こんな感じ。
if(rand(0,2) > 0){
$response = $eb->replyTimeline(3,"reply_pattern.php");
}
これは0以上2以下の数字の中からランダムで数字を取り出して、それが0より大きければ3分前までのTLに反応する構文です。
蛇足ですが、このスクリプトを使っているbotは5分ごとにcronで叩いていますので、理論的には3/5×2/3=2/5くらいの確率で反応してる…筈?(笑) リプライに対してはきちんと5分前のものまで100%対応するよう設定してます。ランダムリプライはしてないけど。
最後におまけで、実際に運用しているbotのうち2つに使っているbot.phpをテキストファイル化したものはこちら。UTF-8ですので、文字化けしている場合はエンコードをいじって下さい。
PR
トラックバック
トラックバックURL: