CLEiM
Cross Lingual Education in Medicine
|
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 CallFBDis { 00021 private String disease; 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> lSymptom; 00034 private List<String> lRisk; 00035 private List<String> lTreatment; 00036 public CallFBDis(String pdisease) { 00037 this.disease=pdisease; 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 lSymptom = new ArrayList<String>(); 00046 lRisk = new ArrayList<String>(); 00047 lTreatment = new ArrayList<String>(); 00048 } 00049 00050 private JSON doQuery(){ 00051 Freebase freebase = Freebase.getFreebase(); 00052 JSON mqlJsonResult = freebase.mqlread(this.query,this.envelope,null); 00053 return mqlJsonResult; 00054 } 00055 00056 public void queryFB(){ 00057 //Count 00058 this.query = o( 00059 "type", "/medicine/disease", "name~=", "*"+this.disease+"*", 00060 "return" , "count" 00061 ); 00062 JSON json=doQuery(); 00063 this.count=new Integer(json.get("result").toString()); 00064 totalpages=new Integer(count/limit); 00065 00066 //Search Result 00067 this.envelope=o("page", this.page,"cursor", true); 00068 this.query = a( o( 00069 "type", "/medicine/disease", "name~=", "*"+this.disease+"*", "id", null, "name", null, "limit", this.limit,"sort","name", 00070 "/common/topic/article",a(o("guid", null, "limit", 1, "optional", true)), 00071 "/common/topic/image",a(o("id", null, "limit", 1, "optional", true))) 00072 ); 00073 JSON jsontemp=doQuery(); 00074 json =jsontemp.get("result"); 00075 int size=json.array().size(); 00076 for (int i=0;i<size;i++){ 00077 String id=(String) json.get(i).get("id").value(); 00078 lIDList.add(id); 00079 lConcept.add((String) json.get(i).get("name").value()); 00080 //get raw data if exists 00081 lArticle.add( 00082 (json.get(i).get("/common/topic/article").array().size()>0)? 00083 doRawQuery("http://api.freebase.com/api/trans/raw/"+ 00084 ((String)json.get(i).get("/common/topic/article").get(0).get("guid").value()).substring(1)):""); 00085 lImage.add( 00086 (json.get(i).get("/common/topic/image").array().size()>0)? 00087 "http://api.freebase.com/api/trans/image_thumb"+ 00088 json.get(i).get("/common/topic/image").get(0).get("id").value(): 00089 ""); 00090 lFBUrl.add(Constants.FREEBASE_VIEW+id); 00091 //Semantic detail 00092 queryFBDetail(id); 00093 JSON jsonDetail=doQuery().get("result"); 00094 //Symptoms 00095 String sSymp=""; 00096 for (int k=0;k<jsonDetail.get("symptoms").array().size();k++){ 00097 sSymp+=(sSymp.equals(""))?"":"<span> | </span>"; 00098 sSymp+="<a href=\"symptom.jsp?term="+ 00099 jsonDetail.get("symptoms").get(k).get("name").value()+"\">"+ 00100 jsonDetail.get("symptoms").get(k).get("name").value()+"</a>\r\n"; 00101 } 00102 lSymptom.add(sSymp); 00103 //Treatments 00104 String sTreat=""; 00105 for (int k=0;k<jsonDetail.get("treatments").array().size();k++){ 00106 sTreat+=(sTreat.equals(""))?"":"<span> | </span>"; 00107 sTreat+="<a href=\"treatment.jsp?term="+ 00108 jsonDetail.get("treatments").get(k).get("name").value()+"\">"+ 00109 jsonDetail.get("treatments").get(k).get("name").value()+"</a>\r\n"; 00110 } 00111 lTreatment.add(sTreat); 00112 //Risk factors 00113 String sRisk=""; 00114 for (int k=0;k<jsonDetail.get("risk_factors").array().size();k++){ 00115 sRisk+=(sRisk.equals(""))?"":"<span> | </span>"; 00116 sRisk+="<a href=\""+Constants.FREEBASE_VIEW+ 00117 jsonDetail.get("risk_factors").get(k).get("id").value()+"\">"+ 00118 jsonDetail.get("risk_factors").get(k).get("name").value()+"</a>\r\n"; 00119 } 00120 lRisk.add(sRisk); 00121 } 00122 00123 } 00124 private void queryFBDetail(String pid){ 00125 this.query = o( 00126 "type", "/medicine/disease","id", pid,"name", null, 00127 "symptoms", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/symptom")), 00128 "treatments", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/medical_treatment")), 00129 "risk_factors", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/risk_factor")) 00130 ); 00131 } 00132 private String doRawQuery(String url){ 00133 String sSource=""; 00134 try { 00135 HttpClient client = new HttpClient(); 00136 GetMethod method=new GetMethod(url); 00137 int statusCode = client.executeMethod(method); 00138 if( statusCode != -1 ) { 00139 sSource = method.getResponseBodyAsString(); 00140 method.releaseConnection(); 00141 }else{ 00142 sSource+=statusCode; 00143 } 00144 } 00145 catch( Exception e ) { 00146 sSource+=e.toString(); 00147 } 00148 return sSource; 00149 } 00150 public void setPage(int pPage){ 00151 this.page=pPage; 00152 } 00153 public int getCount(){ 00154 return this.count; 00155 } 00156 public int getTotalPages(){ 00157 return this.totalpages; 00158 } 00159 public List<String> getIDLists(){ 00160 return this.lIDList; 00161 } 00162 public List<String> getConcepts(){ 00163 return this.lConcept; 00164 } 00165 public List<String> getArticles(){ 00166 return this.lArticle; 00167 } 00168 public List<String> getImages(){ 00169 return this.lImage; 00170 } 00171 public List<String> getFBUrls(){ 00172 return this.lFBUrl; 00173 } 00174 public List<String> getSymptoms(){ 00175 return this.lSymptom; 00176 } 00177 public List<String> getRisks(){ 00178 return this.lRisk; 00179 } 00180 public List<String> getTreatments(){ 00181 return this.lTreatment; 00182 } 00183 public static void main (String[] args){ 00184 CallFBDis h=new CallFBDis("cancer"); 00185 h.setPage(0); 00186 h.queryFB(); 00187 System.out.println(h.getCount()); 00188 for (int i=0;i<h.getIDLists().size();i++){ 00189 System.out.println("ID: "+h.getIDLists().get(i)); 00190 System.out.println("CONCEPT: "+h.getConcepts().get(i)); 00191 System.out.println("ARTICLE: "+h.getArticles().get(i)); 00192 System.out.println("IMAGE: "+h.getImages().get(i)); 00193 System.out.println("FREEBASE URL: "+h.getFBUrls().get(i)); 00194 System.out.println("SYMPTOMS: "+h.getSymptoms().get(i)); 00195 System.out.println("RISK FACTORS: "+h.getRisks().get(i)); 00196 System.out.println("TREATMENTS: "+h.getTreatments().get(i)); 00197 } 00198 } 00199 00200 }