2011年10月30日日曜日

FacebookのQuestionを取得

Geaph APIでQuestionが取得できるようになったそうです。 https://developers.facebook.com/docs/reference/api/question/ 
自分があまりQuestionを利用しないのでこのAPIの需要が分かっていないんですが…

  • Questionsの取得には「user_questions」又は「friends_questions」のpermissionが必要
  • /USER_ID/questionsでUSER_IDのQuestion一覧を取得
  • /QUESTION_ID/optionsで選擇肢を取得(この情報は/USER_ID/questionsに含まれているけど。。。) 
  • /QUESTION_OPTION_ID/votesで投票したユーザの一覧を取得 


試してみました、
require 'haml'
require 'koala'
require 'omniauth'
require 'rubygems'
require 'sinatra'

APP_ID = "212005055538084"
APP_SECRET = "hogehoge"

enable :sessions

use OmniAuth::Strategies::Facebook, APP_ID, APP_SECRET, :scope => 'user_questions' 

get '/auth/facebook/callback' do
  auth_hash = request.env["omniauth.auth"]
  uid = auth_hash["uid"]
  token = auth_hash["credentials"]["token"]
  graph = Koala::Facebook::API.new token

  result = graph.batch do |api|
    # 毎回:batch_args => ...て書くの気持ち悪いので特異メソッド定義
    def api.get_connects(id, conn, name="")
      self.get_connections(
        id, conn, {}, 
        :batch_args => { :name => name, :omit_response_on_success => false})
    end

    api.get_connects uid, "questions", "get-qs"
    api.get_connects "{result=get-qs:$.data[0].id}", "options", "get-ops"
    api.get_connects "{result=get-ops:$.data[0].id}", "votes"
    api.get_connects "{result=get-ops:$.data[1].id}", "votes"
    api.get_connects "{result=get-ops:$.data[2].id}", "votes"
  end

  haml '%div= result.to_s', :locals => { :result => result }

end
こんなjson返ってきました。
[
  [
    {
      "id": "170514669705292",
      "from": {
        "name": "Sinjin Ra",
        "id": "100002402797320"
      },
      "question": "今年の流行語は?",
      "created_time": "2011-10-30T12:25:51+0000",
      "updated_time": "2011-10-30T12:25:51+0000",
      "options": {
        "data": [
          {
            "id": "267486769961495",
            "from": {
              "name": "Sinjin Ra",
              "id": "100002402797320"
            },
            "name": "トゥットゥルー",
            "votes": 3,
            "created_time": "2011-10-30T12:25:50+0000"
          },
          {
            "id": "234349516624548",
            "from": {
              "name": "Sinjin Ra",
              "id": "100002402797320"
            },
            "name": "ドラマチックこそ、 人生です。",
            "votes": 2,
            "created_time": "2011-10-30T12:25:48+0000"
          },
          {
            "id": "309092772438842",
            "from": {
              "name": "Sinjin Ra",
              "id": "100002402797320"
            },
            "name": "ほびろん",
            "votes": 2,
            "created_time": "2011-10-30T12:25:49+0000"
          }
        ],
        "paging": { ...
..]

Herokuで試してみました、初Herokuです、
デプロイ(git push)したらアプリが動いているって画期的です、
…久々にClojure触りたくなってきました(HerokuはClojureもサポート)

0 件のコメント:

コメントを投稿