PHPで2-legged OAuth( GDD Devquiz )
Google Developer Day 2010 は、参加するためにDevquizっていう問題がいくつか出て、それを解いた点数の高い人から参加できるっていう仕組みなのです。
いくつか問題があって、
・簡単なgoogleのサービスに関する問題
・html5の文法間違い探し
・2-legged OAuthをやる
・Google Map APIを使ってTSP
・しりとりで相手に勝つ
・PACMAN
なんかがあったような気がします。
それぞれ
- 簡単なgoogleのサービスに関する問題 普通にググって考える。
- html5の文法間違い探し 自分で見ても間違いが分からなかったからHTML5の文法チェックツールが早くも登場 ? Publickey を使った。
- 2-legged OAuth ググって近いプログラムを見つけて、それを元にプログラム書いた(後述)。
- Google Map API javascript書いてレベル2まで普通に解けたのに、レベル3でうまく行かず、面倒だったのでやめた。
- しりとり 辞書の解析だけプログラムでやって、手動で解いた。レベル3は何度か負けたけど、相手の戦術を逆に使う方法を考えてできた。
- PACMAN 時間がなくてやってない。
しかし、OAuthの仕様について 〜署名?それっておいしいの?〜 (Yahoo! JAPAN Tech Blog) の最後にある確認ツールを使えば簡単にできるらしい。
以下は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);
?>
を参考にしました。
Tweet
Tags: google, php



