Статьи

API-интерфейсы Grails OAuth и LinkedIn


Еще в ноябре я писал о
том, как общаться с API-интерфейсами LinkedIn с помощью GWT . Неделю спустя я
понял, как это сделать с Grails, и
добавил
патч для плагина grails-oauth.

С тех пор несколько человек спросили, как я это сделал. Поскольку код говорит громче, чем слова, я потратил некоторое время и 1) проверил, что плагин oauth работает, как ожидалось, и 2) создал пример приложения, демонстрирующего функциональность. Вы можете найти результаты в моей ветке grails-oauth на GitHub . Вы также можете просмотреть пример в Интернете .

Ниже приведено краткое руководство, объясняющее, как интегрировать LinkedIn в ваше приложение Grails.

  1. Скачайте и установите Grails 1.1.2.
  2. Запустите grails create-app, чтобы создать ваше приложение.
  3. Добавьте следующее в конец 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.

  4. Загрузите плагин oauth, распакуйте его и соберите, используя пакет-плагин grails . Установите его в свой проект, используя путь / плагин grails install-plugin .
  5. Добавьте ссылку на GSP, из которого вы хотите вызвать аутентификацию LinkedIn:
    <g:oauthLink consumer='linkedin' returnTo="[controller:'profile']">
    Login with LinkedIn
    </g:oauthLink>
  6. Создайте 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)
    }
    }
  7. Создайте 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>
  8. Запустите ваше приложение, используя 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