你如何在抄写员的vimeo api上获得ticket_id

时间:2012-05-16 09:07:39

标签: java vimeo scribe

我正在尝试将视频上传到vimeo,我知道您需要ticket_id才能上传。

我认为无法弄清楚如何使用scribe获取此ticket_id。 有没有人有任何例子如何做到这一点?

提前致谢。

当我使用时:

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

这导致:

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

当我使用方法时:

request.addQuerystringParameter("method", "vimeo.videos.upload.getQuota");
一切正常。我尝试在vimeo.videos.upload.getQuota方法中添加一些伪api密钥。这也导致无效密钥。所以它不像方法vimeo.videos.upload.getQuota不需要api密钥。事实上它确实如果你没有提供有效的密钥它将无法正常工作。不知何故,当调用方法vimeo.videos.upload.getTicket时,使用与mehod getQuota相同的api密钥,我得到回复:

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

使用伪api密钥的完整代码:

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());
   }
}

1 个答案:

答案 0 :(得分:2)

获得配额后尝试获取门票。我从未尝试过没有配额的机票,因为他们的文档明确说明您需要在获得机票之前检查配额。看起来你只是评论你没有测试的东西。试试这个:

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...

   }
}

这是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;
  }

这是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;
}

这是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;
}