忍者ブログ
2024.06│ 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
とりあえずtwitter botからPHPの世界に突入したいです。
2024年06月30日 (Sun)
×

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

2009年05月12日 (Tue)

さて、前回とその前で、「ランダムな言葉をPOST」と、「時報をPOST」の方法を会得しました。
次はその2つを組み合わせてみます。

つまり「時報を含むランダムな言葉をPOST。」

2件のソースを見た目上ほぼ同じ使い方をすると、こうなります。
 

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";

$mes[0] = "おはよう。もうG時ですよ。";
$mes[1] = "こんにちは。今はG時です。";
$mes[2] = "G時になった。いただきます。";
$mes[3] = "こんばんは。G時をまわってます。";
$mes[4] = "G時なので、もうおやすみなさい。";

$message = date($mes[rand(0, 4)]);

$params = "status=". rawurlencode($message);

$result = file_get_contents($url.$params , false, stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization: Basic ".base64_encode($username. ":". $password)
 )
)));
?>


「$mes[0~4]」に文字列を入れるのはOKかと思われます。
で、このあとなんですが、そのまま「$message」に入れるのではなく、dete関数を使って返却された文字列を入れます。
こうすることによって、文字列のGの部分には時刻が入るというわけです。

http://twitter.com/rishitest/status/1773178421

さてここでひとつ補足ですが、date関数を使うと、date関数で置き換えられる文字はすべて日付や時間に置き換えられてしまいます。
例えば、以下のプログラム。

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";

$mes[0] = "おはよう。もうG時ですよ。MySweetHoney。";
$mes[1] = "こんにちは。今はG時です。MySweetHoney。";
$mes[2] = "G時になった。いただきます。MySweetHoney。";
$mes[3] = "こんばんは。G時をまわってます。MySweetHoney。";
$mes[4] = "G時なので、もうおやすみなさい。MySweetHoney。";

$message = date($mes[rand(0, 4)]);

$params = "status=". rawurlencode($message);

$result = file_get_contents($url.$params , false, stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization: Basic ".base64_encode($username. ":". $password)
 )
)));
?>


いちいち、MySweetHoneyって言わないと気がすまないとします。
しかしこれを実行すると、

http://twitter.com/rishitest/status/1773334100

文字が置き換えられまくって、悲惨な結果に…。
そうならないようにしたのが下のソースです。

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";

$hour = date("G");

$mes[0] = "おはよう。もう".$hour."時ですよ。MySweetHoney。";
$mes[1] = "こんにちは。今は".$hour."時です。MySweetHoney。";
$mes[2] = $hour."時になった。いただきます。MySweetHoney。";
$mes[3] = "こんばんは。".$hour."時をまわってます。MySweetHoney。";
$mes[4] = $hour."時なので、もうおやすみなさい。MySweetHoney。";


$message = $mes[rand(0, 4)];

$params = "status=". rawurlencode($message);

$result = file_get_contents($url.$params , false, stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization: Basic ".base64_encode($username. ":". $password)
 )
)));
?>


これはまず最初に変数「$hour」に時刻を入れてしまってから、それを文字列連結させたものをそのまま「$message」に入れるという手順です。
「$mes[0~4]」をdate関数に入れることはないので、「MySweetHoney」はちゃんとそのまま出力されます。

http://twitter.com/rishitest/status/1773359071

めでたし。
こんなかんじで、いろんな書き方ができます。
PR
2009年05月12日 (Tue)
次なるカスタマイズは、既存のtwitter botの仕様として割と良く見かける、時報的なやつです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";

$message = date("今はG時です。");

$params = "status=". rawurlencode($message);

$result = file_get_contents($url.$params , false,
stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization:
Basic ".base64_encode($username. ":". $password)
 )
)));
?>


これで、「今は10時です。」「今は18時です。」などと、いまの時刻をPOSTしてくれるプログラムになりました。

http://twitter.com/rishitest/status/1773024339

date関数は、文字列の中でGがあったらそこに時刻の時間部分を当てはめて、文字列ごと返却してくれる関数です。便利です。
ちなみにGだと「先頭に 0 をつけない24時間単位 (0 ~ 23) の時間」ですが、同じように分とか、日付とかも設定することができます。
date関数については、こちらを参考にさせていただきました。

たとえばこれを1時間ごとに実行するようにすると、時報なbotちゃんの出来上がりです。
2009年05月12日 (Tue)
さて前回まででとりあえず、PHPからtwitterにPOSTするということが可能になりました。

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";
$params = "status=". rawurlencode("テストです。");

$result = file_get_contents($url.$params , false, stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization: Basic ".base64_encode($username. ":". $password)
 )
)));
?>


ソースはこんなかんじ。引き続き引用させていただいています。→参照元

これを定期的に作動させればbotになるというわけです。
しかし、これだと、「テストです。」しか発言しないbotになってしまいます。
それはあんまりなのでメッセージ内容を何種類かの言葉からランダムに選んでPOSTするというふうに変えたいと思います。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "rishitest";
$password = "password(ダミー)";

$mes[0] = "おはよう。";
$mes[1] = "こんにちは。";
$mes[2] = "いただきます。";
$mes[3] = "こんばんは。";
$mes[4] = "おやすみなさい。";


$message = $mes[rand(0, 4)];

$params = "status=". rawurlencode($message);

$result = file_get_contents($url.$params ,
false, stream_context_create(array(
 "http" => array( "method" => "POST", "header" => "Authorization:
Basic ".base64_encode($username. ":". $password)
 )
)));
?>


ソースの変更点は、14行目において、メッセージを直接入れるのではなく、変数「$message」にしているところです。
そして、その上の追加した行で「$message」の中身を決定しています。

6行目~10行目で、$mes[0~4]にそれぞれ異なる文字列をいれておきます。
12行目で、「rand(0. 4)」とありますが、これは、0~4までのどれかの数値をランダムで返却する関数です。
従って、この場合実際には、
「$message = $mes[0];」や、「$message = $mes[3];」などという処理を行うということになり、つまりは「$message」に"おはよう。"や"こんばんは。"という文字列が入ります。

これを14行目でセットすることにより、"おはよう。"~"おやすみなさい。"の中からひとつをランダムにチョイスしてtwitterにPOSTを行うプログラムになりました。

http://twitter.com/rishitest/status/1772884964
1 2 3  →Next
カレンダー
05 2024/06 07
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
プロフィール
HN:
リシ
性別:
非公開
自己紹介:
環境はWindowsXP HOME SP3です。
最新コメント
[12/23 luisapape]
[12/23 margerieah]
最新トラックバック
フリーエリア
バーコード
ブログ内検索
アーカイブ
P R
アクセス解析