Могу ли я разработать настольное приложение для LinkedIn, используя Java? - PullRequest
3 голосов
/ 04 июня 2011

Мне было интересно, смогу ли я разработать настольное приложение для LinkedIn, используя Java. Я знаю, что это легко сделать в виде веб-приложения, но возможно ли это полностью для настольного компьютера? Я посмотрел на API-интерфейсы linkedin и Java Wrapper для LinkedIn . Код был объяснен для веб-приложения. Как мне управлять этим в java-приложении для настольных компьютеров, особенно в части авторизации? oAuth с помощью Swing?

Пожалуйста, направьте меня в правильном направлении.

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

После очень долгого времени тестирования с oAuth (с моими собственными обертками) я остановился на Scribe, который является Java Wrapper для почти всех механизмов oAuth.Чтобы включить Linkedin в клиент для настольных ПК, как предложил Адам Трахтенберг (еще раз спасибо), была использована опция oob, т. Е. После входа в систему в нашем клиенте должен быть введен код, сгенерированный с помощью linkedin, чтобы его можно было проверить по запрошеннымURL-адрес.Надеюсь, это кому-нибудь пригодится.

public class LinkedInExample
    {
  private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)";

  public static void main(String[] args) throws IOException
  {
    OAuthService service = new ServiceBuilder()
                                .provider(LinkedInApi.class)
                                .apiKey("YourApiKey")
                                .apiSecret("YourApiSecret")
                                .build();
    Scanner in = new Scanner(System.in);
    //BareBonesBrowserLaunch.openURL("www.google.com");
    System.out.println("=== LinkedIn's OAuth Workflow ===");
    System.out.println();

    // Obtain the Request Token
    System.out.println("Fetching the Request Token...");
    Token requestToken = service.getRequestToken();
    System.out.println("Got the Request Token!");
    System.out.println();

    System.out.println("Now go and authorize Scribe here:");
    String authURL = service.getAuthorizationUrl(requestToken);
    System.out.println(authURL);
    BareBonesBrowserLaunch.openURL("www.google.com");
    System.out.println("And paste the verifier here");
    System.out.print(">>");
    Verifier verifier = new Verifier(in.nextLine());
    System.out.println();

    // Trade the Request Token and Verfier for the Access Token
    System.out.println("Trading the Request Token for an Access Token...");
    Token accessToken = service.getAccessToken(requestToken, verifier);
    System.out.println("Got the Access Token!");
    System.out.println("(if your curious it looks like this: " + accessToken + " )");
    System.out.println();

    // Now let's go and ask for a protected resource!
    System.out.println("Now we're going to access a protected resource...");
    OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
    service.signRequest(accessToken, request);
    Response response = request.send();
    System.out.println("Got it! Lets see what we found...");
    System.out.println();
    System.out.println(response.getBody());

    System.out.println();
    System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
  }

}

BareBonesBrowserLaunch используется для запуска браузера по умолчанию с URL-адресом Linkedin для запроса токена в большинстве ОС.Поскольку часть Desktop недоступна в Java 1.5, BareBonesBrowserLaunch решает проблему.

public class BareBonesBrowserLaunch {

   static final String[] browsers = { "google-chrome", "firefox", "opera",
      "epiphany", "konqueror", "conkeror", "midori", "kazehakase", "mozilla" };
   static final String errMsg = "Error attempting to launch web browser";

   public static void openURL(String url) {
      try {  //attempt to use Desktop library from JDK 1.6+
         Class<?> d = Class.forName("java.awt.Desktop");
         d.getDeclaredMethod("browse", new Class[] {java.net.URI.class}).invoke(
            d.getDeclaredMethod("getDesktop").invoke(null),
            new Object[] {java.net.URI.create(url)});
         //above code mimicks:  java.awt.Desktop.getDesktop().browse()
         }
      catch (Exception ignore) {  //library not available or failed
         String osName = System.getProperty("os.name");
         try {
            if (osName.startsWith("Mac OS")) {
               Class.forName("com.apple.eio.FileManager").getDeclaredMethod(
                  "openURL", new Class[] {String.class}).invoke(null,
                  new Object[] {url});
               }
            else if (osName.startsWith("Windows"))
               Runtime.getRuntime().exec(
                  "rundll32 url.dll,FileProtocolHandler " + url);
            else { //assume Unix or Linux
               String browser = null;
               for (String b : browsers)
                  if (browser == null && Runtime.getRuntime().exec(new String[]
                        {"which", b}).getInputStream().read() != -1)
                     Runtime.getRuntime().exec(new String[] {browser = b, url});
               if (browser == null)
                  throw new Exception(Arrays.toString(browsers));
               }
            }
         catch (Exception e) {
            JOptionPane.showMessageDialog(null, errMsg + "\n" + e.toString());
            }
         }
      }

   }

LinkedInExample в основном берется из этой библиотеки - https://github.com/fernandezpablo85/scribe-java/downloads Нене забудьте включить jar Scribe jar и apache commons-codec (для Base64)

2 голосов
/ 04 июня 2011

Да, вы можете играть с API и использовать веб-сервисы, упакованные в API LinkedIn.

Однако весь процесс должен быть реализован с использованием HTTP-запросов и т. Д., А также путем анализа ответа.сделать это на JForm.

РЕДАКТИРОВАТЬ: Ах!Вы полностью независимы :-) благодаря XML ..

0 голосов
/ 07 июня 2011

Если вы не можете понять, как перенаправить пользователя в веб-браузер и сделать так, чтобы браузер перенаправлял обратно в ваше приложение, проверьте параметр «вне границ» (он же «oob») для обратного вызова OAuth. После авторизации вашего приложения участник будет отображать код, который они могут ввести в ваше приложение Java.

...