Skip to content

Instantly share code, notes, and snippets.

@thomaswp
Created June 3, 2016 16:52
Show Gist options
  • Save thomaswp/0679268328f90bec4c4042d0dde25d73 to your computer and use it in GitHub Desktop.
Save thomaswp/0679268328f90bec4c4042d0dde25d73 to your computer and use it in GitHub Desktop.

This is an example of how to use ScribeJava to access the Khan Academy API using OAuth v1a.

Note, because Khan's default redirect will not display the verifier token directly, after logging in you have to find it in the redirect's URL parameters.

import java.util.Scanner;
import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.builder.api.DefaultApi10a;
import com.github.scribejava.core.model.OAuth1AccessToken;
import com.github.scribejava.core.model.OAuth1RequestToken;
import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Response;
import com.github.scribejava.core.model.Verb;
import com.github.scribejava.core.oauth.OAuth10aService;
public class KhanAcademyAccess {
private static final String PROTECTED_RESOURCE_URL = "https://www.khanacademy.org/api/v1/user";
public static void main(String... args) {
final OAuth10aService service = new ServiceBuilder()
.apiKey("######")
.apiSecret("######")
.callback("http://example.com/")
.build(KAApi.instance());
final Scanner in = new Scanner(System.in, "UTF-8");
System.out.println("=== Foursquare's OAuth Workflow ===");
System.out.println();
// Obtain the Request Token
System.out.println("Fetching the Request Token...");
final OAuth1RequestToken requestToken = service.getRequestToken();
System.out.println("Got the Request Token!");
System.out.println();
System.out.println("Now go and authorize ScribeJava here:");
System.out.println(service.getAuthorizationUrl(requestToken));
System.out.println("And paste the URL parameter 'oauth_verifier=' here");
System.out.print(">>");
final String oauthVerifier = 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...");
final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier);
System.out.println("Got the Access Token!");
System.out.println("(if your curious it looks like this: " + accessToken
+ ", 'rawResponse'='" + accessToken.getRawResponse() + "')");
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...");
final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service);
service.signRequest(accessToken, request);
final 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 ScribeJava! :)");
in.close();
}
static class KAApi extends DefaultApi10a {
public static KAApi instance() {
return new KAApi();
}
@Override
public String getAccessTokenEndpoint() {
return "https://www.khanacademy.org/api/auth2/access_token";
}
@Override
public String getAuthorizationUrl(OAuth1RequestToken token) {
return " https://www.khanacademy.org/api/auth2/authorize?oauth_token=" + token.getToken();
}
@Override
public String getRequestTokenEndpoint() {
return "https://www.khanacademy.org/api/auth2/request_token";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment