Еще в ноябре я писал о
том, как общаться с API-интерфейсами LinkedIn с помощью GWT . Неделю спустя я
понял, как это сделать с Grails, и
добавил патч для плагина grails-oauth.
С тех пор несколько человек спросили, как я это сделал. Поскольку код говорит громче, чем слова, я потратил некоторое время и 1) проверил, что плагин oauth работает, как ожидалось, и 2) создал пример приложения, демонстрирующего функциональность. Вы можете найти результаты в моей ветке grails-oauth на GitHub . Вы также можете просмотреть пример в Интернете .
Ниже приведено краткое руководство, объясняющее, как интегрировать LinkedIn в ваше приложение Grails.
- Скачайте и установите Grails 1.1.2.
- Запустите grails create-app, чтобы создать ваше приложение.
- Добавьте следующее в конец grails-app / conf / Config.groovy :
oauth {
linkedin {
requestTokenUrl="https://api.linkedin.com/uas/oauth/requestToken"
accessTokenUrl="https://api.linkedin.com/uas/oauth/accessToken"
authUrl="https://api.linkedin.com/uas/oauth/authorize"
consumer.key="XXX"
consumer.secret="XXX"
}
}Вы можете получить свои customer.key и consumer.secret по адресу https://www.linkedin.com/secure/developer . Убедитесь, что для проверки URL перенаправления OAuth установлено значение http: // localhost: 8080 / {your.app.name} / oauth / callback.
- Загрузите плагин oauth, распакуйте его и соберите, используя пакет-плагин grails . Установите его в свой проект, используя путь / плагин grails install-plugin .
- Добавьте ссылку на GSP, из которого вы хотите вызвать аутентификацию LinkedIn:
<g:oauthLink consumer='linkedin' returnTo="[controller:'profile']">
Login with LinkedIn
</g:oauthLink> - Создайте grails-app / controllers / ProfileController.groovy для доступа к вашему профилю LinkedIn.
class ProfileController {
def apiUrl = "http://api.linkedin.com/v1/people/~"
def oauthService
def index = {
if (session.oauthToken == null) {
redirect(uri:"/")
}
if (params?.apiUrl) apiUrl = params.apiUrl
def response = oauthService.accessResource(
apiUrl, 'linkedin', [key:session.oauthToken.key, secret:session.oauthToken.secret], 'GET')
render(view: 'index', model: [profileXML: response, apiUrl: apiUrl])
}
def change = {
if (params?.apiUrl) {
println("Setting api url to " + params.apiUrl)
apiUrl = params.apiUrl
}
redirect(action:index,params:params)
}
} - Создайте grails-app / views / profile / index.gsp, чтобы отобразить полученный профиль и разрешить последующие вызовы API.
<html>
<head><title>Your Profile</title></head>
<body>
<a class="home" href="${createLinkTo(dir:'')}">Home</a>
<g:hasOauthError>
<div class="errors">
<g:renderOauthError/>
</div>
</g:hasOauthError>
<g:form url="[action:'change',controller:'profile']" method="get">
Your LinkedIn Profile:
<textarea id="payload" style="width: 100%; height: 50%; color: red">${profileXML}</textarea>
<p>
<g:textField name="apiUrl" value="${apiUrl}" size="100%"/>
<br/>
<g:submitButton name="send" value="Send Request"/>
</p>
</g:form>
</body>
</html> - Запустите ваше приложение, используя Grails Run-App и наслаждайтесь.
Как упоминалось ранее, вы можете скачать grails-oauth-example или посмотреть его онлайн .
Одно из улучшений, которое я хотел бы видеть, — это упростить синтаксический анализ XML в объект Profile, так же, как это делает гем gem для Rails.
Если вам интересно узнать больше о LinkedIn и OAuth, я советую вам ознакомиться с презентацией Тейлора Синглетари LinkedIn OAuth: Zero to Hero .
Обновление: я обновил плагин oauth, чтобы он был обратно совместим с OAuth 1.0, и добавил приложение Twitter в пример приложения, чтобы доказать это. Если вы видите «Невозможно вызвать метод remove () для нулевого объекта», это, вероятно, вызвано тем, что ваш URL-адрес перенаправления указывает на приложение в другом домене.
От http://raibledesigns.com/rd/entry/grails_oauth_and_linkedin_apis