2012-03-12 3 views
2

Примечание: вы можете мне помочь, просто направляя меня в место, которое хорошо объясняет, как взаимодействовать с веб-службами. Но помощь по этой конкретной проблеме будет принята с благодарностью!OAuth Vimeo with Scribe (Java)

Мне очень трудно понять, как работает OAuth. Я пытаюсь разработать настольное приложение, которое загрузит кучу видео на учетные записи на Vimeo. Я пробовал немного поработать с Scribe API и его examples. К сожалению, у Scribe нет примера Vimeo, поэтому я пытался изменить пример Facebook, чтобы он работал на Vimeo. Там очень мало информации о том, как все это работает (что я смог 1: найти, 2: понять). Вот что у меня есть, насколько код и ошибок:

public class VimeoTest 
{ 
    private static final String NETWORK_NAME = "Vimeo"; 
    private static final Token EMPTY_TOKEN = null; 

    public static void main(String[] args) 
    { 
    // Replace these with your own api key and secret 
    String apiKey = "MYAPIKEY"; 
    String apiSecret = "MYAPISECRET"; 
    OAuthService service = new ServiceBuilder() 
            .provider(VimeoApi.class) 
            .apiKey(apiKey) 
            .apiSecret(apiSecret) 
            .build(); 
    Scanner in = new Scanner(System.in); 

    System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); 
    System.out.println(); 
    OAuthRequest orequest = new OAuthRequest(Verb.GET, "http://vimeo.com/api/rest/v2"); 
    orequest.addQuerystringParameter("method", "vimeo.test.null"); 
    Response send = orequest.send(); 
    System.out.println(send.getBody()); 

    // Obtain the Authorization URL 
    System.out.println("Fetching the Authorization URL..."); 
    Token requestToken = service.getRequestToken(); 

    //Breaks on the line above. 
    //But I think it's because the orequest.send() returned a 100 error code 

    String authorizationUrl = service.getAuthorizationUrl(requestToken); 
    System.out.println("Got the Authorization URL!"); 
    System.out.println("Now go and authorize Scribe here:"); 

    //I do NOT want to have to do this. Is there any other way I can have this authorize without going to a web browser to do this? 

    System.out.println(authorizationUrl); 
    System.out.println("And paste the authorization code here"); 
    System.out.print(">>"); 
    Verifier verifier = new Verifier(in.nextLine()); 
    System.out.println(); 

Вот вывод и ошибки:

=== Vimeo's OAuth Workflow === 

1.0 
<?xml version="1.0" encoding="utf-8"?> 
<rsp generated_in="0.0069" stat="fail"> 
    <err code="100" expl="The API key passed was not valid" msg="Invalid API Key" /> 
</rsp> 
Fetching the Authorization URL... 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64 
    at org.scribe.services.HMACSha1SignatureService.doSign(HMACSha1SignatureService.java:47) 
    at org.scribe.services.HMACSha1SignatureService.getSignature(HMACSha1SignatureService.java:33) 
    at org.scribe.oauth.OAuth10aServiceImpl.getSignature(OAuth10aServiceImpl.java:118) 
    at org.scribe.oauth.OAuth10aServiceImpl.addOAuthParams(OAuth10aServiceImpl.java:63) 
    at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:43) 
    at autouploadermodel.VimeoTest.main(VimeoTest.java:38) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Base64 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 6 more 
Java Result: 1 

Во всяком случае, я буду держать пари, что это очень просто, но я просто не понимаю, как для взаимодействия с веб-службами. Спасибо за любую помощь!

ответ

4

Вам нужно включить apache commons codec на вашем пути к классам

+0

Ну это странно. Сегодня утром я попытался включить кодек apache commons (я действительно чувствую себя глупым, потому что я не уверен, как это сделать, но я нашел банку для версии 1.6 и просто включил ее в качестве библиотеки), и я импортирую org.apache.commons .codec.net. *; '. Затем я запустил его, и он довел меня до места, где мне нужно авторизовать приложение в Vimeo. Я копирую и вставляю код, который Vimeo дал мне и получил нулевой указатель в этой строке: «Token accessToken = service.getAccessToken (EMPTY_TOKEN, verifier);' 'EMPTY_TOKEN' объявлен как« null », поэтому это имеет смысл, но это то, что пример имел ... Я просто не понимаю. – kentcdodds

+0

О, и еще одна странная вещь, если я удалю импорт кодека, он отлично работает ... Это странная часть, о которой я говорил. Так что, в основном, мой код выглядит точно так же, как вчера, когда я получал ошибку, но на этот раз он еще больше ... Мой API-ключ был одобрен несколько дней назад, поэтому я не могу объяснить, почему это так, но .. . Да. Спасибо за помощь! – kentcdodds

+0

Просто запустил его, и он все еще говорит, что мой ключ API недействителен, но он получает URL-адрес авторизации. Это не имеет никакого смысла для меня. – kentcdodds