2011-05-12 2 views
1

Play 프레임 워크에서 작업 중이며 야후 연락처를 가져 오려고합니다.재생 프레임 워크를 통해 내 페이지로 야후 연락처를 가져 오는 데 도움이 필요합니다.

yahoo 인증 API를 지워 access_token 및 guid를 가져 왔습니다.

그렇기 때문에 http://social.yahooapis.com/v1/user/ {guid}/연락처를 auth 매개 변수로 사용하여 연락처를 가져 오려고하면 내 페이지와 로그에 연결 시간 초과 예외가 발생합니다.

나도 같은 접촉 URL을 붙여

브라우저의 코드를 통해 생성되는, 나뿐만 signature_invalid 무엇입니까 내가, 내가 디바이스가 oauth_signature를 만들 노트 야후 API에 언급 된 모든 거즈를 따랐다 희망

하지만, 아직도 나는 그것을 얻지 못하고있다.

아무에게도 도움을 줄 수 있습니까? 서명을 생성하기위한

컨트롤러 코드 -

공용 클래스 야후 {복사하고 OAuth를 헤더를 통과하지 않기 때문에 브라우저에 붙여 넣을 때

private static String token = ""; 
private static String currentUrl = ""; 
private static String verifier = ""; 
private static String tokenSecret = ""; 
private static String accessToken = ""; 
private static String yahooGuid = ""; 


public Yahoo(){ 
} 

/** 
* Requests access to the Yahoo API for request token. 
* @return True if the request is successful, false if not. 
*/ 

public static Yahoo authorize() { 
    Session session = Session.current(); 
    if(session.contains("authorized") && session.get("authorized").equals("0")){ 
     session.put("authorized", "1"); 
     String url = getRequestTokenUrl(); 

     WS.WSRequest request = WS.url(url); 
     Logger.info("Yahoo: Create request to get request token'%s'", request.url); 

     WS.HttpResponse response = request.get(); 
     Logger.info("Yahoo: Token response status is %d", response.getStatus()); 

     if (response.getStatus() == 200){ 
      String[] pairs = response.getString().split("&"); 
      String[] tokenSecret = pairs[1].split("="); 

      Yahoo.tokenSecret = tokenSecret[1]; 

      for (String pair : pairs) { 
       String[] kv = pair.split("="); 
       if (kv.length != 2) { 
        break; 
       } else { 
        if (kv[0].equals("oauth_token")) { 
         Yahoo.token = kv[1]; 
        } 
       } 
      } 
      Logger.info("level 1 - yahoo token = %s, secret = %s",Yahoo.token, Yahoo.tokenSecret); 
     } 
    } 
    return null; 
} 


/** 
* Requests access to the Yahoo API for access token. 
* @return True if the request is successful, false if not. 
*/ 

public static Yahoo getAccessToken(){ 
    String url = getAccessTokenUrl(); 
    WS.WSRequest request = WS.url(url); 
    Logger.info("Yahoo: Create request to get Access token'%s'", request.url); 

    WS.HttpResponse response = request.get(); 
    Logger.info("Yahoo: Token response status is %d", response.getStatus()); 

    if (response.getStatus() == 200){ 
     String[] pairs = response.getString().split("&"); 
     String[] guidPair = pairs[5].split("="); 
     String[] tokenSecret = pairs[1].split("="); 
     Yahoo.tokenSecret = tokenSecret[1]; 
     yahooGuid = guidPair[1]; 
     for (String pair : pairs) { 
      String[] kv = pair.split("="); 
      if (kv.length != 2) { 
       break; 
      } else { 
       if (kv[0].equals("oauth_token")) { 
        Yahoo.accessToken = kv[1]; 
       } 
      } 
     } 
     Logger.info("level 3 - yahoo token = %s, secret = %s, guid = %s",Yahoo.accessToken, Yahoo.tokenSecret, Yahoo.yahooGuid); 
    } 
    return null; 
} 

/** 
* Requests Signature 
* @return String 
*/ 

public static String getBaseSignature(){ 

    String signature = ""; 
    String data = generateBaseString(); 
    String key = keyString(); 
    Logger.info("key : %s",key); 
    try { 
     SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); 
     Mac mac = Mac.getInstance("HmacSHA1"); 
     mac.init(signingKey); 
     byte[] rawHmac = mac.doFinal(data.getBytes()); 
     signature = new String(Base64.encode(rawHmac)); 
     signature = java.net.URLEncoder.encode(signature, "ISO-8859-1"); 
     Logger.info("Signature=%s", signature); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return signature; 
} 

/** 
* Requests access to the Yahoo API for getting contacts. 
* 
*/ 

public static void getContacts(){ 
    String url = getContactUrl(); 
    WS.WSRequest request = WS.url(url); 
    Logger.info("Yahoo: Create request to get Contacts '%s'", request.url); 

    WS.HttpResponse response = request.get(); 
    Logger.info("Yahoo: Token response status is %d", response.getStatus()); 
    if (response.getStatus() == 200){ 
     String[] pairs = response.getString().split("&"); 
     for(int i=0;i<pairs.length;i++){ 
      Logger.info("%s", pairs[i]); 
     } 
    }else { 

     //errors contains a JSON response 
     JsonParser parser = new JsonParser(); 
     JsonObject message = parser.parse(response.getString()).getAsJsonObject(); 
     Logger.error("Yahoo: Could not get token (status %d): %s", response.getStatus(), message.get("message").getAsString()); 
    }  
} 

public static String generateBaseString(){ 
    String baseString = getBaseUrl(); 
    Logger.info("token secret : %s",tokenSecret); 
    Logger.info("base url : %s",baseString); 
    Logger.info("callback url : %s",getCallBackUrl().toString().split("oauth_token")[0].replace('?', '\0')); 
    String returnString = ""; 
    try { 
     returnString = java.net.URLEncoder.encode("GET", "ISO-8859-1") + "&" + java.net.URLEncoder.encode("http://social.yahooapis.com/v1/user/"+yahooGuid+"/contacts", "ISO-8859-1") + "&" + java.net.URLEncoder.encode(baseString, "ISO-8859-1"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Logger.info("Yahoo: Base string: %s",returnString); 
    return returnString; 
} 

public static String keyString(){ 
    String consumerSecret = encodeString(getConsumerSecret()); 
    String tokenSec = encodeString(tokenSecret); 
    String keyString = consumerSecret + encodeString("&") + tokenSec; 
    return keyString; 
} 

public static String encodeString(String msgString){ 
    String msg = ""; 
    try { 
     msg = java.net.URLEncoder.encode(msgString.toString(), "ISO-8859-1"); 
     Logger.info("encode=%s", msg); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return msg; 
} 
+0

당신이 컨트롤러에 코드를 붙여 넣을 수 있습니다 http://playframework.info, 펠리페 감사하십시오? – lobster1234

+0

물론 ... 여기 있습니다. – Sai

+1

oauth 모듈 http://www.playframework.org/modules/oauth-1.0/home을 직접 사용해보고 싶을 수도 있습니다. – lobster1234

답변

0

당신은 잘못된 서명을 받고있다. http://geeks.aretotally.in/projects/play-framework-linkedin-module

당신은 소스 코드에 대한 설명과 링크를 찾을 수 있습니다 :

내가 강력하게 당신이 할 수있는 lib 디렉토리를 사용하는 것이 좋습니다, 나는 링크드 인과 똑같은 일을했다.

희망이 있습니다.

http://geeks.aretotally.inhttp://mashup.fm

+0

고마워 펠리페. 나는 lib를 사용하도록 전환했고 현재 작동 중이다. – Sai

관련 문제