This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

GFC: serverside integration: part 1

doc lacking...
Added by about 3 years ago

{{{}}}

Ref.: http://code.google.com/apis/friendconnect/serverside_integration.html
Ref.: http://code.google.com/p/opensocial-ruby-client/source/browse/trunk/lib/opensocial/

Ngay trong mã nguồn connection.rb (r36), ta thấy không có container nào dành Google Friend Connect. Vì thế, ta phải định nghĩa một container riêng. Thêm nữa, OpenSocial.rb hỗ trợ các phương pháp chứng thực AUTH_STAUTH_HMAC, thì trong đó, kiểu AUTH_ST là phù hợp với việc dùng site authentication cookie trong mô tả ở tài liệu của Google. Ngặt một nỗi, việc quan sát định nghĩa của hàm service_uri trong connection.rb cho thấy tiếp cận bằng fcauth cũng không hợp lệ, bởi vì địa chỉ dùng chứng thực được xác lập bởi uri , trong khi đó, ta phải dùng fcauth lấy từ cookies.

Vì thế, dưới đây, ta phải định nghĩa g_container, giả lập cách chứng thực AUTH_ST, và sau đó đánh lừa OpenSocial bằng cách xác lập các thông tin giả :rest => "", và :st => "from_viettug.org". (Thật là kỳ quái.) Để ý rằng, fcauth_value được xác nhận sau khi người dùng đăng nhập với giao diện của google friendconnect.

 1 site_id = "xxx" 
 2 fcauth_value = cookies["fcauth#{site_id}"]
 3 unless fcauth.nil?
 4   rpc_uri = "http://www.google.com/friendconnect/api/people/@viewer/@self?fcauth=" + fcauth_value
 5   g_container = { :endpoint => rpc_uri, :rest => "" }
 6   c = OpenSocial::Connection.new(:container => g_container,
 7           :auth => OpenSocial::Connection::AUTH_ST,
 8           :st => "from_viettug.org")
 9   r = OpenSocial::FetchPersonRequest.new(c)
10   puts r.send.inspect
11 end

Kết quả thu được ở đây là đối tượng Person, có thể thu được từ chuỗi json lấy được nhờ curl:

http://www.google.com/friendconnect/api/people/@viewer/@self?fcauth=fcauth_value

Như vậy, công việc có thể đơn giản hơn mà không cần tới OpenSocial:

  1. Lấy cookie mà google tạo ra
  2. Dùng net/http để đề fetch kết quả (OpenSocial làm điều này và có kiểm tra lỗi)
  3. Đọc ra các giá trị cần thiết từ kết quả json thu được

Comments