package org.krakenapps.socialweb.facebook.graphapi; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.krakenapps.socialweb.facebook.jsonobject.fieldelement.Restrictions; public class Facebook { // regular formula is https://graph.facebook.com/ + id + /object + ?access_token=YOUR_ACCESS_TOKEN String graph = "https://graph.facebook.com/"; String search = "https://graph.facebook.com/search?"; String fql = graph+"/fql?q="; String accessToken; String callbackURL; public Facebook( String token , String URL){ accessToken = token; callbackURL = URL; } public JSONObject getBasicInfo(String userId, String objectId) throws IOException, JSONException{ URL url = new URL(graph+userId+"/"+objectId+"?access_token="+accessToken); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer bf = new StringBuffer(); while(true){ String tmp = br.readLine(); if(tmp == null) break; // System.out.println(tmp); bf.append(tmp); } return new JSONObject(bf.toString()); } public JSONObject getBasicInfo(String userId) throws IOException, JSONException{ URL url = new URL(graph+userId+"?access_token="+accessToken); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer me = new StringBuffer(); while(true){ String tmp = br.readLine(); if(tmp == null) break; // System.out.println(tmp); me.append(tmp); } return new JSONObject(me.toString()); } /* * use following getSpecificInfo function like this Facebook fb = new Facebook(); * fb.getSpecificInfo(Album.getId()+"/"+Album.Connection.CONN_photos); * fb.getSpecificInfo(Album.getId()+"/"+Album.Connection.CONN_likes); * Album is object parsed json * */ public ArrayList<JSONArray> getSpecificInfo(String objectId) throws Exception{ ArrayList<JSONArray> objectArray = new ArrayList<JSONArray>(); JSONObject tmpObject; String url =graph+objectId+"?access_token="+accessToken; tmpObject = getPaging(url); objectArray.add((JSONArray)tmpObject.get("data")); if(tmpObject.containsKey("paging")){ while(((JSONObject)tmpObject.get("paging")).containsKey("next")){ tmpObject = getPaging( ((JSONObject)tmpObject.get("paging")).getString("next") ); if(((JSONArray)tmpObject.get("data")).length() >0){ objectArray.add((JSONArray)tmpObject.get("data")); } } } return objectArray; } public ArrayList<JSONArray> getSpecificInfo(String objectId , String connection) throws Exception{ ArrayList<JSONArray> objectArray = new ArrayList<JSONArray>(); JSONObject tmpObject; String url =graph+objectId+"/"+connection+"?access_token="+accessToken; tmpObject = getPaging(url); objectArray.add((JSONArray)tmpObject.get("data")); if(tmpObject.containsKey("paging")){ while(((JSONObject)tmpObject.get("paging")).containsKey("next")){ tmpObject = getPaging( ((JSONObject)tmpObject.get("paging")).getString("next") ); if(((JSONArray)tmpObject.get("data")).length() >0){ objectArray.add((JSONArray)tmpObject.get("data")); } } } return objectArray; } public JSONObject getPaging(String nextUrl) throws Exception{ URL url = new URL(nextUrl); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer bf = new StringBuffer(); while(true){ String tmp = br.readLine(); if(tmp == null) break; bf.append(tmp); } return new JSONObject(bf.toString()); } /*designed searching method*/ public JSONObject getSearchResult(String searchCommend , String types) throws IOException, JSONException{ URL url = new URL(graph+"q="+searchCommend+"&type="+types +"?access_token="+accessToken); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer bf = new StringBuffer(); while(true){ String tmp = br.readLine(); if(tmp == null) break; bf.append(tmp); } return new JSONObject(bf.toString()); } //TODO fql design public JSONObject getFqlOnlinePresence(String userId) throws IOException, JSONException{ URL url = new URL(fql+"SELECT%20online_presence%20FROM%20user%20WHERE%20uid="+userId+"&access_token="+accessToken); URLConnection conn = url.openConnection(); conn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer bf = new StringBuffer(); while(true){ String tmp = br.readLine(); if(tmp == null) break; bf.append(tmp); } return new JSONObject(bf.toString()); } //getter and setter public String getGraph() { return graph; } public void setGraph(String graph) { this.graph = graph; } public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public String getCallbackURL() { return callbackURL; } public void setCallbackURL(String callbackURL) { this.callbackURL = callbackURL; } }