This is Sequence of my previous post but now with yahoo
I have downloaded Scribe example source code to get Authenticated with yahoo. But the default example was not working. After doing some 4 hours of research i found out that the author had forgot to send a request to yahoo api’s to get GUID which is inturn used to get user profile data. I have modified code to fix that and here is the working code
package org.scribe.examples; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Scanner; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.scribe.builder.ServiceBuilder; import org.scribe.builder.api.YahooApi; import org.scribe.model.OAuthRequest; import org.scribe.model.Response; import org.scribe.model.Token; import org.scribe.model.Verb; import org.scribe.model.Verifier; import org.scribe.oauth.OAuthService; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class YahooExample { private static String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/GUID/profile?format=json"; public static void main(String[] args) { OAuthService service = new ServiceBuilder() .provider(YahooApi.class) .apiKey("dj0yJmk9TXZDWVpNVVdGaVFmJmQ9WVdrOWMweHZXbkZLTkhVbWNHbzlNVEl5TWprd05qUTJNZy0tJnM9Y29uc3VtZXJzZWNyZXQmeD0wMw--") .apiSecret("262be559f92a2be20c4c039419018f2b48cdfce9").build(); Scanner in = new Scanner(System.in); System.out.println("=== Yahoo's OAuth Workflow ==="); System.out.println(); // Obtain the Request Token System.out.println("Fetching the Request Token..."); Token requestToken = service.getRequestToken(); System.out.println("Got the Request Token!"); System.out.println(); System.out.println("Now go and authorize Scribe here:"); System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); Verifier verifier = new Verifier(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..."); Token accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + " )"); 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..."); OAuthRequest request1 = new OAuthRequest(Verb.GET, "http://social.yahooapis.com/v1/me/guid?format=xml"); service.signRequest(accessToken, request1); Response response1 = request1.send(); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response1.getCode()); System.out.println(response1.getBody()); PROTECTED_RESOURCE_URL = PROTECTED_RESOURCE_URL.replaceAll("GUID", parseYahooGUIDResposne(response1.getBody())); System.out.println("PROTECTED_RESOURCE_URL " + PROTECTED_RESOURCE_URL); // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); request.addHeader("realm", "yahooapis.com"); Response response = request.send(); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); System.out.println(); System.out .println("Thats it man! Go and build something awesome with Scribe! :)"); } /** * */ private static String parseYahooGUIDResposne(String data) { // get the factory DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { // Using factory get an instance of document builder DocumentBuilder db = dbf.newDocumentBuilder(); // parse using builder to get DOM representation of the XML file Document dom = db.parse(new ByteArrayInputStream(data.getBytes())); Element rootElement = dom.getDocumentElement(); return getGUID(rootElement); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (SAXException se) { se.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } return null; } /** * I take an employee element and read the values in, create * an Employee object and return it */ private static String getGUID(Element guidEl) { // for each <employee> element get text or int values of // name ,id, age and name String name = getTextValue(guidEl, "value"); // System.out.println("Name: "+name); return name; } /** * I take a xml element and the tag name, look for the tag and get * the text content * i.e for <?xml version="1.0" encoding="utf-8"?><guid xmlns="http://social.yahooapis.com/v1/schema.rng" * xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" * yahoo:uri="http://social.yahooapis.com/v1/me/guid"><value>4QWOBUCQHETEL34LSRUKJEV5W4</value></guid> xml snippet if * the Element points to employee node and tagName is 'name' I will return John */ private static String getTextValue(Element ele, String tagName) { String textVal = null; NodeList nl = ele.getElementsByTagName(tagName); if (nl != null && nl.getLength() > 0) { Element el = (Element) nl.item(0); textVal = el.getFirstChild().getNodeValue(); } return textVal; } /** * Calls getTextValue and returns a int value */ private static int getIntValue(Element ele, String tagName) { // in production application you would catch the exception return Integer.parseInt(getTextValue(ele, tagName)); } }
In Next post i would provide a sample webapp where OAuth is used to authenticate with Yahoo/Google/Facebook. Njoy networking
This helped me a lot, thank you very much!
Would you pls give me total project source code.
my source code does not work.
can somebody help me for web application
ニューバランス 574
With that code i am not able to get Private email address. please give me a sujesion how can i get user private email address.
I am having similar use case. Are you able to fetch emails? If yes, can you share your knowledge.
This information is worth everyone’s attention. When can I find out more?
Helpful in 2015, thanks.