Далее представлен пример работы с XING-API из десктопного приложения (WinForms).
Документация по XING-API:https://dev.xing.com/docs/resources.
Итак, для начала использования API необходимо прежде всего получить ключ и секретное слово на следующей страничке: https://dev.xing.com/applications.
Использование API предполагает придерживания специального протокола OAuth (https://dev.xing.com/docs/authentication). Как это делается можно увидеть в коде. Особенностью десктопного приложения является то, что верификация пользователя выполняется “вручную” - пользователь должен передать в приложение специальный код, который отображается после его авторизации в браузере. В веб-приложении этот код можно вычитать из возвращаемых параметров запроса программно.
Ресурсы, которые я использовал:
- .Net SDK for XING API
https://netforxing.codeplex.com/ (странная реализация, но подсмотрел как использовать DotNetOpenAuth)
- Wie man die XING-API nutzt (на немецком, описан процесс использования OAuth в XING)
http://www.heise.de/ix/artikel/Sozial-integriert-1892413.html
- API Explorer für die XING REST-API (программа для тестирования API)
https://www.cybertribe.de/druid/de/ApiExplorer
В приложении понадобятся следующие пакеты библиотек:
DotNetOpenAuth OAuth 1.0(a) Consumer:
и RestSharp:
Диалог ввода использовал из сборки "Microsoft.VisualBasic".
Интерфейс приложения:
По нажатию на кнопку "Login" (button1_Click) выводится URL, который необходимо ввести в браузере для авторизации пользователя и получения кода верификации. Этот код необходимо ввести в последующем диалоге ввода. После логина можно вызывать методы API, например получение информации о пользователе - кнопка "Get Data" (button2_Click).
Итак, код:
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
String consumerKey = "<your key>";
String consumerSecret = "<your secret>";
String access_token = null;
String access_token_secret = null;
String verifyPIN = null;
private void button1_Click(object sender, EventArgs e) {
A();
B();
verifyPIN = Microsoft.VisualBasic.Interaction.InputBox("PIN: ",
"Input Data",
"", 0, 0);
C();
}
private void button2_Click(object sender, EventArgs e) {
String userID = Microsoft.VisualBasic.Interaction.InputBox("User ID",
"Input Data",
"me", 0, 0);
D(userID);
}
// -----------------
// -----------------
// Get Authorization Token
void A() {
RestClient client = new RestClient("https://api.xing.com");
client.Authenticator = OAuth1Authenticator.ForRequestToken(
consumerKey,
consumerSecret,
"oob");
RestRequest request = new RestRequest("v1/request_token", Method.POST);
RestResponse response = (RestResponse)client.Execute(request);
var qs = HttpUtility.ParseQueryString(response.Content);
access_token = qs["oauth_token"];
access_token_secret = qs["oauth_token_secret"];
}
// Use Token to get the verifier.
void B() {
RestClient client = new RestClient("https://api.xing.com");
RestRequest request = new RestRequest("/v1/authorize");
request.AddParameter("oauth_token", access_token);
var url = client.BuildUri(request).ToString();
// use this url to get PIN Code
MessageBox.Show(url);
}
// Use Access Token and Verifier to get the last Token needed
void C() {
RestClient client = new RestClient("https://api.xing.com");
client.Authenticator = OAuth1Authenticator.ForAccessToken(
consumerKey,
consumerSecret,
access_token,
access_token_secret,
verifyPIN);
RestRequest request = new RestRequest("v1/access_token", Method.POST);
RestResponse response = (RestResponse)client.Execute(request);
// Change tokens to the correct Access Tokens
// now we have all Tokens in our TokenManager
var qs = HttpUtility.ParseQueryString(response.Content);
access_token = qs["oauth_token"];
access_token_secret = qs["oauth_token_secret"];
}
// Get Data
void D(String userID) {
RestClient client = new RestClient("https://api.xing.com");
client.Authenticator = OAuth1Authenticator.ForProtectedResource(
consumerKey,
consumerSecret,
access_token,
access_token_secret);
RestRequest request = new RestRequest("/v1/users/" + userID);
RestResponse response = (RestResponse)client.Execute(request);
//Verify Result
//Assert.NotNull(response);
//Assert.Equal(HttpStatusCode.OK, response.StatusCode);
MessageBox.Show(response.Content);
}
}