AirでGoogleにログインする 1

Airで というよりも jqueryで というほうが正しいきもしますが、
seo-webmasterではRESTでGoogleにログインするわけですが、
実装はこんなかんじの雑なソースになっております。

    var auth_url = "https://www.google.com/accounts/ClientLogin";
    var auth_id = $("#auth_id").val(); //フォームのIDを取得
    var auth_pass = $("#auth_pass").val(); //フォームのパスワードを取得

    $.ajax({
        url : auth_url,
        type : "POST",
        data  : {"accountType":"GOOGLE","Email":auth_id,"Passwd":auth_pass,"service":"サービス名","source":"ソース名"},
        error : function(XMLHttpRequest, textStatus, errorThrown){
            //エラー処理
        },
        success: function(rs) {
            var token = rs.match(/Auth=([a-zA-Z0-9_\-]+)/); //ここでトークンを切り出して保存する
            $('#SITE-TOKEN').val(token[1]);
        }
    });

これはPOSTなので、いいのですが、次はサイトの認証。
こっちはPUTを使います。

    var webmaster_url = "https://www.google.com/webmasters/tools/feeds/sites/" + encodeURIComponent(サイトID).replace(/\./g,"%2E");
    var token = $('#SITE-TOKEN').val()//認証トークン;

    //送信するXMLを生成する
    var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:wt='http://schemas.google.com/webmasters/tools/2007'><atom:id>" + site_id + "</atom:id><atom:category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/webmasters/tools/2007#site-info'/><wt:verification-method type='htmlpage' in-use='true'/></atom:entry>";

    $.ajax({
        url : webmaster_url,
        type : "PUT",
        processData : false, //デフォルトがtrueなので必ずきってく
        dataType:"xml", //なくても動いたけど一応 受信コンテンツタイプの指定
        contentType : "application/atom+xml; charset=UTF-8", //コンテンツタイプXMLにしないとデフォルトが urlencodedなのでエラーになる
        data: xml, //送信xml
        beforeSend : function(req) {
            //ログイン時の認証トークンを送る
            req.setRequestHeader('Authorization', 'GoogleLogin auth=' + token);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown){
            //エラー処理
        },
        success: function(rs) {
            //成功時の処理
        }
    });

ポイントとしては processData をきることと、
contentType をちゃんとatom+xmlにすること、
それからbeforeSendでsetRequestHeaderにトークンを埋め込むことかなー

ここらへんのリファレンスみたいなのがあんまなくて(読みかたがわからないだけかも)
適当に大文字にしたり小文字にしたり半角スペース入れたり
してたら通った感じなので、もしかしたら間違ってるかも。

AirでGoogle認証を使うならこんなかんじで試してみてください。


->