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

[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
2009年05月01日 (Fri)

そもそも今までなじみのなかったweb系プログラムを書いてみたいと思ったのが、最近始めたツイッターのおかげです。
twitterは公式が提供しているAPIを使って自動投稿などが簡単にできるんですよね。
それを利用して、twitterにはbotが多数存在しています。
botの作り方を紹介して下さっているサイトやブログが多数あり、そのおかげで、プログラム知識のない人でも、ソースをそのままもらってきてちょこっと書き換えるだけで気軽にbotが作れるんですね。
なんとも楽しい時代ですよね。

また、twitterは公式が英語なので、英語に弱いとAPIを使ってみること自体が大変です。
自分でtwitterAPIを利用したソースを書く場合も、公開されているソース自体が非常に参考になってとてもありがたいです。

そんなわけで、私も、ソースをお借りして、twitter botを作ってみたいなーと思います。

2009年05月01日 (Fri)
これから始めるのは、PHPを勉強していこうという不定期ブログです。

PHPは環境すら整えたことがないという超初心者、けどもC、C++、Java、SQLなどの知識はちょぴっとあるという状態からスタートです。

一般的なPHP入門ではないです。
具体的には、これを作りたいけどどうしたら…?と思ったものを、ネット上に公開されているオープンソースを使わせていただいて理解、応用していけたらなあというかんじです。

よろしくお願いします。
Prev1 2 3 
カレンダー
06 2024/07 08
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 31
プロフィール
HN:
リシ
性別:
非公開
自己紹介:
環境はWindowsXP HOME SP3です。
最新コメント
[12/23 luisapape]
[12/23 margerieah]
最新トラックバック
フリーエリア
バーコード
ブログ内検索
アーカイブ
P R
アクセス解析