Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

記事の概要

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

https://twitter.com/otajisan_bot

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

大丈夫そう!

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした