<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>PHPとかをゆるりとべんきょうする</title>
  <link>http://kuroutan.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://kuroutan.blog.shinobi.jp/RSS/" />
  <description>とりあえずtwitter botからPHPの世界に突入したいです。</description>
  <lastBuildDate>Tue, 12 May 2009 13:27:09 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>twitter botをカスタマイズしてみる(3)</title>
    <description>
    <![CDATA[<p>さて、前回とその前で、「ランダムな言葉をPOST」と、「時報をPOST」の方法を会得しました。<br />
次はその2つを組み合わせてみます。<br />
<br />
つまり「時報を含むランダムな言葉をPOST。」<br />
<br />
2件のソースを見た目上ほぼ同じ使い方をすると、こうなります。<br />
&nbsp;</p>
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td>
            <p>&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            <br />
            <font color="#ff0000">$mes[0] = &quot;おはよう。もうG時ですよ。&quot;;<br />
            $mes[1] = &quot;こんにちは。今はG時です。&quot;;<br />
            $mes[2] = &quot;G時になった。いただきます。&quot;;<br />
            $mes[3] = &quot;こんばんは。G時をまわってます。&quot;;<br />
            $mes[4] = &quot;G時なので、もうおやすみなさい。&quot;;</font></p>
            <p>$message = <font color="#ff0000">date($mes[rand(0, 4)])</font>;</p>
            <p>$params = &quot;status=&quot;. rawurlencode($message);</p>
            <p>$result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
「$mes[0～4]」に文字列を入れるのはOKかと思われます。<br />
で、このあとなんですが、そのまま「$message」に入れるのではなく、dete関数を使って返却された文字列を入れます。<br />
こうすることによって、文字列のGの部分には時刻が入るというわけです。<br />
<br />
<a href="http://twitter.com/rishitest/status/1773178421">http://twitter.com/rishitest/status/1773178421</a><br />
<br />
さてここでひとつ補足ですが、date関数を使うと、date関数で置き換えられる文字はすべて日付や時間に置き換えられてしまいます。<br />
例えば、以下のプログラム。<br />
<br />
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td>
            <p>&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            <br />
            <font color="#ff0000">$mes[0] = &quot;おはよう。もうG時ですよ。MySweetHoney。&quot;;<br />
            $mes[1] = &quot;こんにちは。今はG時です。MySweetHoney。&quot;;<br />
            $mes[2] = &quot;G時になった。いただきます。MySweetHoney。&quot;;<br />
            $mes[3] = &quot;こんばんは。G時をまわってます。MySweetHoney。&quot;;<br />
            $mes[4] = &quot;G時なので、もうおやすみなさい。MySweetHoney。&quot;;</font></p>
            <p>$message = <font color="#ff0000">date($mes[rand(0, 4)])</font>;</p>
            <p>$params = &quot;status=&quot;. rawurlencode($message);</p>
            <p>$result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
いちいち、MySweetHoneyって言わないと気がすまないとします。<br />
しかしこれを実行すると、<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1773334100">http://twitter.com/rishitest/status/1773334100</a><br />
<br />
文字が置き換えられまくって、悲惨な結果に&hellip;。<br />
そうならないようにしたのが下のソースです。<br />
<br />
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td>
            <p>&lt;?php<br />
            $url = &quot;<a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            <br />
            <font color="#ff0000">$hour = date(&quot;G&quot;);<br />
            <br />
            $mes[0] = &quot;おはよう。もう&quot;.$hour.&quot;時ですよ。MySweetHoney。&quot;;<br />
            $mes[1] = &quot;こんにちは。今は&quot;.$hour.&quot;時です。MySweetHoney。&quot;;<br />
            $mes[2] = $hour.&quot;時になった。いただきます。MySweetHoney。&quot;;<br />
            $mes[3] = &quot;こんばんは。&quot;.$hour.&quot;時をまわってます。MySweetHoney。&quot;;<br />
            $mes[4] = $hour.&quot;時なので、もうおやすみなさい。MySweetHoney。&quot;;</font><br />
            <br />
            $message = <font color="#ff0000">$mes[rand(0, 4)]</font>;<br />
            <br />
            $params = &quot;status=&quot;. rawurlencode($message);<br />
            <br />
            $result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
これはまず最初に変数「$hour」に時刻を入れてしまってから、それを文字列連結させたものをそのまま「$message」に入れるという手順です。<br />
「$mes[0～4]」をdate関数に入れることはないので、「MySweetHoney」はちゃんとそのまま出力されます。<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1773359071">http://twitter.com/rishitest/status/1773359071</a><br />
<br />
めでたし。<br />
こんなかんじで、いろんな書き方ができます。]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B-3-</link>
    <pubDate>Tue, 12 May 2009 13:27:09 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/9</guid>
  </item>
    <item>
    <title>twitter botをカスタマイズしてみる(2)</title>
    <description>
    <![CDATA[次なるカスタマイズは、既存のtwitter botの仕様として割と良く見かける、時報的なやつです。<br />
<br />
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td align="right">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16</td>
            <td>
            <p>&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            <br />
            <font color="#ff0000">$message = date(&quot;今はG時です。&quot;);</font><br />
            <br />
            $params = &quot;status=&quot;. rawurlencode(<font color="#ff0000">$message</font>);<br />
            <br />
            $result = file_get_contents($url.$params , false, <br />
            stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization:<br />
            Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
これで、「今は10時です。」「今は18時です。」などと、いまの時刻をPOSTしてくれるプログラムになりました。<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1773024339">http://twitter.com/rishitest/status/1773024339</a><br />
<br />
date関数は、文字列の中でGがあったらそこに時刻の時間部分を当てはめて、文字列ごと返却してくれる関数です。便利です。<br />
ちなみにGだと「先頭に 0 をつけない24時間単位 (0 ～ 23) の時間」ですが、同じように分とか、日付とかも設定することができます。<br />
date関数については、<a target="_blank" href="http://www.scollabo.com/banban/php/ref/ref_date.html">こちらを参考にさせていただきました。</a><br />
<br />
たとえばこれを1時間ごとに実行するようにすると、時報なbotちゃんの出来上がりです。]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B-2-</link>
    <pubDate>Tue, 12 May 2009 13:09:03 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/8</guid>
  </item>
    <item>
    <title>twitter botをカスタマイズしてみる(1)</title>
    <description>
    <![CDATA[さて前回まででとりあえず、PHPからtwitterにPOSTするということが可能になりました。<br />
<br />
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td>
            <p>&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            $params = &quot;status=&quot;. rawurlencode(&quot;テストです。&quot;);</p>
            <p>$result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
ソースはこんなかんじ。引き続き引用させていただいています。<a target="_blank" href="http://d.hatena.ne.jp/hirataka522/20080126/1201300282)">&rarr;参照元</a><br />
<br />
これを定期的に作動させればbotになるというわけです。<br />
しかし、これだと、「テストです。」しか発言しないbotになってしまいます。<br />
それはあんまりなのでメッセージ内容を何種類かの言葉からランダムに選んでPOSTするというふうに変えたいと思います。<br />
<br />
<br />
<table cellspacing="1" cellpadding="1" width="480" border="1">
    <tbody>
        <tr>
            <td align="right">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22</td>
            <td>
            <p>&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            <br />
            <font color="#ff0000">$mes[0] = &quot;おはよう。&quot;;<br />
            $mes[1] = &quot;こんにちは。&quot;;<br />
            $mes[2] = &quot;いただきます。&quot;;<br />
            $mes[3] = &quot;こんばんは。&quot;;<br />
            $mes[4] = &quot;おやすみなさい。&quot;;</font><br />
            <br />
            <font color="#ff0000">$message = $mes[rand(0, 4)];</font><br />
            <br />
            $params = &quot;status=&quot;. rawurlencode(<font color="#ff0000">$message</font>);<br />
            <br />
            $result = file_get_contents($url.$params , <br />
            false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: <br />
            Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
ソースの変更点は、14行目において、メッセージを直接入れるのではなく、変数「$message」にしているところです。<br />
そして、その上の追加した行で「$message」の中身を決定しています。<br />
<br />
6行目～10行目で、$mes[0～4]にそれぞれ異なる文字列をいれておきます。<br />
12行目で、「rand(0. 4)」とありますが、これは、0～4までのどれかの数値をランダムで返却する関数です。<br />
従って、この場合実際には、<br />
「$message = $mes[0];」や、「$message = $mes[3];」などという処理を行うということになり、つまりは「$message」に&quot;おはよう。&quot;や&quot;こんばんは。&quot;という文字列が入ります。<br />
<br />
これを14行目でセットすることにより、&quot;おはよう。&quot;～&quot;おやすみなさい。&quot;の中からひとつをランダムにチョイスしてtwitterにPOSTを行うプログラムになりました。<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1772884964">http://twitter.com/rishitest/status/1772884964</a>]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B-1-</link>
    <pubDate>Tue, 12 May 2009 12:51:23 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/7</guid>
  </item>
    <item>
    <title>twitter botをとりあえず作ってみる(3)</title>
    <description>
    <![CDATA[さて、投稿が成功したわけですが、「testtesttest」は半角英数のみでした。<br />
messageを日本語にして実行してみると&hellip;<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1772727434">http://twitter.com/rishitest/status/1772727434</a><br />
<br />
文字化け！！！！！！！！！！<br />
<br />
<br />
まあこれは予想していたことでした。<br />
「test.php」は文字コードをUTF-8にして保存します。<br />
これで日本語がでました。<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1772738592">http://twitter.com/rishitest/status/1772738592</a><br />
<br />
メモ帳でもUTF-8で保存できますが、わたしは<a target="_blank" href="http://sakura_editor.at.infoseek.co.jp/">サクラエディタ</a>を使っています。<br />
フリーでとても使い勝手がよいエディタです。<br />
<br />
そんなかんじで日本語の投稿も成功。<br />
とりあえずこれで、phpを実行&rarr;自動でtwitterにポストという動作ができるようになったということにしておきます。<br />
<br />
<br />
次からは少しずつカスタマイズしていきたいと思います。<br />]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-3-</link>
    <pubDate>Tue, 12 May 2009 12:20:23 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/6</guid>
  </item>
    <item>
    <title>twitter botをとりあえず作ってみる(2)</title>
    <description>
    <![CDATA[前回からの続きで、ApacheとPHPをインストールしました。<br />
インストール方法は以下のサイトを参考に。<br />
<br />
Apacheのインストール<a href="http://www.standpower.com/php_environment.html"><br />
http://www.standpower.com/php_environment.html</a><br />
<br />
PHPのインストール<br />
<a href="http://www.standpower.com/php_environment2.html">http://www.standpower.com/php_environment2.html</a><br />
<br />
PHPインストール後のApache再起動ですが、タスクバーのMonitor Apache ServersをExitして起動しなおすだけではだめなので注意。<br />
XPの場合はすべてのプログラムからControl Apache ServerのRestartを実行します。<br />
<br />
<br />
では動かしてみます！！<br />
<br />
<table cellspacing="1" cellpadding="1" width="530" border="1">
    <tbody>
        <tr>
            <td>
            <p>&lt;?php<br />
            $url = &quot;<a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>?&quot;;<br />
            $username = &quot;rishitest&quot;;<br />
            $password = &quot;password(ダミー)&quot;;<br />
            $params = &quot;status=&quot;. rawurlencode(&quot;testtesttest&quot;);</p>
            <p>$result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;, &quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
以上のプログラム(参照元は<a href="http://d.hatena.ne.jp/hirataka522/20080126/1201300282">http://d.hatena.ne.jp/hirataka522/20080126/1201300282</a>)を、テキストエディタに貼り付け、localhostのフォルダ内に「test.php」として保存。<br />
ブラウザから「<a href="http://localhost/test.php">http://localhost/test.php</a>」実行。<br />
<br />
<br />
twitterを開いてみると。<br />
<br />
<a target="_blank" href="http://twitter.com/rishitest/status/1772656331">http://twitter.com/rishitest/status/1772656331</a><br />
<br />
でたー！！！POST成功です。<br />
TLに「testtesttest」という投稿が表示されました。<br />
これでbot作成への第1歩を踏み出しました。<br />]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-2-</link>
    <pubDate>Tue, 12 May 2009 12:06:22 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/5</guid>
  </item>
    <item>
    <title>twitter botをとりあえず作ってみる(1.5)</title>
    <description>
    <![CDATA[<p>とりあえずwebサーバー上でphpを実行してみよう！<br />
ということで、前述のプログラムソースに「test.php」という名前をつけて保存し、自分が借りているレンタルサーバーにアップロードしてみました。</p>
<p>そして該当アドレスにアクセス。</p>
<p>画面は真っ白。</p>
<p><br />
twitterの方は&hellip;。</p>
<p>&nbsp;</p>
<p>何もでてない。</p>
<p>&nbsp;</p>
<p><br />
実行方法が間違っているのかな？と思い、</p>
<table cellspacing="1" cellpadding="1" width="200" border="0">
    <tbody>
        <tr>
            <td>
            <table cellspacing="1" cellpadding="1" width="200" border="1">
                <tbody>
                    <tr>
                        <td align="left">&lt;?php <br />
                        print(&quot;Hello World!&quot;); <br />
                        ?&gt;</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<p>を「hw.php」と名前をつけて保存して、同じようにアップロードしてみました。<br />
アップロードしたアドレスを参照すると、「Hello World!」という画面が表示されました。</p>
<p>&nbsp;</p>
<p>ってことはPHPの実行方法自体は間違っていないはず？？</p>
<p><br />
パーミッションとか文字コードとかいろいろ変えて試してみましたが、何回やってもtwitterにはPOSTされず&hellip;。<br />
ためしに、</p>
<table cellspacing="1" cellpadding="1" width="200" border="1">
    <tbody>
        <tr>
            <td align="left">&lt;?php<br />
            phpinfo();<br />
            ?&gt;</td>
        </tr>
    </tbody>
</table>
<p><br />
これを実行したりもしたが、何もでない&hellip;&hellip;。</p>
<p>&nbsp;</p>
<p>しばらくぐだぐだと悩んだ後、レンタルサーバーのHPでPHPの仕様を確認しました。<br />
すると、</p>
<p>「セーフモードにてご利用いただけます。Ver.4.4.1」</p>
<p>実行しようとしていたtwitterへのPOSTのPHPは5以降のバージョンに対応するものだったので、動くわけがありませんでした。<br />
さらに、もうひとつの4以降対応のソースの方も試してできなかったんですが、それはセーフモードのせいでした。<br />
セーフモードは関数の使用などに制限があり、その中にfopenなどが含まれているからです。</p>
<p>なんてこったい&hellip;。</p>
<p>普通はこれを最初に確認すべきです。<br />
そして確認しないときに限って、こうなります。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>対応するPHPが使えるサーバーを探してレンタルするのもなんなので、ローカルで実行してみることにしたいと思います。</p>
<p><br />
そんなわけでだいぶ遠回りしましたが、ローカルでの実行環境を整えるべく、次はApacheたんのインストールからはじめたいと思います。<br />
まあ、いずれは入れるつもりだったしね！<br />
&nbsp;</p>]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-1.5-</link>
    <pubDate>Tue, 12 May 2009 08:09:47 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/4</guid>
  </item>
    <item>
    <title>twitter botをとりあえず作ってみる(1)</title>
    <description>
    <![CDATA[<p>以下の記事を参考にさせていただき、twitter botのプログラムを勉強したいと思います。<br />
<a href="http://d.hatena.ne.jp/tek_koc/20080804/1217822667"><br />
<br />
http://d.hatena.ne.jp/tek_koc/20080804/1217822667</a><br />
[ＰＨＰによる誰でも出来る簡単Twitterbotの作り方]<a href="http://d.hatena.ne.jp/hirataka522/20080126/1201300282"><br />
<br />
http://d.hatena.ne.jp/hirataka522/20080126/1201300282</a><br />
[PHPでTwitterに投稿]<br />
&nbsp;</p>
<hr />
<p><br />
ソースを見ていきます。</p>
<table cellspacing="0" cellpadding="0" width="468" border="1">
    <tbody>
        <tr>
            <td style="width: 15px" align="right">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13</td>
            <td style="width: 453px; text-align: left">&lt;?php<br />
            $url = &quot;http://twitter.com/statuses/update.xml?&quot;;<br />
            $username = <font color="#c0c0c0">your username</font>;<br />
            $password = <font color="#c0c0c0">your password</font>;<br />
            $params = &quot;status=&quot;. rawurlencode(<font color="#c0c0c0">message</font>);<br />
            <br />
            $result = file_get_contents($url.$params , false, stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array(&nbsp;&quot;method&quot; =&gt; &quot;POST&quot;,&nbsp;&quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            )));<br />
            ?&gt;</td>
        </tr>
    </tbody>
</table>
<p><strong>&nbsp;1行目</strong>、「&lt;?php」からスタートしています。ここから13行目の「?&gt;」まで、これがhtml上に埋め込まれて1連のPHPプログラムとして動作することになります。<br />
<br />
<strong>2行目</strong>「$url = &quot;http://twitter.com/statuses/update.xml?&quot;;」<br />
ここから「$○○○=&times;&times;&times;;」という文が続きますが、これは$○○○という変数に&times;&times;&times;という中身をセットするということです。<br />
$urlという変数に「<a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>?」を入れたら何が起こるかというと、「<a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>?」という文字列を使いたいときには今度から「$url」とだけ書けば良いということになります。<br />
このアドレスの意味はこの時点では不明なので、後ほど。<br />
<font size="1"><font color="#808080">※変数のシステムはどのプログラム言語でも基本のことですが、PHPは型を定義しなくても、代入した値に応じて勝手に変数の型を決定してくれるみたいです。</font></font><br />
<br />
<strong>3行目</strong>、<strong>4行目</strong>も2行目と同じく変数にセットを行っています。<br />
サンプルソースの「your username」、「your password」はそれぞれtwitterの自分のユーザIDとパスワードに置き換えます。<br />
ここで気をつけるのは、それぞれの文字列はさきほどのurlと同じようにダブルクォートで囲む必要があるということです。<br />
これで、「$username」、「$password」にそれぞれユーザIDとパスワードがセットされました。<br />
<br />
<strong>5行目</strong>。「$params = &quot;status=&quot;. rawurlencode(<font color="#c0c0c0">message</font>);」です。<br />
サンプルソースの「message」はtwitterに送信するメッセージに置き換えます。<br />
ドットは前後の文字列を連結してくれます。<br />
つまり&quot;status=&quot;と「rawurlencode(<font color="#c0c0c0">message</font>)」を連結した文字列を$paramsにセットするということですが、rawurlencode～はダブルクォートで囲まれていませんのでそのまま文字列ではありません。関数です。<br />
<br />
関数は、ここでは、「カッコ内（この場合だとmessage）の文字列を使ってなんか変換した値に置き換わる」というイメージでみていくとわかりやすいと思います。（関数の厳密な定義とは異なるので、あくまでイメージです）<br />
<span class="dc-title">rawurlencodeという関数はもともとPHPにあるもので、これはカッコ内の文字列をRFC1738 に基づきURL エンコードした値に置き換えます。<br />
</span><font size="1"><font color="#808080">※何故エンコードを行うかというと、ソースの引用元にもあるように、「メッセージにスペース(空白)があると、そこで切れてしまうから」です。どうしてかはとりあえず考える必要はなくて、そういうものだと思っておきます。<br />
蛇足を書けば、空白がなければエンコードしなくていいってことです。つまり自分は絶対空白をメッセージにいれないという場合は<span class="dc-title">rawurlencodeしなくて良いのです。<br />
しかし、エンコードしておけばどっちにも対応できるのでここではエンコードします。<br />
</span></font></font><br />
そんなわけで、最終的に$paramsには、<br />
「status=[メッセージをRFC1738 に基づきURL エンコードした文字列]」がセットされました。<br />
<br />
次は<strong>7行目～12行目</strong>ですが、これらはまとめて1文のプログラムです。<br />
いまさらですがプログラムの1文の終わりはセミコロンが示しています。そんなわけでちょっと長めのこの文を見ていきます。</p>
<table cellspacing="1" cellpadding="1" width="468" border="1">
    <tbody>
        <tr>
            <td style="text-align: left"><font color="#ff0000">$result = file_get_contents(</font><font color="#800000">$url.$params </font><font color="#ff0000">, </font><font color="#003300">false</font><font color="#ff0000">, </font><font color="#0000ff">stream_context_create(array(<br />
            &nbsp;&quot;http&quot; =&gt; array(&nbsp;&quot;method&quot; =&gt; &quot;POST&quot;,&nbsp;&quot;header&quot; =&gt; &quot;Authorization: Basic &quot;.base64_encode($username. &quot;:&quot;. $password)<br />
            &nbsp;)<br />
            ))</font><font color="#ff0000">)</font>;<br />
            &nbsp;</td>
        </tr>
    </tbody>
</table>
<p>まずはじめに「$result =」とあるので、これも変数$resultに、なにか値をセットしているんだなーということがわかります。<br />
次にfile_get_contentsとありますがこれは関数です。カッコ内に引数としてファイル名、インクルードファイルの検索の有無、コンテキストリソースをコンマで区切ってセットすると、指定したファイルを指定した形式で呼び出して、ファイルの内容を文字列に読み込むという関数です。<br />
ここでは、<br />
ファイル名＝「<font color="#800000">$url.$params</font>」、<br />
インクルードファイル検索＝「<font color="#003300">false</font>」、<br />
コンテキストリソース＝「<font color="#0000ff">stream_context_create(array(&quot;http&quot; =&gt; array( &quot;method&quot; =&gt; &quot;POST&quot;,&nbsp;&quot;header&quot; =&gt; &quot;Authorization: Basic &quot;. base64_encode($username. &quot;:&quot;.$password))))</font>」<br />
となります。<br />
つまりこれらの情報をもとにデータを呼び出し、$resultにセットされるということになります。<br />
<br />
ファイル名「<font color="#800000">$url.$params</font>」は先ほど設定した$urlと$paramsを連結したものなので、具体的には「http://twitter.com/statuses/update.xml?status=[messageをRFC1738 に基づきURL エンコードした文字列]」ですね。<br />
インクルードファイルについてはここでは気にしなくていいです。<font color="#003300">false</font>なので検索しません。<br />
<br />
コンテキストリソースを見ていきます。</p>
<table style="width: 525px; height: 38px" cellspacing="0" cellpadding="0" width="525" border="1">
    <tbody>
        <tr>
            <td>stream_context_create(array( <font color="#00ccff">&quot;http&quot; =&gt; array(</font><font color="#ff0000">&nbsp;</font><font color="#800080">&quot;method&quot; =&gt; &quot;POST&quot;</font><font color="#00ffff">,&nbsp;</font><font color="#ff00ff">&quot;header&quot; =&gt; &quot;Authorization: Basic &quot;. base64_encode($username. &quot;:&quot;. $password)</font><font color="#00ffff">)</font>))</td>
        </tr>
    </tbody>
</table>
<p>stream_context_createは関数です。これはストリームコンテキストを作成する関数だそうです。まんまです。<br />
正直ぱっとみてこれを理解するのはむずかしいんですが、コンテキストとはこの場合、プログラムに与える条件のことで、その条件でプログラムを実行しろという命令をします。<br />
<br />
この場合、「<font color="#00ffff">&quot;http&quot; =&gt; array(</font>～<font color="#00ffff">)</font>」はHTTPコンテキストを～の条件で実行するということで、その内訳が<br />
「<font color="#800080">メソッド</font>はPOST」、「&quot;Authorization: Basic &quot;. base64_encode($username. &quot;:&quot;.$password)という<font color="#ff00ff">ヘッダ</font>を付加する」となります。<br />
base64_encodeはbase64形式にエンコードする関数なので、その結果をドットで連結して、headerは「Authorization: Basic[&quot;ユーザID:パスワード&quot;をbase64形式にエンコードした文字列]」になります。<br />
<font color="#808080">※methodとかheaderはHTTPコンテキストを実行するためにもともと持つ設定値で、他にもいろいろあるんですが今回はmethodとheaderだけ設定しています。<br />
※arrayは配列を示す構文で、arrayのカッコ内のコンマで区切った複数の値を、ひとつのまとまりとして扱っています。<br />
<br />
</font>最終的に7～12行目は、<br />
「http://twitter.com/statuses/update.xml?status=[messageをRFC1738 に基づきURL エンコードした文字列]」で指定されるファイルを、メソッドはPOSTで、「Authorization: Basic[&quot;ユーザID:パスワード&quot;をbase64形式にエンコードした文字列]」をヘッダに付加して実行する。<br />
ということになります。<br />
<br />
なんだかこんがらがりそうですが、とりあえずこれが一通りのソースの流れです。<br />
&nbsp;</p>]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-1-</link>
    <pubDate>Fri, 01 May 2009 07:33:36 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/3</guid>
  </item>
    <item>
    <title>twitter botを作りたい</title>
    <description>
    <![CDATA[<p>そもそも今までなじみのなかったweb系プログラムを書いてみたいと思ったのが、最近始めたツイッターのおかげです。<br />
twitterは公式が提供しているAPIを使って自動投稿などが簡単にできるんですよね。<br />
それを利用して、twitterにはbotが多数存在しています。<br />
botの作り方を紹介して下さっているサイトやブログが多数あり、そのおかげで、プログラム知識のない人でも、ソースをそのままもらってきてちょこっと書き換えるだけで気軽にbotが作れるんですね。<br />
なんとも楽しい時代ですよね。<br />
<br />
また、twitterは公式が英語なので、英語に弱いとAPIを使ってみること自体が大変です。<br />
自分でtwitterAPIを利用したソースを書く場合も、公開されているソース自体が非常に参考になってとてもありがたいです。<br />
<br />
そんなわけで、私も、ソースをお借りして、twitter botを作ってみたいなーと思います。</p>]]>
    </description>
    <category>twitter bot</category>
    <link>http://kuroutan.blog.shinobi.jp/twitter%20bot/twitter%20bot%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%9F%E3%81%84</link>
    <pubDate>Fri, 01 May 2009 06:45:59 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/2</guid>
  </item>
    <item>
    <title>はじめに</title>
    <description>
    <![CDATA[これから始めるのは、PHPを勉強していこうという不定期ブログです。<br />
<br />
PHPは環境すら整えたことがないという超初心者、けどもC、C++、Java、SQLなどの知識はちょぴっとあるという状態からスタートです。<br />
<br />
一般的なPHP入門ではないです。<br />
具体的には、これを作りたいけどどうしたら&hellip;？と思ったものを、ネット上に公開されているオープンソースを使わせていただいて理解、応用していけたらなあというかんじです。<br />
<br />
よろしくお願いします。]]>
    </description>
    <category>雑記</category>
    <link>http://kuroutan.blog.shinobi.jp/%E9%9B%91%E8%A8%98/%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB</link>
    <pubDate>Fri, 01 May 2009 06:29:58 GMT</pubDate>
    <guid isPermaLink="false">kuroutan.blog.shinobi.jp://entry/1</guid>
  </item>

    </channel>
</rss>