oauth_google.erl 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. -module(oauth_google).
  2. -compile(export_all).
  3. -include_lib("xmerl/include/xmerl.hrl").
  4. % cf. http://groups.google.com/group/oauth/msg/0cf50121f946a889
  5. test() ->
  6. SignatureMethod = {"RSA-SHA1", "test/rsa_private_key.pem"},
  7. get_request_token(oauth_consumer:new("weitu.googlepages.com", "x", SignatureMethod)).
  8. get_request_token(Consumer) ->
  9. RequestTokenURL = "https://www.google.com/accounts/OAuthGetRequestToken",
  10. Params = [{scope, "http://www.google.com/m8/feeds"}],
  11. Response = oauth:get(RequestTokenURL, Consumer, Params),
  12. authorize_token(Consumer, tee("RequestTokenPair: ", oauth_token_pair:new(Response))).
  13. authorize_token(Consumer, RequestTokenPair={RequestToken, _}) ->
  14. AuthorizeTokenURL = "https://www.google.com/accounts/OAuthAuthorizeToken",
  15. Params = [{oauth_token, RequestToken}],
  16. Prompt = fmt:sprintf("Please authorize at %s?%s~n", [AuthorizeTokenURL, oauth_params:to_string(Params)]),
  17. io:get_line(Prompt),
  18. get_access_token(Consumer, RequestTokenPair).
  19. get_access_token(Consumer, RequestTokenPair) ->
  20. AccessTokenURL = "https://www.google.com/accounts/OAuthGetAccessToken",
  21. AccessTokenPair = tee("AccessTokenPair: ", oauth_token_pair:new(oauth:get(AccessTokenURL, Consumer, RequestTokenPair))),
  22. {ok, {_, _, Data}} = oauth:get("http://www.google.com/m8/feeds/contacts/default/base", Consumer, AccessTokenPair),
  23. {XML, _} = xmerl_scan:string(Data),
  24. Titles = [Node#xmlText.value || Node <- xmerl_xpath:string("//feed/entry/title/text()", XML)],
  25. lists:foreach(fun(Title) -> io:format("~s~n", [Title]) end, Titles).
  26. tee(Tag, X) ->
  27. io:format("~s: ~p~n~n", [Tag, X]), X.