Чтобы опубликовать обновление в LinkedIn через ваше приложение, созданное с помощью Play 2.3.x, выполните следующие действия (в этом сообщении шаг за шагом подведены итоги проделанной работы).

1) Создайте приложение LinkedIn (если у вас его еще нет)

Нажмите здесь — Краткое руководство для разработчиков LinkedIn и создайте приложение. Введите все данные, включая URL-адрес сайта. URL-адрес сайта может быть чем-то вроде http://www.example.com (но это должен быть действительный URL-адрес сайта). Кроме того, выберите параметр rw_nus в разделе Пользовательское соглашение OAuth (в противном случае вы не сможете публиковать обновления в LinkedIn).

После того, как вы сохраните это приложение, вы получите ключ API и секретный ключ. Запишите этот ключ API и секретный ключ. Мы будем использовать их в нашем коде.

2) Если вы используете Play, добавьте ключ API, секретный ключ и URL-адрес контекста (URL-адрес обратного вызова) в файл application.conf .

[code language="scala"]
linkedin.key=‹your_key›
linkedin.secret=‹your_secret_key›
contextURL="localhost:9000
[/code]

3) Загрузите изображение для входа в LinkedIn из linkedin.png и сохраните его в папке public/images приложения.

4) Добавьте следующую зависимость в build.sbt (или Build.scala для Play 2.1.x или более ранних версий)

[code language="scala"]
"org.scribe" % "scribe" % "1.3.5"
[/code]

5) Добавьте следующее в файл routes в папке conf

[code language="scala"]
GET /linkedin/login controllers.LinkedInAPIController.linkedinLogin
GET /linkedin/callback controllers.LinkedInAPIController.linkedinCallback
[/code]

6) Теперь давайте создадим LinkedInAPIController.scala для настройки ключа API, секретного ключа и URL-адреса обратного вызова. Мы также будем использовать этот файл scala для запроса токена доступа из LinkedIn и публикации обновления в LinkedIn.

[code language="scala"]
контроллеры пакетов

import org.scribe.builder.ServiceBuilder
import org.scribe.builder.api.LinkedInApi
import org.scribe.model.OAuthRequest
import org.scribe.model.Response
импортировать org.scribe.model.Token
импортировать org.scribe.model.Verifier
импортировать org.scribe.model.Verb
импортировать org.scribe.oauth.OAuthService
импортировать играть .api.Logger
import play.api.Play
import play.api.mvc.Action
import play.api.mvc.Controller

объект LinkedInAPIController расширяет контроллер {

val POST_SUCCESS = 201
val apiKey: String = Play.current.configuration.getString(“linkedin.key”).get
val apiSecret: String = Play.current.configuration.getString(“linkedin.secret ").get
val server = Play.current.configuration.getString("contextURL").get
var requestToken: Token = _

/**
* Получить запрос OAuthService
*/

def getOAuthService: OAuthService = {
new ServiceBuilder()
.provider(classOf[LinkedInApi])
.apiKey(apiKey)
.apiSecret(apiSecret)
.scope («rw_nus»)
.callback(сервер + «/linkedin/callback»)
.build();
}

def linkedinLogin: Action[play.api.mvc.AnyContent] = Action {
try {
requestToken = getOAuthService.getRequestToken
val authUrl: String = getOAuthService.getAuthorizationUrl(requestToken)
Redirect(authUrl)
} catch {
case ex: Exception =› {
Logger.error("Ошибка при входе через LinkedIn — " + ex)
Ok(views.html .redirectMain("сбой", сервер, "Невозможно опубликовать сообщение в LinkedIn"))
}
}
}

def linkedinCallback: Action[play.api.mvc.AnyContent] = Action { неявный запрос =›
try {
getVerifier(request.queryString) match {
case None =› Ok(views. html.redirectMain("сбой", сервер, "Невозможно опубликовать сообщение в LinkedIn"))
case Some(oauth_verifier) ​​=›
val verifier: Verifier = new Verifier(oauth_verifier)
val accessToken : Token = getOAuthService.getAccessToken(requestToken, verifier);
val oAuthRequest: OAuthRequest = new OAuthRequest(Verb.POST, “http://api.linkedin.com/v1/people/~/shares)

// Публикация сообщения в LinkedIn
val message = «Поздравляем! Вы разместили свое первое сообщение в LinkedIn через LinkedIn API Scribe»
val url = «http://www.knoldus.com/home.knol
val xml = «‹?xml version=\» 1.0\” кодировка=\”UTF-8\”?› \n” +
“‹поделиться› \n” +
“ ‹комментарий›” + сообщение +
“‹/комментарий › \n» +
«‹content› \n» +
«‹отправленный-url›» + URL +
«‹/отправленный-url› \n» +
«‹/content› \n» +
«‹видимость› \n» +
«‹код›кому-либо‹/код› \n» +
«‹/видимость› \n» +
«‹/поделиться›\n»

//добавляем полезную нагрузку xml в запрос
oAuthRequest.addPayload(xml)
getOAuthService.signRequest(accessToken, oAuthRequest)
oAuthRequest.addHeader("Content-Type", "text/xml")< br /> val ответ: Response = oAuthRequest.send
response.getCode match {
case POST_SUCCESS =›
Ok(views.html.redirectMain("успех", сервер, "Спасибо, что поделились вместе с другими в LinkedIn))
case _ =›
Ok(views.html.redirectMain("сбой", сервер, "Невозможно опубликовать сообщение в LinkedIn"))
}
}
} catch {
case ex: Exception =› {
Ok(views.html.redirectMain («сбой», сервер, «Невозможно опубликовать сообщение в LinkedIn»))
}
}
}

def getVerifier(queryString: Map[String, Seq[String]]): Option[String] = {
val seq = queryString.get(“oauth_verifier”).getOrElse(Seq())
seq. isEmpty match {
case true =› None
case false =› seq.headOption
}
}

}
[/код]

7) Теперь давайте создадим шаблон redirectMain.scala.html, который будет отображать статус нажатия на ссылку «Поделиться в LinkedIn».

[code language="scala"]
@(status:String, redirectUrl: String, response: String)

@main("Поделиться в LinkedIn"){

‹script type="text/javascript"›
function close_win(redirectUrl) {
window.opener.location=redirectUrl
window.opener.focus();
window.close ();
}
$(function() {
if ('@status' == "success") {
alert("@response")
close_win('@redirectUrl');
} else {
alert(“@response”)
close_win('@redirectUrl');
}
});
‹/скрипт›

} [/код]

Итак, вот как мы можем публиковать обновления в LinkedIn через Scribe с помощью Scala & Play.