忍者ブログ
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月28日 (Fri)
×

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

2009年05月01日 (Fri)

以下の記事を参考にさせていただき、twitter botのプログラムを勉強したいと思います。


http://d.hatena.ne.jp/tek_koc/20080804/1217822667

[PHPによる誰でも出来る簡単Twitterbotの作り方]

http://d.hatena.ne.jp/hirataka522/20080126/1201300282

[PHPでTwitterに投稿]
 



ソースを見ていきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = your username;
$password = your password;
$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)
 )
)));
?>

 1行目、「<?php」からスタートしています。ここから13行目の「?>」まで、これがhtml上に埋め込まれて1連のPHPプログラムとして動作することになります。

2行目「$url = "http://twitter.com/statuses/update.xml?";」
ここから「$○○○=×××;」という文が続きますが、これは$○○○という変数に×××という中身をセットするということです。
$urlという変数に「http://twitter.com/statuses/update.xml?」を入れたら何が起こるかというと、「http://twitter.com/statuses/update.xml?」という文字列を使いたいときには今度から「$url」とだけ書けば良いということになります。
このアドレスの意味はこの時点では不明なので、後ほど。
※変数のシステムはどのプログラム言語でも基本のことですが、PHPは型を定義しなくても、代入した値に応じて勝手に変数の型を決定してくれるみたいです。

3行目4行目も2行目と同じく変数にセットを行っています。
サンプルソースの「your username」、「your password」はそれぞれtwitterの自分のユーザIDとパスワードに置き換えます。
ここで気をつけるのは、それぞれの文字列はさきほどのurlと同じようにダブルクォートで囲む必要があるということです。
これで、「$username」、「$password」にそれぞれユーザIDとパスワードがセットされました。

5行目。「$params = "status=". rawurlencode(message);」です。
サンプルソースの「message」はtwitterに送信するメッセージに置き換えます。
ドットは前後の文字列を連結してくれます。
つまり"status="と「rawurlencode(message)」を連結した文字列を$paramsにセットするということですが、rawurlencode~はダブルクォートで囲まれていませんのでそのまま文字列ではありません。関数です。

関数は、ここでは、「カッコ内(この場合だとmessage)の文字列を使ってなんか変換した値に置き換わる」というイメージでみていくとわかりやすいと思います。(関数の厳密な定義とは異なるので、あくまでイメージです)
rawurlencodeという関数はもともとPHPにあるもので、これはカッコ内の文字列をRFC1738 に基づきURL エンコードした値に置き換えます。
※何故エンコードを行うかというと、ソースの引用元にもあるように、「メッセージにスペース(空白)があると、そこで切れてしまうから」です。どうしてかはとりあえず考える必要はなくて、そういうものだと思っておきます。
蛇足を書けば、空白がなければエンコードしなくていいってことです。つまり自分は絶対空白をメッセージにいれないという場合はrawurlencodeしなくて良いのです。
しかし、エンコードしておけばどっちにも対応できるのでここではエンコードします。

そんなわけで、最終的に$paramsには、
「status=[メッセージをRFC1738 に基づきURL エンコードした文字列]」がセットされました。

次は7行目~12行目ですが、これらはまとめて1文のプログラムです。
いまさらですがプログラムの1文の終わりはセミコロンが示しています。そんなわけでちょっと長めのこの文を見ていきます。

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

まずはじめに「$result =」とあるので、これも変数$resultに、なにか値をセットしているんだなーということがわかります。
次にfile_get_contentsとありますがこれは関数です。カッコ内に引数としてファイル名、インクルードファイルの検索の有無、コンテキストリソースをコンマで区切ってセットすると、指定したファイルを指定した形式で呼び出して、ファイルの内容を文字列に読み込むという関数です。
ここでは、
ファイル名=「$url.$params」、
インクルードファイル検索=「false」、
コンテキストリソース=「stream_context_create(array("http" => array( "method" => "POST", "header" => "Authorization: Basic ". base64_encode($username. ":".$password))))
となります。
つまりこれらの情報をもとにデータを呼び出し、$resultにセットされるということになります。

ファイル名「$url.$params」は先ほど設定した$urlと$paramsを連結したものなので、具体的には「http://twitter.com/statuses/update.xml?status=[messageをRFC1738 に基づきURL エンコードした文字列]」ですね。
インクルードファイルについてはここでは気にしなくていいです。falseなので検索しません。

コンテキストリソースを見ていきます。

stream_context_create(array( "http" => array( "method" => "POST""header" => "Authorization: Basic ". base64_encode($username. ":". $password))))

stream_context_createは関数です。これはストリームコンテキストを作成する関数だそうです。まんまです。
正直ぱっとみてこれを理解するのはむずかしいんですが、コンテキストとはこの場合、プログラムに与える条件のことで、その条件でプログラムを実行しろという命令をします。

この場合、「"http" => array()」はHTTPコンテキストを~の条件で実行するということで、その内訳が
メソッドはPOST」、「"Authorization: Basic ". base64_encode($username. ":".$password)というヘッダを付加する」となります。
base64_encodeはbase64形式にエンコードする関数なので、その結果をドットで連結して、headerは「Authorization: Basic["ユーザID:パスワード"をbase64形式にエンコードした文字列]」になります。
※methodとかheaderはHTTPコンテキストを実行するためにもともと持つ設定値で、他にもいろいろあるんですが今回はmethodとheaderだけ設定しています。
※arrayは配列を示す構文で、arrayのカッコ内のコンマで区切った複数の値を、ひとつのまとまりとして扱っています。

最終的に7~12行目は、
「http://twitter.com/statuses/update.xml?status=[messageをRFC1738 に基づきURL エンコードした文字列]」で指定されるファイルを、メソッドはPOSTで、「Authorization: Basic["ユーザID:パスワード"をbase64形式にエンコードした文字列]」をヘッダに付加して実行する。
ということになります。

なんだかこんがらがりそうですが、とりあえずこれが一通りのソースの流れです。
 

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
didn figure leading
began link investigate gps shut indicates
margerieah URL 2009/12/23(Wed)04:41:22 編集
variation middle new acidification
gps australia shut allowed
luisapape URL 2009/12/23(Wed)04:42:48 編集
この記事へのトラックバック
この記事にトラックバックする:
←No.8No.7No.6No.5No.4No.3No.2No.1
カレンダー
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
アクセス解析