Subcribe via RSS

PHPで2-legged OAuth( GDD Devquiz )

2010/8/26 | category: Diary, programming, web | tags: ,
このエントリーをはてなブックマークに追加

Google Developer Day 2010 は、参加するためにDevquizっていう問題がいくつか出て、それを解いた点数の高い人から参加できるっていう仕組みなのです。

いくつか問題があって、

・簡単なgoogleのサービスに関する問題

・html5の文法間違い探し

・2-legged OAuthをやる

・Google Map APIを使ってTSP

・しりとりで相手に勝つ

・PACMAN

なんかがあったような気がします。

それぞれ

  • 簡単なgoogleのサービスに関する問題
  • 普通にググって考える。

  • html5の文法間違い探し
  • 自分で見ても間違いが分からなかったからHTML5の文法チェックツールが早くも登場 ? Publickey を使った。

  • 2-legged OAuth
  • ググって近いプログラムを見つけて、それを元にプログラム書いた(後述)。
    しかし、OAuthの仕様について 〜署名?それっておいしいの?〜 (Yahoo! JAPAN Tech Blog) の最後にある確認ツールを使えば簡単にできるらしい。

  • Google Map API
  • javascript書いてレベル2まで普通に解けたのに、レベル3でうまく行かず、面倒だったのでやめた。

  • しりとり
  • 辞書の解析だけプログラムでやって、手動で解いた。レベル3は何度か負けたけど、相手の戦術を逆に使う方法を考えてできた。

  • PACMAN
  • 時間がなくてやってない。

これじゃ合格点に行かないような気もする。


以下はPHPで2-legged OAuth。
PHPを選んだ理由は、書ける言語の中で一番最初に、よさそうな参照できるコードが見つかったから。

指定されたのは、CONSUMER KEY、 CONSUMER SECRET、POSTするメッセージボディ、realmとターゲットURLで、あとHMAC_SHA1を使うことも指定されたような。



<?php
require_once 'OAuth.php';
define('CONSUMER_KEY', 'your consumer key');
define('CONSUMER_SECRET', ''your consumer secret);

function OAuthConsumerRequest($method, $url, $data=NULL) {
    $consumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
    $signature_method = new OAuthSignatureMethod_HMAC_SHA1();

    //与えられたメッセージボディ
    $params = array("hello" => "world");
    // access protected resources
    $oauth_request = OAuthRequest::from_consumer_and_token($consumer,
                                       NULL,
                                       $method,
                                       $url,
                                       $params);

    $oauth_request->sign_request($signature_method,
                                 $consumer, '');

//与えられたrealmはここで使う
    $headers = $oauth_request->to_header('devquiz');
    $prequest = "hello=world";

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array($headers));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $prequest);
    curl_setopt($curl, CURLOPT_POST, TRUE);

    $result = curl_exec($curl);
      if ($result === FALSE) {
         return curl_error($curl);
    }
    curl_close($curl);
    return $result;
}

//与えられたURLはここで使う
$ret = OAuthconsumerRequest('POST', 'target url';);
print($ret);
?>

を参考にしました。

関連する記事:

この記事をシェアする:


Leave a Reply

コメントリンクを nofollow free に設定することも出来ます。

  • 書いてる人:

    Junichiro Takagi
    高木潤一郎

    http://tjun.jp
    mail@tjun.jp

    未踏でクリエータやってました。メーカーでエンジニアやってます。
    このブログは、会社とは関係なく個人の意見を書いています。

    RSS:


  • friendfeed: