今もっとも熱い掲示板サービス「Yahoo! 知恵袋」のWeb APIを使ってみた!

こんばんは、ritouです。
今話題のYahoo! 知恵袋ですが、OAuthを用いた近代的なWeb APIを提供しております。

動作確認のためのSDKも用意されているようです。

これも便利そうですが、私はPECL OAuthが便利だと宣言していますので、今回もPECL OAuthを用いて試してみたいと思います

ConsumerKey, ConsumerSecretを取得する

ここから登録します。

知恵袋関連のAPIを使って、ConsumerKey/SecretにあらかじめScopeをセットしておくのがY!Jのやり方です。

これで準備完了ですね。

さっそく動作確認

今回は、いきなりテストの質問がたくさん投稿されるのもアレなので、プレビューのAPIを利用してみたいと思います。

サンプルのWebアプリケーションはこちら。
投稿されないので是非試してみてください。

http://www8322u.sakura.ne.jp/pecl_oauth_yahoojp_answers_sample/

まずはログインシールがセットされているログイン画面でログインして、

同意画面をしっかり見て同意して、

戻ってきたらほら、良い感じです。

Access TokenのRefreshも普通にできます。
とりあえず動きましたね。

解説

前回、PECL OAuthのサンプルコードを載せたりしましたが、今回はPOSTのリクエストなのでそのままだと微妙に動きませんでしたので、細かい修正を入れていますが、用意されている関数だけを使っているのでみなさんも簡単に利用できると思います。
まずは、APIとそれに必要なパラメータはこちらです。

// 質問投稿プレビュー APIと必須パラメータ
$api_url = 'http://chiebukuro.yahooapis.jp/Chiebukuro/V1/postQuestionPreview';
$api_params = array(
                        "content" => "Yahoo! JAPANの知恵袋APIを世の中のたくさんの開発者のみなさんに知ってもらいたいのです。どうしたらいいでしょうか?"
                );

次に、OAuthのコンストラクタですが、前回はauth_typeにURI、つまりOAuthのパラメータも全部GETにつめこむ方法を例示してしまいました。
ここはデフォルトでも設定されるOAUTH_AUTH_TYPE_AUTHORIZATIONをセットしておけば安心です。

$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);

あとは、APIアクセスのときにパラメータを2つめの引数にセットし、3つめの引数にPOSTの形式を指定します。

$oauth->fetch($api_url, $api_params, OAUTH_HTTP_METHOD_POST );

これだけですね。

まとめ

  • 今回もPECL OAuthで簡単にできた
  • Request Body Hash?何それ?

おっと、このAPI群があれば質問投稿→質問詳細で回答取得→ベストアンサー選択(お礼コメント投稿)までのフローが自動化できますね。
あとは携帯電話からメールで送られてきた画像から文字列抽出して質問して回答をメールで返信する技術を組み合わせれば・・・
あの事件?のフローがシステム化できるかもしれませんね!

ではまた。

添付:このサンプルで用いたソースコード