Hi Chris,
  Honestly, I can't say much about the most efficient way to read this type
of data in Java, but if you're bypassing the whole json-decoding step and
just manipulating the returned text using string operations, that's probably
as *fast* as it needs to be.

  However, most of the time you could reasonably decode the JSON structure
using a JSON parser - I'm sure if you search a bit, you'll find a decent one
to use for Java.  That would make finding the right field in the response a
bit simpler.

  If you want a library which handles error cases and outputs structured
data, I'd suggest checking out the Java client library:
http://code.google.com/p/opensocial-java-client/

~Arne



On Fri, Jul 31, 2009 at 11:38 AM, Chris <christoph.wor...@gmail.com> wrote:

>
> Thanks for the quick response, Arne.  I have done as you suggested,
> using the REST API and I was able to get the Viewer Id and Username.
> However, I think I am not extracting the JSON data in the most
> efficient manner.  I'm using a URLConnection with a BufferedReader,
> and then splitting the string into substrings delimited by the "-
> character.  My code follows:
>
>
>    public void doGet(HttpServletRequest req, HttpServletResponse
> resp)
>                throws IOException {
>
>        session = req.getSession(true);
>
>         String viewerId = "";
>        String userName = "";
>        Logging thisLog;
>                 String cookieName = "fcauth" + "15569016775267298719";
>                Cookie cookies [] = req.getCookies();
>
>                Cookie authCookie = null;
>
>                if (cookies != null) {
>                        for (int i=0; i<cookies.length; i++ ) {
>                                if (cookies[i].getName().equals(cookieName))
> {
>                                        authCookie = cookies[i];
>
>                                        String cookieStringValue =
> authCookie.getValue();
>                                        session.setAttribute("fcauth_token",
> cookieStringValue);
>                                         String restString = "
> http://www.google.com/friendconnect/api/
> people/@me/@self?fcauth=" + cookieStringValue;
>                                        String inputLine = "";
>
>                                        URL restUrl = new URL(restString);
>                                        URLConnection restCon =
> restUrl.openConnection();
>                                        BufferedReader restRead = new
> BufferedReader(
>                                                new
> InputStreamReader(restCon.getInputStream()));;
>
>                                        try {
>                                                inputLine =
> restRead.readLine();
>                                                String delim = "\"";
>                                                String[] tokens =
> inputLine.split(delim);
>                                                viewerId = tokens[5];
>                                                userName =
> tokens[tokens.length - 2];
>
>                                                thisLog = new Logging("New
> Member: " + userName + " " +
> viewerId, true);
>                                        } catch (Exception e) {
>                                                //
>                                        }
>
>                                        break;
>                                }
>                        }
>                }
>
>
> Is there a more efficient way of extracting the JSON data?
>
> Thanks again for the help,
> Chris
>
>
>
> On Jul 31, 3:29 am, Arne Roomann-Kurrik <api.kur...@google.com> wrote:
> > Hi Chris,
> >
> >   Since you're using the fcauth token, there's an implicit ID number
> > for the viewer - essentially, it means you can use "@me" for the value
> > of viewerid and a valid Person should be returned.
> >
> > ~Arne
> >
> > On Jul 30, 11:20 pm, Chris <christoph.wor...@gmail.com> wrote:
> >
> > > Hello,
> >
> > > I'm trying to hook GFC/OpenSocial into my AppEngine Java website, and
> > > I'm having trouble getting profile information to the server.  I
> > > haven't been able to find an AppEngine example in Java that I could
> > > understand, which speaks not to poor example code, but to the fact
> > > that I'm a bit clueless.
> >
> > > Here's what I'm trying to do:  When a user logs into my website using
> > > OpenSocial, I would like to take the display name and id and store it
> > > on the AppEngine server.  That way I have a server-side list of all my
> > > users.
> >
> > > So I have this snippet of code on my login screen:
> >
> > >                 <!-- Load the Google AJAX API Loader -->
> > >                 <script type="text/javascript" src="
> http://www.google.com/jsapi";></
> > > script>
> >
> > >                         <!-- Load the Google Friend Connect javascript
> library. -->
> > >                         <script type="text/javascript">
> > >                         google.load('friendconnect', '0.8');
> > >                         </script>
> >
> > >                         <!-- Initialize the Google Friend Connect
> OpenSocial API. -->
> > >                         <script type="text/javascript">
> > >                         google.friendconnect.container.setParentUrl('/'
> /* location of
> > > rpc_relay.html and canvas.html */);
> > >
> google.friendconnect.container.loadOpenSocialApi({
> > >                           site: '15569016775267298719',
> > >                           onload: function(securityToken) {
> > >                                 if (!window.timesloaded) {
> > >                                       window.timesloaded = 1;
> > >                                     } else {
> > >                                       window.timesloaded++;
> > >                                     }
> > >                                     if (window.timesloaded > 1) {
> > >                                         window.top.location.href =
> "/auth/";
> > >                                     }
> > >                             }
> > >                         });
> > >                 </script>
> >
> > > When the user logs in, it calls a servlet called "Login.java", which
> > > contains the following:
> >
> > > public class Login extends HttpServlet {
> > >         private HttpSession session = null;
> >
> > >     public void doGet(HttpServletRequest req, HttpServletResponse
> > > resp)
> > >                 throws IOException {
> >
> > >         session = req.getSession(true);
> >
> > >                 String cookieName = "fcauth" + "15569016775267298719";
> > >                 Cookie cookies [] = req.getCookies();
> >
> > >                 Cookie authCookie = null;
> >
> > >                 if (cookies != null) {
> > >                         for (int i=0; i<cookies.length; i++ ) {
> > >                                 if
> (cookies[i].getName().equals(cookieName)) {
> > >                                         authCookie = cookies[i];
> >
> > >                                         String cookieStringValue =
> authCookie.getValue();
> > >
> session.setAttribute("fcauth_token", cookieStringValue);
> > >                                         break;
> > >                                 }
> > >                         }
> > >                 }
> >
> > >                 getProfileData(resp);
> > >                 resp.sendRedirect("/");
> > >     }
> >
> > > The servlet finds the fcauth cookie, sends the info to a function that
> > > gets the profile data, and the redirects back to the homepage.  The
> > > problem lies in the getProfileData function because I don't quite
> > > understand how to get the viewer's id number and display name.  Here
> > > is the function where that should happen:
> >
> > >     public void getProfileData(HttpServletResponse resp) throws
> > > IOException {
> >
> > >                 Logging thisLog;
> >
> > >                 String consumerKey = "*********************";
> //  Found this on the
> > > GFC page
> > >                 String secretKey = "*********************";
> //  Also found this on
> > > the GFC page
> > >                 String viewerid = ????????
>          //  Not sure how to get the viewer's
> > > id
> >
> > >                 OpenSocialProvider provider =
> OpenSocialProvider.valueOf
> > > ("FRIENDCONNECT");
> > >                 OpenSocialClient client = new
> OpenSocialClient(provider);
> >
> > >
> client.setProperty(OpenSocialClient.Property.CONSUMER_SECRET,
> > > secretKey);
> > >
> client.setProperty(OpenSocialClient.Property.CONSUMER_KEY,
> > > consumerKey);
> > >                 client.setProperty(OpenSocialClient.Property.VIEWER_ID,
> viewerid);
> >
> > >                 try {
> > >                         OpenSocialPerson viewer = client.fetchPerson();
> > >                         thisLog = new Logging("New Member: " +
> viewer.getDisplayName() + "
> > > " + viewer.getId());
> >
> > >                         //  Insert code here to make persistent on the
> server
> >
> > >                 } catch (Exception e) {
> >
> > >                 }
> > >     }
> >
> > > }
> >
> > > I think if I could get the viewer id everything else should work.  But
> > > it is unclear how to do that.
> >
> > > Thanks for any help you can give,
> > > Chris
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"OpenSocial Application Development" group.
To post to this group, send email to opensocial-api@googlegroups.com
To unsubscribe from this group, send email to 
opensocial-api+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/opensocial-api?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to