2012-04-07 68 views
0

我得到用戶的默認信息,如名字和姓氏一個URL(網站標準的網址),但我想訪問User_id和smilar信息。我遵循「https://developer.linkedin.com/documents/profile-api」並執行如下代碼。 請幫幫我。我打了很多東西,但無法取得成功。如何獲取LinkedIn個人資料信息,然後默認信息Android

public class LinkedInTestActivity extends Activity { 

    public static final String CONSUMER_KEY = "XXXXXXXXXXXXXXXX"; 
    public static final String CONSUMER_SECRET = "XXXXXXXXXXXXXXXX";`enter code here` 
    LinkedInAccessToken accessToken; 
    public static final String APP_NAME = "LITest"; 
    public static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-linkedin"; 
    public static final String OAUTH_CALLBACK_HOST = "callback"; 
    public static final String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME+ "://" + OAUTH_CALLBACK_HOST; 

    final LinkedInOAuthService oAuthService = LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(CONSUMER_KEY,CONSUMER_SECRET); 
    final LinkedInApiClientFactory factory = LinkedInApiClientFactory.newInstance(CONSUMER_KEY, CONSUMER_SECRET); 
    LinkedInRequestToken liToken; 
    LinkedInApiClient client; 

    TextView tv = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.tv); 
     liToken = oAuthService.getOAuthRequestToken(OAUTH_CALLBACK_URL); 
     Log.e("liToken.getAuthorizationUrl()",""+liToken.getAuthorizationUrl()); 
     Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(liToken.getAuthorizationUrl())); 
     startActivity(i); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     String verifier = intent.getData().getQueryParameter("oauth_verifier"); 
     Log.e("Verifier-------->",""+verifier); 
     Log.e("liToken-------->",""+liToken); 
     accessToken = oAuthService.getOAuthAccessToken(liToken, verifier); 
     Log.e("accessToken-------->",""+accessToken.getToken()); 
     client = factory.createLinkedInApiClient(accessToken); 
     client.postNetworkUpdate("LinkedIn Android app test"); 
     //  Person p = client.getProfileByUrl("http://api.linkedin.com/v1/people/~", ProfileType.STANDARD); 

     Person p =client.getProfileForCurrentUser(); 
     p.getDateOfBirth(); 
     p.getApiStandardProfileRequest(); 
     p.getSiteStandardProfileRequest().getUrl(); 
     p.getHeadline(); 
     tv.setText(p.getLastName() + ", " + p.getFirstName()+ " DOB "+ p.getDateOfBirth()); 

     if (accessToken == null) { 
      throw new IllegalArgumentException("access token cannot be null."); 
     } 
     try { 
      URL url = new URL(LinkedInApiUrls.GET_CONNECTIONS_FOR_CURRENT_USER); 
      HttpURLConnection request = (HttpURLConnection) url.openConnection(); 

      final OAuthConsumer consumer = getOAuthConsumer(); 
      consumer.setTokenWithSecret(accessToken.getToken(), accessToken.getTokenSecret()); 
      consumer.sign(request); 
      request.connect(); 

      DefaultHttpClient httpclient = new DefaultHttpClient(); 
      HttpPost post = new HttpPost("http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry,headline,public-profile-url)"); 
      consumer.sign(post); // here need the consumer for sign in for post the share 
      org.apache.http.HttpResponse response = httpclient.execute(post); 
      Log.e("response",""+response.getHeaders(verifier).toString()); 

    } 

    protected OAuthConsumer getOAuthConsumer() { 
     DefaultOAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER 
_KEY, CONSUMER_SECRET); 
consumer.setMessageSigner(new HmacSha1MessageSigner()); 
consumer.setSigningStrategy(new AuthorizationHeaderSigningStrategy()); 
return consumer; 
    } 
} 
+0

這個問題有這麼多的代碼。你應該只有你的問題的相關部分。不要放這麼多,它刺激讀者。閱讀常見問題 – Siddharth 2012-12-07 07:12:41

回答

6

爲了得到更多用戶的詳細信息Person對象應使用如下,

請更換此,

Person p =client.getProfileForCurrentUser(); 

用,

Person profile = client.getProfileForCurrentUser(EnumSet.of(
       ProfileField.ID, ProfileField.FIRST_NAME, 
       ProfileField.LAST_NAME, ProfileField.HEADLINE, 
       ProfileField.INDUSTRY, ProfileField.PICTURE_URL, 
       ProfileField.DATE_OF_BIRTH, ProfileField.LOCATION_NAME, 
       ProfileField.MAIN_ADDRESS, ProfileField.LOCATION_COUNTRY)); 

就這樣你可以得到更詳細的信息。使用此配置對象,

 System.out.println("PersonID : " + profile.getId()); 
     System.out.println("Name : " + profile.getFirstName() + " " 
       + profile.getLastName()); 
     System.out.println("Headline : " + profile.getHeadline()); 
     System.out.println("Industry : " + profile.getIndustry()); 
     System.out.println("Picture : " + profile.getPictureUrl()); 
     DateOfBirth dateOfBirth = profile.getDateOfBirth(); 
     System.out.println("DateOfBirth : " + dateOfBirth.getDay() + "/" 
       + dateOfBirth.getMonth() + "/" + dateOfBirth.getYear()); 
     System.out.println("MAin Address : " + profile.getMainAddress()); 
     Location location = profile.getLocation(); 
     System.out.println("Location:" + location.getName() + " - " 
       + location.getCountry().getCode()); 
+1

如果我想獲得電子郵件地址,那麼我會做什麼? – duggu 2013-05-23 07:20:53

0

我打了使用這種方法的URL和它的作品對我來說: -

private OAuthConsumer getConsumer() { 
     OAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     consumer.setTokenWithSecret(accessToken.getToken(), accessToken.getTokenSecret()); 
     return consumer; 
    } 

} 
相關問題