How to create a oAuth request using java? -


i need make connection viagogo website using oauth. referring documentation need create request similar following 1

using example in step 1a, means may generate signature base string looks following:  get&http%3a%2f%2fapi.viagogo.net%2fpublic%2fsimpleoauthaccessrequest&oauth_consumer_key%3dtestkey%26oauth_nonce%3dmyn0nc3%26oauth_signature_method%3dhmac-sha1%26oauth_timestamp%3d1292404912%26oauth_version%3d1.0%26scope%3dapi.public 

i using following code when comment lines 1,2 return unauthorized error, , when use them shows oauthservice.signrequest returns void.

tradekingapi.java

import org.scribe.builder.api.defaultapi10a; import org.scribe.model.token;  public class tradekingapi extends defaultapi10a {     @override     public string getrequesttokenendpoint() {         return "http://api.viagogo.net/public/simpleoauthaccessrequest";     }     @override     public string getaccesstokenendpoint() {         return "http://api.viagogo.net/public/simpleoauthaccessrequest";     }     @override     public string getauthorizationurl(token requesttoken) {         return "http://api.viagogo.net/public/simpleoauthaccessrequest";     } } 

main.java

import org.scribe.builder.servicebuilder; import org.scribe.model.oauthrequest; import org.scribe.model.response; import org.scribe.model.token; import org.scribe.model.verb; import org.scribe.oauth.oauthservice;  import api.tradekingapi; import org.scribe.builder.api.defaultapi10a; import org.scribe.model.oauthconstants; import org.scribe.oauth.oauthservice;     ........      oauthservice oauthservice = new servicebuilder()             .provider(tradekingapi.class)             .apikey("my consumer key")             .apisecret("my secret")             .scope("api.public")             .build();      long seconds = (system.currenttimemillis() / 1000);     system.out.println(">>>" + seconds);     string stseconds = seconds.tostring();     oauthrequest request = new oauthrequest(verb.get, "http://api.viagogo.net/public                                                                      /simpleoauthaccessrequest");      request.addoauthparameter(oauthconstants.consumer_key, "my consumer key");     request.addoauthparameter(oauthconstants.nonce, "myn0nc3");     request.addoauthparameter(oauthconstants.sign_method, "hmac-sha1");     request.addoauthparameter(oauthconstants.timestamp, seconds.tostring());     request.addoauthparameter(oauthconstants.version, "1.0");     request.addoauthparameter("scope", "api.public");   1  string signature = oauthservice.signrequest(oauthconstants.empty_token, request);   2  request.addoauthparameter(oauthconstants.signature,signature);     response response = request.send();     system.err.println(">>" + response.issuccessful());     system.err.println(">>" + response.getmessage());     system.err.println(">>" + response.getbody()); 

from understand viagogo public api access documentation, token in step 1, equivalent request token in complete oauth 1.0a "dance".

so, should able use scribe-java internal classes token without doing hand. difference in scribe, request sends callback url oauth server next step of oauth "dance".

as can't consumer account can make assumption here. let's have 2 scenarios :

scenario 1 : viagogo server tolerate parameter (i.e. call url)

so can go code

import org.scribe.builder.api.defaultapi10a; import org.scribe.model.token;  public class tradekingapi extends defaultapi10a {      @override     public verb getrequesttokenverb()     {       return verb.get;     }      @override     public string getrequesttokenendpoint() {         return "http://api.viagogo.net/public/simpleoauthaccessrequest";     }      @override     public string getaccesstokenendpoint() {         return "none";     }      @override     public string getauthorizationurl(token requesttoken) {         return "none";     } } 

then calling code :

oauthservice service = new servicebuilder()                             .provider(tradekingapi.class)                             .signaturetype(querystring)                             .apikey("my consumer key")                             .apisecret("my secret")                             .scope("api.public")                             .build();  token requesttoken = service.getrequesttoken();  //make api calls  oauthrequest request = new oauthrequest(verb.get,                        "http://api.viagogo.net/public/event/235"); service.signrequest(requesttoken, request); response response = request.send(); system.out.println(response.getbody()); 

but said, if viagogo security bit strict , refuses useless param oauth_callback, you'll need switch scenario 2

scenario 2 : build own oauthservice

in scenario have create new oauthservice avoid dealing oauthcallback parameter.

import org.scribe.builder.api.defaultapi10a; import org.scribe.model.*; import org.scribe.oauth.oauth10aserviceimpl;  import java.util.map;  public class oauth10aserviceforviagogo extends oauth10aserviceimpl {      private oauthconfig config;     private defaultapi10a api;      public oauth10aserviceforviagogo(defaultapi10a api, oauthconfig config) {         super(api, config);          this.api = api;         this.config = config;     }      private void addoauthparams(oauthrequest request, token token) {         request.addoauthparameter(oauthconstants.timestamp, api.gettimestampservice().gettimestampinseconds());         request.addoauthparameter(oauthconstants.nonce, api.gettimestampservice().getnonce());         request.addoauthparameter(oauthconstants.consumer_key, config.getapikey());         request.addoauthparameter(oauthconstants.sign_method, api.getsignatureservice().getsignaturemethod());         request.addoauthparameter(oauthconstants.version, getversion());         request.addoauthparameter(oauthconstants.scope, config.getscope());         request.addoauthparameter(oauthconstants.signature, getsignature(request, token));      }      private string getsignature(oauthrequest request, token token) {          string basestring = api.getbasestringextractor().extract(request);         string signature = api.getsignatureservice().getsignature(basestring, config.getapisecret(), token.getsecret());          return signature;     }      private void appendsignature(oauthrequest request) {         (map.entry<string, string> entry : request.getoauthparameters().entryset()) {             request.addquerystringparameter(entry.getkey(), entry.getvalue());         }     }      @override     public token getrequesttoken(requesttuner tuner) {         oauthrequest request = new oauthrequest(api.getrequesttokenverb(), api.getrequesttokenendpoint());          addoauthparams(request, oauthconstants.empty_token);         appendsignature(request);          response response = request.send(tuner);         string body = response.getbody();          return api.getrequesttokenextractor().extract(body);     } } 

trakingapi class different create oauth10aserviceforviagogo when calling createservice :

import org.scribe.builder.api.defaultapi10a; import org.scribe.model.token;  public class tradekingapi extends defaultapi10a {      @override     public oauthservice createservice(oauthconfig config)     {       return new oauth10aserviceforviagogo(this, config);     }      @override     public verb getrequesttokenverb()     {       return verb.get;     }      @override     public string getrequesttokenendpoint() {         return "http://api.viagogo.net/public/simpleoauthaccessrequest";     }      @override     public string getaccesstokenendpoint() {         return "none";     }      @override     public string getauthorizationurl(token requesttoken) {         return "none";     } } 

then calling code same :

    oauthservice service = new servicebuilder()                                 .provider(tradekingapi.class)                                 .signaturetype(querystring)                                 .apikey("my consumer key")                                 .apisecret("my secret")                                 .scope("api.public")                                 .build();      token requesttoken = service.getrequesttoken();      //make api calls      oauthrequest request = new oauthrequest(verb.get,                            "http://api.viagogo.net/public/event/235");     service.signrequest(requesttoken, request);     response response = request.send();     system.out.println(response.getbody()); 

i didn't test code because can't access consumer , secret key, should close need.


Comments

Popular posts from this blog

How to mention the localhost in android -

php - Calling a template part from a post -

c# - String.format() DateTime With Arabic culture -