Domanda

I am trying to upload video to vimeo and I understand that you need the ticket_id in order to be able to upload.

The think is I can not figure out how to get this ticket_id by using scribe. Does anyone have any example how to do this?

Thanks in advance.

When I use:

OAuthRequest request = new OAuthRequest(Verb.GET, "http://vimeo.com/api/rest/v2");
request.addQuerystringParameter("method", "vimeo.videos.upload.getTicket");

this results in:

<err code="401" expl="The consumer key passed was not valid." msg="Invalid consumer key"/>

When I use method:

request.addQuerystringParameter("method", "vimeo.videos.upload.getQuota");

everything works fine. I tried putting some fake api key in the vimeo.videos.upload.getQuota method. That also resulted in invalid key. So it is not like method vimeo.videos.upload.getQuota does not need the api key. In fact it does and if you don't provide the valid key it wil not work. Somehow when calling method vimeo.videos.upload.getTicket, with the same api key that works for the mehod getQuota, I get response:

<err code="401" expl="The consumer key passed was not valid." msg="Invalid consumer key"/>

full code with fake api keys:

public class VimeoServiceConcept {

public static void main(String[] args) {

    String apikey="api key";
    String apisecret="secret";
    String accessToken="access token";
    String accessTokenSecret="access token secret";



    OAuthService service = new ServiceBuilder()
    .provider(VimeoApi.class)
    .apiKey(apikey)
    .apiSecret(apisecret)
    .build();

    Token token = new Token(accessToken, accessTokenSecret);

    OAuthRequest request = new OAuthRequest(Verb.GET, "http://vimeo.com/api/rest/v2");
//  request.addQuerystringParameter("method", "vimeo.videos.upload.getQuota");
    request.addQuerystringParameter("format", "xml");
    request.addQuerystringParameter("method", "vimeo.videos.upload.getTicket");
    request.addQuerystringParameter("upload_method", "post");
    service.signRequest(token, request);        
    System.out.println(request.getCompleteUrl());
    Response response = request.send();

     System.out.println("Got it! Lets see what we found...");
     System.out.println(response.getHeader("code"));
     System.out.println(response.getCode());
     System.out.println(response.getBody());
   }
}
È stato utile?

Soluzione

Try getting the ticket after you get the quota. I have never tried getting the ticket without the quota first because their documentation explicitly states you need to check quota before you get the ticket. It looks like you just comment out what you're not testing. Try this instead:

public class VimeoServiceConcept {

public static void main(String[] args) {

    String apikey="api key";
    String apisecret="secret";
    String accessToken="access token";
    String accessTokenSecret="access token secret";

    OAuthService service = new ServiceBuilder().provider(VimeoApi.class).apiKey(apiKey).apiSecret(apiSecret).build();

    OAuthRequest request;
    Response response;

    accessToken = new Token("your_token", "your_tokens_secret");

    accessToken = checkToken(vimeoAPIURL, accessToken, service);
    if (accessToken == null) {
      return;
    }

    // Get Quota
    request = new OAuthRequest(Verb.GET, vimeoAPIURL);
    request.addQuerystringParameter("method", "vimeo.videos.upload.getQuota");
    signAndSendToVimeo(request, "getQuota", true);

    // Get Ticket
    request = new OAuthRequest(Verb.GET, vimeoAPIURL);
    request.addQuerystringParameter("method", "vimeo.videos.upload.getTicket");
    request.addQuerystringParameter("upload_method", "streaming");
    response = signAndSendToVimeo(request, "getTicket", true);
    //... the rest of your code...

   }
}

Here's checkToken:

/**
  * Checks the token to make sure it's still valid. If not, it pops up a dialog asking the user to
  * authenticate.
  */
  private static Token checkToken(String vimeoAPIURL, Token vimeoToken, OAuthService vimeoService) {
    if (vimeoToken == null) {
      vimeoToken = getNewToken(vimeoService);
    } else {
      OAuthRequest request = new OAuthRequest(Verb.GET, vimeoAPIURL);
      request.addQuerystringParameter("method", "vimeo.oauth.checkAccessToken");
      Response response = signAndSendToVimeo(request, "checkAccessToken", true);
      if (response.isSuccessful()
              && (response.getCode() != 200 || response.getBody().contains("<err code=\"302\"")
              || response.getBody().contains("<err code=\"401\""))) {
        vimeoToken = getNewToken(vimeoService);
      }
    }
    return vimeoToken;
  }

Here's getNewToken:

/**
* Gets authorization URL, pops up a dialog asking the user to authenticate with the url and the user
* returns the authorization code
*
* @param service
* @return
*/
private static Token getNewToken(OAuthService service) {
  // Obtain the Authorization URL
  Token requestToken = service.getRequestToken();
  String authorizationUrl = service.getAuthorizationUrl(requestToken);
  do {
    String code = JOptionPane.showInputDialog("The token for the account (whatever)" + newline
            + "is either not set or is no longer valid." + newline
            + "Please go to the URL below and authorize this application." + newline
            + "Paste the code you're given on top of the URL here and click \'OK\'" + newline
            + "(click the 'x' or input the letter 'q' to cancel." + newline
            + "If you input an invalid code, I'll keep popping up).", authorizationUrl + "&permission=delete");
    if (code == null) {
      return null;
    }
    Verifier verifier = new Verifier(code);
    // Trade the Request Token and Verfier for the Access Token
    System.out.println("Trading the Request Token for an Access Token...");
    try {
      Token token = service.getAccessToken(requestToken, verifier);
      System.out.println(token); //Use this output to copy the token into your code so you don't have to do this over and over.
      return token;
    } catch (OAuthException ex) {
      int choice = JOptionPane.showConfirmDialog(null, "There was an OAuthException" + newline
              + ex + newline
              + "Would you like to try again?", "OAuthException", JOptionPane.YES_NO_OPTION);
      if (choice == JOptionPane.NO_OPTION) {
        break;
      }
    }
  } while (true);
  return null;
}

Here's signAndSend:

/**
* Signs the request and sends it. Returns the response.
*
* @param request
* @return response
*/
public static Response signAndSendToVimeo(OAuthRequest request, String description, boolean printBody) throws org.scribe.exceptions.OAuthException {
  System.out.println(newline + newline
          + "Signing " + description + " request:"
          + ((printBody && !request.getBodyContents().isEmpty()) ? newline + "\tBody Contents:" + request.getBodyContents() : "")
          + ((!request.getHeaders().isEmpty()) ? newline + "\tHeaders: " + request.getHeaders() : ""));
  service.signRequest(accessToken, request);
  printRequest(request, description);
  Response response = request.send();
  printResponse(response, description, printBody);
  return response;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top