Я пытаюсь получить доступ к данным в профиле LinkedIn, используя его API.
Сначала я следовал за Документом JSPAI LinkedIn на https://developer-programs.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens в PHP. Поэтому я начал переводить код с PHP на Java с помощью Scribe.
Затем я нашел этот пример на Github, который выглядит как то, что я сделал: https://github.com/fernandezpablo85/TokenExchangeSample/blob/master/src/main/java/com/linkedin/oauth/ExchangeService.java
и я получил эту строку в конце после авторизации и обмена куки:
oauth_token = 75—4ff2c506-37e2-4b77-927f-c28c5f511762&oauth_token_secret = c73110b2-0dce-43bd-8537-8c8fb4fd5290&oauth_expires_in = 5183975&oauth_authorization_expires_in = 5183975
В PHP перечисленный код помогает получить пользовательские данные, как описано в $ url:
// go to town, fetch the user's profile
$url = 'http://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline)';
$oauth->fetch($url, array(), OAUTH_HTTP_METHOD_GET, array('x-li-format' => 'json')); // JSON!
$profile = json_decode($oauth->getLastResponse());
print "$profile->firstName $profile->lastName is $profile->headline.";
Таким образом, код работает и возвращает данные. В версии Java мне интересно, как использовать возвращенные токены.
Но это не работает.
Я нашел решение: получив ключи Oauth10a, вы должны использовать их в новом запросе, указав формат json.
OAuthService service = new ServiceBuilder()
.apiKey(APIKEY)
.apiSecret(SECRETKEY)
.provider(LinkedInApi.class)
.build();
OAuthRequest oAuthRequestData = new OAuthRequest(Verb.GET, DATAENDPOINT);
oAuthRequestData.addHeader("x-li-format", "json");
Token accessToken = new Token(oauth_token, oauth_token_secret);
service.signRequest(accessToken, oAuthRequestData);
Response oAuthResponse = oAuthRequestData.send();
System.outt.println(oAuthResponse.getBody());
Других решений пока нет …