CLEiM
Cross Lingual Education in Medicine
 All Classes Namespaces Files Functions Variables
CallFBSym.java
Go to the documentation of this file.
00001 
00005 package com.uem.gsi.cleim.scl;
00006 
00007 import java.util.ArrayList;
00008 import java.util.List;
00009 
00010 import org.apache.commons.httpclient.HttpClient;
00011 import org.apache.commons.httpclient.methods.GetMethod;
00012 
00013 import com.freebase.api.Freebase;
00014 import com.freebase.json.JSON;
00015 import com.uem.gsi.cleim.util.Constants;
00016 
00017 import static com.freebase.json.JSON.o;
00018 import static com.freebase.json.JSON.a;
00019 
00020 public class CallFBSym {
00021         private String symptom;
00022         private JSON query;
00023         private JSON envelope;
00024         private int limit=10;
00025         private int page=0;
00026         private int count=0;
00027         private int totalpages=0;
00028         private List<String> lIDList;
00029         private List<String> lConcept;
00030         private List<String> lArticle;
00031         private List<String> lImage;
00032         private List<String> lFBUrl;
00033         private List<String> lSideEf;
00034         private List<String> lSympOf;
00035 
00036         public CallFBSym(String psymptom) {
00037                 this.symptom=psymptom;
00038                 this.query=o();
00039                 this.envelope=o();
00040                 lIDList = new ArrayList<String>();
00041                 lConcept = new ArrayList<String>();
00042         lArticle = new ArrayList<String>();
00043         lImage = new ArrayList<String>();
00044         lFBUrl = new ArrayList<String>();
00045         lSideEf = new ArrayList<String>();
00046         lSympOf = new ArrayList<String>();
00047   }
00048 
00049         private JSON doQuery(){
00050                 Freebase freebase = Freebase.getFreebase();
00051                 JSON mqlJsonResult = freebase.mqlread(this.query,this.envelope,null);
00052                 return mqlJsonResult;
00053         }
00054         
00055         public void queryFB(){
00056                 //Count
00057                 this.query = o(
00058                                 "type", "/medicine/symptom", "name~=", "*"+this.symptom+"*", 
00059                                 "return" , "count"
00060                         );
00061                 JSON json=doQuery();
00062                 this.count=new Integer(json.get("result").toString());
00063                 totalpages=new Integer(count/limit);
00064                 
00065                 //Search Result
00066                 this.envelope=o("page", this.page,"cursor", true);
00067                 this.query = a(o(
00068                                 "type", "/medicine/symptom", "name~=", "*"+this.symptom+"*", "id", null, "name", null, "limit", this.limit, "sort","name", 
00069                                 "/common/topic/article",a(o("guid", null, "limit", 1, "optional", true)),
00070                                 "/common/topic/image",a(o("id", null, "limit", 1, "optional", true)))
00071                 );
00072                 JSON jsontemp=doQuery();
00073                 json =jsontemp.get("result");
00074                 int size=json.array().size();
00075                 for (int i=0;i<size;i++){
00076                         String id=(String) json.get(i).get("id").value();
00077                         lIDList.add(id);
00078                         lConcept.add((String) json.get(i).get("name").value());
00079                         //get raw data if exists
00080                         lArticle.add(
00081                                 (json.get(i).get("/common/topic/article").array().size()>0)?
00082                                         doRawQuery("http://api.freebase.com/api/trans/raw/"+
00083                                         ((String)json.get(i).get("/common/topic/article").get(0).get("guid").value()).substring(1)):"");
00084                         lImage.add(
00085                                 (json.get(i).get("/common/topic/image").array().size()>0)?
00086                                         "http://api.freebase.com/api/trans/image_thumb"+
00087                                         json.get(i).get("/common/topic/image").get(0).get("id").value():
00088                                                 "");
00089                         lFBUrl.add(Constants.FREEBASE_VIEW+id);
00090                         
00091                         //Semantic detail
00092                         queryFBDetail(id);
00093                         JSON jsonDetail=doQuery().get("result");
00094                         //Side effect of
00095                         String sSideEf="";
00096                         for (int k=0;k<jsonDetail.get("side_effect_of").array().size();k++){
00097                                 sSideEf+=(sSideEf.equals(""))?"":"<span> | </span>";
00098                                 sSideEf+="<a href=\"treatment.jsp?term="+
00099                                 jsonDetail.get("side_effect_of").get(k).get("name").value()+"\">"+
00100                                 jsonDetail.get("side_effect_of").get(k).get("name").value()+"</a>\r\n";
00101                         }
00102                         lSideEf.add(sSideEf);
00103                         //Symptom of
00104                         String sSympOf="";
00105                         for (int k=0;k<jsonDetail.get("symptom_of").array().size();k++){
00106                                 sSympOf+=(sSympOf.equals(""))?"":"<span> | </span>";
00107                                 sSympOf+="<a href=\"disease.jsp?term="+
00108                                 jsonDetail.get("symptom_of").get(k).get("name").value()+"\">"+
00109                                 jsonDetail.get("symptom_of").get(k).get("name").value()+"</a>\r\n";
00110                         }
00111                         lSympOf.add(sSympOf);
00112                 }
00113                 
00114         }
00115         private void queryFBDetail(String pid){
00116                 this.query = o(
00117                                 "type", "/medicine/symptom","id", pid,"name", null,
00118         "side_effect_of", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/medical_treatment")),
00119         "symptom_of", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/disease"))
00120                 );
00121         }
00122         private String doRawQuery(String url){
00123                 String sSource="";
00124                 try {
00125           HttpClient client = new HttpClient();
00126       GetMethod method=new GetMethod(url);
00127       int statusCode = client.executeMethod(method);
00128                         if( statusCode != -1 ) {
00129                           sSource = method.getResponseBodyAsString();
00130                           method.releaseConnection();
00131                         }else{
00132                                 sSource+=statusCode;
00133                         }
00134     }
00135     catch( Exception e ) {
00136         sSource+=e.toString();
00137     }
00138                 return sSource;
00139         }
00140         public void setPage(int pPage){
00141                 this.page=pPage;
00142         }
00143         public int getCount(){
00144         return this.count;
00145   }
00146         public int getTotalPages(){
00147         return this.totalpages;
00148   }
00149         public List<String> getIDLists(){
00150         return this.lIDList;
00151   }
00152         public List<String> getConcepts(){
00153         return this.lConcept;
00154   }
00155   public List<String> getArticles(){
00156         return this.lArticle;
00157   }
00158   public List<String> getImages(){
00159         return this.lImage;
00160   }
00161   public List<String> getFBUrls(){
00162         return this.lFBUrl;
00163   }
00164   public List<String> getSideEfs(){
00165         return this.lSideEf;
00166   }
00167   public List<String> getSympOfs(){
00168         return this.lSympOf;
00169   }
00170         public static void main (String[] args){
00171                 CallFBSym h=new CallFBSym("cancer");
00172                 h.setPage(0);
00173                 h.queryFB();
00174                 System.out.println(h.getCount());
00175                 for (int i=0;i<h.getIDLists().size();i++){
00176                         System.out.println("ID: "+h.getIDLists().get(i));
00177                         System.out.println("CONCEPT: "+h.getConcepts().get(i));
00178                         System.out.println("ARTICLE: "+h.getArticles().get(i));
00179                         System.out.println("IMAGE: "+h.getImages().get(i));
00180                         System.out.println("FREEBASE URL: "+h.getFBUrls().get(i));
00181                         System.out.println("SIDE EFFECT OF: "+h.getSideEfs().get(i));
00182                         System.out.println("SYMPTOM OF: "+h.getSympOfs().get(i));
00183                 }
00184         }
00185         
00186 }