twitterのbotなどでOAuthを使う方法(PHPバージョン)

プログラミング関係

twitterに興味がある人は、自分で組んだプログラムで自動投稿をするbotなんかを作ってみたいと思う事があるだろう。
つまづくところは色々あると思うけど、今回はtwitterに投稿する部分を紹介したい。
その他色々は『twitterのbotをphpで制作するまとめ』にあります。

2010/4/29 追記
以下は古い記事なのでこちらを参照した方が良いです。

OAuthとはどんなもの?

twitterに投稿する方法はBasic認証とOAuth認証がある。
自分が管理するbotならばパスワードを流出する機会がないと思うのでどちらでも良いのだけど、
セキュリティー以外の利点としてOAuthにすると投稿が『APIで』では無く、任意の文字にすることが出来る。

日の当たるあの庭で。

このように設定次第で出来るのだ。
それでは詳しい方法は続きで。

まず準備をしよう

大きく記事を書いているけど、今回は他の方が作ったプログラムを紹介するだけだ。
PHP+OAuthでTwitter
リンク先のものは非常によくできていて、知識があまり無くても出来た。

ここからはリンク先のページを順に追う形で紹介する。
まず、『abraham’s twitteroauth at master – GitHub』からプログラムをダウンロードしよう。
2009/12/25 追記
トラックバックからの情報で『abraham’s twitteroauth at master – GitHub』のバージョン0.1.1を使うように。
バージョン0.2以降を使う場合は『Twitter のIDを利用してログイン&投稿(OAuth)』にあるリンク等を参考にどうぞ。(2017年5月5日リンク切れ確認)

れっつだうんろーど。

ダウンロード後、ファイルを解凍し、中にある『twitteroauth』フォルダに『OAuth.php』と『twitterOAuth.php』があるのを確認しよう。
見つからなかったら、困ろう。
あったなら『twitterOAuth.php』の131行目と132行目の間に以下を書き加えて保存する。

curl_setopt($ch, CURLOPT_HTTPHEADER,array('Expect:'));

そして『http://wolf.silk.to/ups/oauth_test.txt』へアクセスし、内容をテキストファイルにコピペで保存。(2017年5月5日リンク切れ確認)
ファイル名を拡張子ごと『oauth_test.php』に変更だ。
そして『OAuth.php』と『twitterOAuth.php』と『oauth_test.php』を同じフォルダ内にアップロードする。

twitter側でOAuthの準備をしよう

さて次はtwitter側でOAuthのための準備をする。
OAuthを利用するアカウントで『Applications Using Twitter』にアクセスし、『Register a new application »』をクリック。

僕は既にまとめツールが登録してある。普通はなにもないはず。

クリックしたら以下のような画面が出てきます。
それぞれの項目は画像のような内容です。画像が大きいので注意。

アプリケーション登録画面

必要な項目を入力したら設定を保存。
すると『Application Details』のページへ移動します。
そこにある『Consumer key』と『Consumer secret』をコピペします。
どこにコピペするかというと、『oauth_test.php』の中にある『$consumer_key』と『$consumer_secret』です。

Ctrl + C!Ctrl + C!

コピペしたら上書きアップロードし、『oauth_test.php』にOAuthを利用するアカウントでアクセスします。
そうすると以下のような画面になると思う。
ぼかしてあるところに『$consumer_key』と『$consumer_secret』が表示されている。

モザイクもやもや。

そして一番下にある『https://twitter.com/oauth/authorize?oauth_token=~~~』っていうリンクをクリック。
そうするとtwitterのOAuth認証のページへと飛ぶので、許可するをクリック。
クリックしたら自動で『oauth_test.php』のページに戻る。
画面をよく見ると『Access Token』を『Access Token Secret』に新しく値が入っていると思う。
これをメモろう。

メモしたら『Applications Using Twitter』へアクセスし、登録したOAuthプログラムをクリック。
設定画面が開いたら『Application Type』を『Client』に変更して保存する。

clientに変更する。

投稿テストをしよう

先ほどメモした『Access Token』と『Access Token Secret』、そして『Consumer key』と『Consumer secret』を利用し投稿出来るかのテストをする。
したにあるプログラムをテキストファイルにコピペして、ファイル名を『toukou.php』とでもして保存。
コードの右上にある3つのアイコンの一番左をクリックすれば別画面に開く。
『oauth_test.php』と同じ場所にアップロードしよう。

<?php
//twitterOAuth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
require_once("twitterOAuth.php");

//Consumer keyの値
$consumer_key = "consumer_key";
//Consumer secretの値
$consumer_secret = "consumer_secret";
//Access Tokenの値
$access_token = "access_token";
//Access Token Secretの値
$access_token_secret = "access_token_secret";

//OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

//投稿する文章
$mes = "OAuthで投稿するテスト";

//TwitterへPOSTする。パラメーターは配列に格納する
$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$mes),"POST");

//in_reply_to_status_idを指定するのならば array("status"=>"@hogehoge reply","in_reply_to_status_id"=>"0000000000"); とする。
//$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$mes,"in_reply_to_status_id"=>"0000000000"),"POST");
?>

アップロードした後、『toukou.php』にアクセスすれば投稿される。
自分で組んだbotで利用する時は上記のコードを各ファイルにコピペしておく必要がある。
また、twitterにPOSTする代わりにAPIを叩いてTLなどを取得する事も出来る。

//API呼び出し
	$result = $to->OAuthRequest('http://twitter.com/statuses/replies.xml?count=30', array(), 'GET');

$resultにはリプライがXML形式で入っている。
foreach文などで処理してしまおう。

無事OAuthで投稿が完了したらもう『oauth_test.php』と『toukou.php』はいらないので削除してもOK。

これを利用してbot以外のプログラムを作る事も出来る。
僕が作ったものとして『twitterまとめツール』がある。
プログラムをtwitterに登録し、『Consumer key』と『Consumer secret』を取得。
取得した『Consumer key』と『Consumer secret』を利用し、訪問者ごとに『Access Token』と『Access Token Secret』を発行。
これをクッキーやデータベースに保存すれば一度の認証で何度も使えるようになる。

これで一通りの解説は終了です。
それでは良いtwitterライフを。

コメント

  1. つき より:

    初めまして。OAuthに挑戦しようとして、頑張っているのですが
    ———————————————————
    コピペしたら上書きアップロードし、『oauth_test.php』にOAuthを利用するアカウントでアクセスします。
    ———————————————————
    ここのアカウントでアクセスがどのようにすればいいのか分からないのです。
    Twitter上にはPHPを上げられないので自身のサーバーに上げている状態ですがこれにTwitterアカウントでアクセスするにはどうすればよいのでしょう。
    初心者中の初心者の質問で申し訳ございませんがお教え頂ければ幸いです。

  2. hosimitu より:

    コメントありがとうございます。

    ———————————————————
    コピペしたら上書きアップロードし、『oauth_test.php』にOAuthを利用するアカウントでアクセスします。
    ———————————————————
    に関しては、まず自分のbotでtwitterにログインした状態にします。 http://twitter.com/
    ログインした状態で『oauth_test.php』にアクセスすればOKです。

    アクセスの方法ですが、サーバーの『twitterフォルダ』に『oauth_test.php』をアップロードしたとします。
    そうした時、このブログの場合は『http://www.hosimitu.com/twitter/oauth_test.php』にアクセスすることになります。
    ご自身のアップロードしたサーバーのアドレスに修正してください。
    IEやFirefoxなどのブラウザのアドレス欄にご自身のoauth_test.phpを置いたアドレスを入力します。

    これで伝わるかどうかちょっと分からないので、また詰まったらコメントしてくださいませ。

  3. つき より:

    有難うございました!
    何とかアクセスできたのですが

    ———————————
    そして一番下にある『https://twitter.com/oauth/authorize?oauth_token=~~~』っていうリンクをクリック。
    そうするとtwitterのOAuth認証のページへと飛ぶので、許可するをクリック。
    クリックしたら自動で『oauth_test.php』のページに戻る。
    画面をよく見ると『Access Token』を『Access Token Secret』に新しく値が入っていると思う。
    ———————————
    と言うことですがクリックした所、以下のようなページに出ました
    —————–
    アプリケーションが、あなたのアカウントへの接続を要求しています。
    ○○が開発した××というアプリケーションは、Twitter上にあるあなたに関連するデータにアクセスしたり、データーを更新しようとしています。
    —————–
    これを許可すると
    —————-
    You’ve successfully granted access to ××!
    ××に戻り、暗証番号を入力してください
    —————-
    と出るのです。
    ××はアプリケーション名なのですがどのサイトを拝見してもこのように出るとかかれておらず、また暗証番号がどこに入るのか分からずにおります。
    暗証番号はどこに入れるのか、と言うことを知りたいのですがお分かりになりますか?
    もう、なんだか本当に申し訳ございません

  4. つき より:

    な、何とか設置は出来ました。
    上記も解決できました!
    とても丁寧にご説明を頂き、本当に有難うございました!

  5. hosimitu より:

    設置出来て良かったですね。
    もう解決されたようですが上記の問題はコールバックURL辺りだったんですかね?
    確かそんなエラーが出た気がします。

    もし定期的に動かすcronを使われるようなら『GAE-Cron Club』なんかをお薦めします。
    ttp://gaecronclub.appspot.com/

  6. つき より:

    昨日は有難うございました。その後頑張ったのですが設置は出来て上記のPHPを叩くときちんと出るのですがbotに組み込んでも反映されずにいます。
    プログラミングができなくても作れるTwitter botの作り方 さんのプログラムを使っているのですがこの場合、どのようにすればよいのでしょう・・・
    何度も申し訳ございません・・・
    そしてCronはお勧め頂いたサービス様を使わせて頂いておりますv

  7. hosimitu より:

    phaさんのを使っていらっしゃるのですね。
    コピペで簡単にOAuthに対応した物を作ってみました。
    http://www.hosimitu.com/2010/01/2520-1390.php

    OAuthの『Access Token』が取得出来ているのなら、使えると思います。
    と言っても動くかテストしてないので問題が起こるかも知れませんが(;><)
    もしよろしければどうぞ。

  8. つき より:

    hosimitu様

    何度も根気よくお教え頂き、またプログラムまで有難うございました!
    無事にきちんとOAuthに対応するようになりました!
    もう殆ど諦めかけていただけに感動も一入です。

    あの、botの説明サイトの方に貴サイトへリンクをしてよろしいでしょうか?

  9. つき より:

    すみません・・・reply_random.phpだけが使えないようです。
    白紙でリプライを返さないようですがform.phpなどは上手く行くようです

  10. つき より:

    reply_random.phpの方ですが何度か設定しなおして無事に設置できました。
    お騒がせ、ご迷惑をお掛けしました。
    本当に有難うございました

  11. hosimitu より:

    ご報告ありがとうございます。
    たまたま私も自分のbotをいじっていたところだったので、自分の勉強もかねていろいろさせてもらいました。
    こちらこそどうもです(‘-‘*)
    このサイトへのリンクはどうぞお願いします。

  12. かずき より:

    3のつきさんの状態になっていて、解決できずに困っています…
    暗証暗号をどこに入れればいいのでしょうか?
    『Access Token』を『Access Token Secret』の値が欲しいのですが全く方法がわかりません…

  13. hosimitu より:

    コメントありがとうございます。
    暗証番号はパソコンで使うツール等で使用するものだそうです。
    botに使うならばコールバックURLを指定して使うのが楽ですよ。

    http://www.hosimitu.com/img/2009/11/register.jpg
    この画像のように『Callback URL』を指定すれば良いです。
    指定しなかった場合に暗証番号が出るみたいです。

  14. kazuna より:

    はじめまして。こちらを見させていただいてOAuthを取得しようとやってみたのですが、2のとおりにoauth_test.phpへアクセスすると

    Warning: require_once(twitterOAuth.php) [function.require-once]: failed to open stream: No such file or directory in /usr/local/www/htdocs/(ID名)/public_html/twitter/oauth_test.php on line 3

    Fatal error: require_once() [function.require]: Failed opening required ‘twitterOAuth.php’ (include_path=’.:/usr/local/lib/php’) in /usr/local/www/htdocs/(ID名)/public_html/twitter/oauth_test.php on line 3

    というエラーが出てしまいます。
    これはどういう意味なのでしょうか・・・?
    ちなみにこちらに書いてある部分以外は何もかまっていません。

    oauth_test.phpの3行目に何か問題があるというのは分かるのですが
    oauth_test.phpの3行目を触った覚えがないのでどうしていいのか困っています。
    どうぞ宜しくお願いします。

  15. kazuna より:

    すみません。なんとか自己解決しました。
    お騒がせしました。

  16. masa より:

    恐れ入ります。サイト活用させて頂いております。
    私も1のつきさんと同じ状態でして

    ———————————————————
    コピペしたら上書きアップロードし、『oauth_test.php』にOAuthを利用するアカウントでアクセスします。
    ———————————————————

    の状態なのですがアクセスする場所は分かりまして自分のbotnアカウントで
    twitterにログインしてからoauth_test.phpにアクセスしても画面が真っ白で何も表示されません。
    転送時のモードやパーミッションを設定しないといけないなどということはなく、
    ただアクセスすればいいのでしょうか?原因が分からず困っております。
    お手数ですがご教授頂けると何よりです。失礼致します。

  17. masa より:

    すみません追記です。
    使っているサーバーがPHP4なのですがもしかするとPHP5でないと出来ないものなのでしょうか。

  18. hosimitu より:

    ご質問ありがとうございます。
    転送時のモードやパーミッションはFTPソフトならば自動で最適な物になっていると思います。
    私は変更していません。

    この記事の元記事である『http://www.sdn-project.net/labo/oauth.html』において、『PHP5以上』とありますのでおそらくそこが原因で表示されないのだと思います。
    もしくは、サーバーの方にcURLと言うものが必要なのでそれが無いのかも知れません。

    『abraham’s twitteroauth at master – GitHub』はPHP4でも動くと思いますので、Oauth認証だけ別サーバーを借りて認証し、『access_token』等を取得するのも一つの手かも知れません。

  19. masa より:

    お世話になっております。
    こちらの初歩的な質問に対して大変ご丁寧な回答をありがとうございました。
    別のPHP5を搭載しているサーバーにてトークンを取得する事が出来ました。
    ベーシック認証が終了するという公式からの通達でとても焦っておりましたが
    hosimitu様の分かりやすくご丁寧な説明とご回答のおかげで何とか出来そうです。
    本当に有難う御座いました。

  20. YUU より:

    ここをみて修正しました。
    http://d.hatena.ne.jp/silverbot/20091219/1261180347

  21. odiak より:

    初めまして。
    今まで、Basic認証でBotを作っていたのですが、このたびBasic認証が終了するということで、早く移行したいな〜と思っていました。
    できるだけ手間をかけたくないなぁと思っていたところ、この記事が見つかったので、すごく参考になりました。
    ありがとうございます。

タイトルとURLをコピーしました