OAuth対応しないとヤベーんじゃねーのと思ってるPHPerに贈るコピペ用コードそろそろOAuth対応しないとヤベーんじゃねーのと思ってるPHPerに贈るコピペ用コードPHPツイッターAPIですが6月30日からBASIC認証がNGになるということで、なんか適当にbotとか作ったんだけどそろそろ対応しないといけないんじゃねーの?と思ってる方もいらっしゃるのではないかと思います。そんなお困りのあなたに今日はコピペ用コードをご用意しました。以下、BASIC認証をOAuth認証に変更するための大まかな順序です。OAuthライブラリをダウンロードするOAuthアプリケーション登録するコードを直すでは具体的な方法について説明しますが、今回説明するのはbot等のユーザー固定のツイッターアプリの認証方法をOAuthに変える方法です。OAuth認証を使って不特定多数のユーザーからウェブサービスを利用できるようにする方法ではありませんのでご注意ください。OAuthライブラリをダウンロードする一からコーディングしてもいいのですが全部説明するのも面倒なので、その辺に転がってるライブラリを利用させて頂くことにします。探せばPHPのOAuthライブラリも色々あると思いますが、今回はツイッター本家のページからリンクされているTwitterOAuthを利用することにします。(以下の例ではこのライブラリを使用しjsonでツイッターAPIを呼び出していますが、PHP-5.2.10未満のjsonモジュールにはバグがあるため、PHP-5.2.10以降が必要です。この辺については後述します。)http://github.com/abraham/twitteroauthにアクセスしてアーカイブをダウンロードしてもいいのですが(そうしたい人はどうぞ)、必要なのはOAuth.phpとtwitteroauth.phpの二つだけですので、http://github.com/abraham/twitteroauth/tree/master/twitteroauth/から個別にファイルをダウンロードした方が早いと思います。ダウンロードしたら適当なフォルダに保存しておいてください。使い方は後で説明します。OAuthアプリケーション登録するライブラリをダウンロードしたらOAuthアプリケーション登録をします。順番的にはこちらを先にしても構いません。アプリケーション登録はhttp://dev.twitter.com/apps/newから行います。ページにアクセスすると以下の登録フォームが表示されます。各項目には以下の内容を入力してください。OAuthアプリケーションの名称。OAuth経由でつぶやいたとき、ツイッターのタイムラインにこのアプリ名が表示されます。ウェブサイトを持ってる人は自分のサイトのURLをセットしとけば良いです。ツイッターのタイムラインのアプリ名をクリックするとこのURLが開きます。ウェブサイト持ってない人は、自分のtwitterアカウントページとか、上の例みたいにexample.comとかをセットしとけば良いと思います。今回はBASIC認証からOAuthへの移行のみを例にしていますので、送信にします。不特定多数から使用可能なウェブアプリを作成する場合はブラウザアプリケーションにする必要があります。Write、しない場合はRead-onlyを指定します。各項目を入力したら「アプリケーションを登録する」ボタンを押してください。エラーが無ければアプリケーションのページに遷移します。アプリケーションのページに遷移したら後で必要になる項目を控えておいてください。secret(以下のモザイクをかけた部分)をメモっておきます。Tokenをクリックし、oauth_tokenとoauth_token_secret(以下のモザイクをかけた部分)をメモっておきます。oauth_token_secretとかは人が読める形で保存するなと書いてますが、(繰り返し言いますが非公開前提ですので)華麗にスルーします。コードを直す準備が終わりましたので、プログラムの方をいじくります。例として、home_timelineを読み込む処理を想定します。PHPのcURLモジュールを使用してAPIを呼び出し、jsonモジュールでPHPのオブジェクトに変換しています。json_decode($ctx);}これをBASIC認証をOAuth認証に変えます。ダウンロードしたtwitteroauth.phpとOAuth.phpを同じディレクトリ(もしくは適当なPATH)に配置し、以下のようにコードを書き換え認証をOAuthに変更します。secretをセットしてください。Tokenのoauth_tokenとoauth_token_secretをセットします。この辺の作りについてはあくまでも例ですのでお好きなように。$resultあたりをコピペして、元のコードに合わせて適当に改造してください。TwitterOAuthを使用する場合、API呼び出し時のエントリポイントとなるURL(http://api.twitter.com/1/statuses/home_timeline.json)は、TwitterOAuthが適当に変換してくれます。上の例ではその挙動を利用してTwitterOAuth::getの引数に'statuses/home_timeline'を渡していますが、完全なURLを指定してもちゃんと動きます。次はpostする例です。呼び出すAPIがupdate.jsonになり、POSTメソッドでHTTPリクエストを発行していること以外は上の例と同じです。json_decode($ctx);}これも認証をOAuthに変更します。API呼び出しに使用するメソッドがTwitterOAuth::getでは無くTwitterOAuth::postとなっている点以外については、基本的に上のhome_timelineの例と同じです。$result;}$status引数が投稿するツイートです。($statusにはUTF-8文字列を渡してください。)実際に投稿するとhttp://twitter.com/xmalloc1/status/13345684719のようになります。通常「webから」等になっている使用クライアント名がアプリケーション登録した際のアプリケーション名となっており、リンク先も登録時のアプリケーションのウェブサイトURLとなっているのが分かります。上述した通りPHP-5.2.10未満のjsonモジュールにはバグがあり、PHPのint(マシン依存、通常32bit)を越える数値を扱うことができません。uzuralife.com。