42
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-10

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

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

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

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

githubにtwitteroauthなるものがあるようです。
こちらをお借りしましょう。

#事前準備

twitterにbot用のアカウントを作成

メールアドレスが必要となるため、事前に用意しておく。
スクリーンショット 2014-01-09 9.36.42.png

スクリーンショット 2014-01-09 9.43.53.png
できた

作成するアプリケーションの登録

twitterアカウントでデベロッパーサイトにログインする

デベロッパーサイトはこちらから。
https://dev.twitter.com/apps

スクリーンショット 2014-01-09 9.53.54.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

ここまで準備できたら、アクセストークンを発行する

「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.表示確認

スクリーンショット 2014-01-09 10.37.14.png

大丈夫そう!

twitter botを作ってみる(第1回〜twitteroauth導入編)
twitter botを作ってみる(第2回〜応用編-メッセージのランダマイズ)
twitter botを作ってみる(第3回〜作成したスクリプトを自動実行する)

42
49
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?