FacebookにGroovyでログイン

Facebook, Groovy

FacebookにGroovyでログインする、というのを必死でやろうとしているがうまくいかない。とりあえず現時点でできているところまでアップする。

やりたいことは、FacebookにOAuth2.0方式でアクセスするようなデスクトップアプリケーションを作りたいということ。Facebook内のデータにアクセスする方法は以下にかかれている。

英語なので何分辛かったが、 Client-side Flow のセクションにかかれている認証手順をブラウザなしで実現したい。ログインしていない場合、初回のアクセスでパスワード入力画面に遷移するために、ユーザー名パスワードをPost方式で渡してみたがパスワードが不正と言われてしまう。

(注意)

2011/10/28現在、以下のコードは HttpComponents の使い方として誤りが多いです。
以下のエントリで修正版を載せているのでそちらを参照してください。

ソースコード

#!/usr/bin/env groovy
@Grab("org.apache.httpcomponents:httpclient:4.1.2")
import org.apache.http.*
import org.apache.http.client.*
import org.apache.http.client.params.*
import org.apache.http.client.methods.*
import org.apache.http.impl.client.*
def urltext = "https://graph.facebook.com/oauth/authorize?" + [
    "client_id=OAUTH2.0_APP_ID",
    "redirect_uri=" + URLEncoder.encode("https://www.facebook.com/connect/login_success.html", "utf-8"),
    "scope=" + URLEncoder.encode("email,read_stream,friends_about_me,user_about_me", "utf-8"),
    "response_type=token",
].join("&")
CookieStore cookieStore = new BasicCookieStore()
HttpClient client = null
client = new DefaultHttpClient(cookieStore: cookieStore)
HttpGet get1 = new HttpGet(urltext)
def response1 = client.execute(get1)
println "get1:" + response1.statusLine.statusCode
def nextAction = response1.entity.content.text.replaceAll(/(?msi).+<form method="post".+?action="(.+?)"[^>]*>.+/, "\$1")
println nextAction
client.connectionManager.shutdown()
client = new DefaultHttpClient(cookieStore: cookieStore)
HttpPost post2 = new HttpPost(nextAction)
// ここが怪しい。addParameterを利用するのが正しい?
post2.addHeader("email", "XXXXX@gmail.com")
post2.addHeader("pass", "XXXXX")
def response2 = client.execute(post2)
println "post2:" + response2.statusLine.statusCode
println response2.entity.content.text
client.connectionManager.shutdown()

続きは明日。

Facebook, Groovy

Posted by genzouw