twitter botを作ってみる(第1回〜twitteroauth導入編)


#記事の概要
twitter botを作ってみたくなったので、そのときの作業ログ
ここではPHPを使ってtwitter botの開発をしてみようと思います。

#下調べ
まずは検索ワードを「twitter bot 開発」とかして
適当にGoogle先生に問い合わせ。こんな記事が出てきました。
http://gihyo.jp/dev/serial/01/twitterbot/0003

なるほど、自作のフルPHPスクリプトで開発するとなると、
OAuthあたりがちょい面倒そうなんですね。

とりわけ、ここは上記の記事を参考に。

githubに[twitteroauth](https://github.com/abraham/twitteroauth/tree/master/twitteroauth)なるものがあるようです。
こちらをお借りしましょう。

#事前準備

## twitterにbot用のアカウントを作成
メールアドレスが必要となるため、事前に用意しておく。
![スクリーンショット 2014-01-09 9.36.42.png](https://qiita-image-store.s3.amazonaws.com/0/30307/2445c2fa-e06b-ba55-cbe1-39343c0dd15d.png "スクリーンショット 2014-01-09 9.36.42.png")


![スクリーンショット 2014-01-09 9.43.53.png](https://qiita-image-store.s3.amazonaws.com/0/30307/7fb020d8-1814-a234-668b-b42539f7b380.png "スクリーンショット 2014-01-09 9.43.53.png")
できた

## 作成するアプリケーションの登録
### twitterアカウントでデベロッパーサイトにログインする
デベロッパーサイトはこちらから。
https://dev.twitter.com/apps

![スクリーンショット 2014-01-09 9.53.54.png](https://qiita-image-store.s3.amazonaws.com/0/30307/59f6a276-94ed-a880-b454-64c66372ee30.png "スクリーンショット 2014-01-09 9.53.54.png")

### 必要事項を記入してアプリケーションを登録する
既にデベロッパーに登録されているアプリケーション名は登録できないので注意

![スクリーンショット 2014-01-09 9.59.53.png](https://qiita-image-store.s3.amazonaws.com/0/30307/5ec20114-b666-516a-0049-69af294f8454.png "スクリーンショット 2014-01-09 9.59.53.png")


### 登録完了したら、AccessLevelを「Read and write」に変更する
これをやっておかないと、後で以下のようなエラーで弾かれる。

```
object(stdClass)#5 (2) {
  ["request"]=>
  string(25) "/1.1/statuses/update.json"
  ["error"]=>
  string(34) "Read-only application cannot POST."
}
```

変更は「Settings」タブより。
![スクリーンショット 2014-01-09 10.02.23.png](https://qiita-image-store.s3.amazonaws.com/0/30307/496ebcad-5fbc-9c3e-93cb-10d6bb0ac6a1.png "スクリーンショット 2014-01-09 10.02.23.png")

### ここまで準備できたら、アクセストークンを発行する
「Details」タブに戻り、「Create my access token」ボタンをクリックすると、「Access token」と「Access token secret」が発行される。（後でOAuthの認証部分で使用する）


###


# twitteroauthを導入し、プログラムからtwitterに投稿してみる
## 1.githubのソースコードをFork -> clone
```
s git clone git@github.com:hoge/twitteroauth.git
```

中身はこんなん。

```
s cd twitteroauth/
s ls -l
合計 60
-rw-rw-r-- 1 mtaji mtaji  1100  3月 24 14:26 2013 LICENSE
-rw-rw-r-- 1 mtaji mtaji  5118  3月 24 14:26 2013 README.md
-rw-rw-r-- 1 mtaji mtaji  1503  3月 24 14:26 2013 callback.php
-rw-rw-r-- 1 mtaji mtaji   245  3月 24 14:26 2013 clearsessions.php
-rw-rw-r-- 1 mtaji mtaji   240  3月 24 14:26 2013 config-sample.php
-rw-rw-r-- 1 mtaji mtaji   748  3月 24 14:26 2013 connect.php
-rw-rw-r-- 1 mtaji mtaji  1261  3月 24 14:26 2013 html.inc
drwxrwxr-x 2 mtaji mtaji  4096  3月 24 14:26 2013 images
-rw-rw-r-- 1 mtaji mtaji  1360  3月 24 14:26 2013 index.php
-rw-rw-r-- 1 mtaji mtaji   954  3月 24 14:26 2013 redirect.php
-rw-rw-r-- 1 mtaji mtaji 11913  3月 24 14:26 2013 test.php
drwxrwxr-x 2 mtaji mtaji  4096  3月 24 14:26 2013 twitteroauth
```

## 2.twitterに投稿するコードを書く
例えばこんな感じ。意外とシンプル。

```
s sudo vim TweetTest.php
s cat TweetTest.php 
<?php

    require_once(dirname(__FILE__)."/twitteroauth/twitteroauth/twitteroauth.php");

    // developer info
    $consumerKey       = ‘XXXXXXXXXXXXXXXX;
    $consumerSecret    = 'XXXXXXXXXXXXXXXX';
    $accessToken       = 'XXXXXXXXXXXXXXXX';
    $accessTokenSecret = 'XXXXXXXXXXXXXXXX’;

    $oAuth = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

    // oAuth認証を利用し、twitterに投稿する
    $TWITTER_STATUS_UPDATE_URL = "http://api.twitter.com/1.1/statuses/update.json";
    $method  = 'POST';
    $message = 'テスト';

    $response = $oAuth->post('statuses/update', array('status' => $message));

    // 結果出力
    var_dump($response);

?>
```

## 3.実行
実行してみたらエラーが。

```
s php TweetTest.php 
<pre>object(stdClass)#5 (1) {
  ["errors"]=>
  array(1) {
    [0]=>
    object(stdClass)#6 (2) {
      ["message"]=>
      string(23) "Timestamp out of bounds"
      ["code"]=>
      int(135)
    }
  }
}
</pre>
```

「Timestamp out of bounds」
サーバの時間がずれているのが原因っぽい。

時間を設定。

```
s sudo date -s "01/09 10:15 2014"
2014年  1月  9日 木曜日 10:15:00 JST
```

再度実行。
成功すると長ったらしいjsonが返ってくる。

```
s php TweetTest.php 
<pre>object(stdClass)#5 (22) {
  ["created_at"]=>
  string(30) "Thu Jan 09 01:35:06 +0000 2014"
  ["id"]=>
  int(XXXXXXXXXXXXXX)
  ["id_str"]=>
  string(18) “XXXXXXXXXXXXXXXXXX”
  ["text"]=>
  string(9) "テスト"
・・・
```


## 4.表示確認
https://twitter.com/otajisan_bot

![スクリーンショット 2014-01-09 10.37.14.png](https://qiita-image-store.s3.amazonaws.com/0/30307/d9b8ac32-eaaa-68b1-a8f0-a4365ac6b177.png "スクリーンショット 2014-01-09 10.37.14.png")


大丈夫そう！

twitter botを作ってみる(第1回〜twitteroauth導入編)
[twitter botを作ってみる(第2回〜応用編-メッセージのランダマイズ)](http://qiita.com/monhan/items/5dd2ae067aac73c08b9f)
[twitter botを作ってみる(第3回〜作成したスクリプトを自動実行する)](http://qiita.com/monhan/items/db6468e5248cb23948bf)