CLEiM
Cross Lingual Education in Medicine
|
00001 package com.uem.gsi.cleim.scl; 00002 00003 import java.util.ArrayList; 00004 import java.util.List; 00005 00006 import org.apache.commons.httpclient.HttpClient; 00007 import org.apache.commons.httpclient.methods.GetMethod; 00008 00009 import com.freebase.api.Freebase; 00010 import com.freebase.json.JSON; 00011 import com.uem.gsi.cleim.util.Constants; 00012 00013 import static com.freebase.json.JSON.o; 00014 import static com.freebase.json.JSON.a; 00015 00016 public class CallFBTre { 00017 private String treatment; 00018 private JSON query; 00019 private JSON envelope; 00020 private int limit=10; 00021 private int page=0; 00022 private int count=0; 00023 private int totalpages=0; 00024 private List<String> lIDList; 00025 private List<String> lConcept; 00026 private List<String> lArticle; 00027 private List<String> lImage; 00028 private List<String> lFBUrl; 00029 //private List<String> lContra; 00030 private List<String> lSideEf; 00031 private List<String> lUsedTo; 00032 //private List<String> lTrials; 00033 00034 public CallFBTre(String ptreatment) { 00035 this.treatment=ptreatment; 00036 this.query=o(); 00037 this.envelope=o(); 00038 lIDList = new ArrayList<String>(); 00039 lConcept = new ArrayList<String>(); 00040 lArticle = new ArrayList<String>(); 00041 lImage = new ArrayList<String>(); 00042 lFBUrl = new ArrayList<String>(); 00043 //lContra = new ArrayList<String>(); 00044 lSideEf = new ArrayList<String>(); 00045 lUsedTo = new ArrayList<String>(); 00046 //lTrials = 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/medical_treatment", "name~=", "*"+this.treatment+"*", 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/medical_treatment", "name~=", "*"+this.treatment+"*", "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 //Semantic detail 00091 queryFBDetail(id); 00092 JSON jsonDetail=doQuery().get("result"); 00093 //Contraindications 00094 /*String sContra=""; 00095 for (int k=0;k<jsonDetail.get("contraindications").array().size();k++){ 00096 sContra+="<a href=\""+Constants.FREEBASE_VIEW+ 00097 jsonDetail.get("contraindications").get(k).get("id").value()+ 00098 "\" target=_blank>"+ 00099 jsonDetail.get("contraindications").get(k).get("name").value()+ 00100 "</a><br>\r\n"; 00101 } 00102 lContra.add(sContra); 00103 */ 00104 //Side Effects 00105 String sSideEf=""; 00106 for (int k=0;k<jsonDetail.get("side_effects").array().size();k++){ 00107 sSideEf+=(sSideEf.equals(""))?"":"<span> | </span>"; 00108 sSideEf+="<a href=\"symptom.jsp?term="+ 00109 jsonDetail.get("side_effects").get(k).get("name").value()+"\">"+ 00110 jsonDetail.get("side_effects").get(k).get("name").value()+"</a>\r\n"; 00111 } 00112 lSideEf.add(sSideEf); 00113 //Used to treat 00114 String sUsedTo=""; 00115 for (int k=0;k<jsonDetail.get("used_to_treat").array().size();k++){ 00116 sUsedTo+=(sUsedTo.equals(""))?"":"<span> | </span>"; 00117 sUsedTo+="<a href=\"disease.jsp?term="+ 00118 jsonDetail.get("used_to_treat").get(k).get("name").value()+"\">"+ 00119 jsonDetail.get("used_to_treat").get(k).get("name").value()+"</a>\r\n"; 00120 } 00121 lUsedTo.add(sUsedTo); 00122 //Trials 00123 /*String sTrials=""; 00124 for (int k=0;k<jsonDetail.get("trials").array().size();k++){ 00125 sTrials+="<a href=\""+Constants.FREEBASE_VIEW+ 00126 jsonDetail.get("trials").get(k).get("id").value()+ 00127 "\" target=_blank>"+ 00128 jsonDetail.get("trials").get(k).get("name").value()+ 00129 "</a><br>\r\n"; 00130 } 00131 lTrials.add(sTrials); 00132 */ 00133 00134 } 00135 00136 } 00137 private void queryFBDetail(String pid){ 00138 this.query = o( 00139 "type", "/medicine/medical_treatment","id", pid,"name", null, 00140 "side_effects", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/symptom")), 00141 "used_to_treat", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/disease")) 00142 ); 00143 } 00144 private String doRawQuery(String url){ 00145 String sSource=""; 00146 try { 00147 HttpClient client = new HttpClient(); 00148 GetMethod method=new GetMethod(url); 00149 int statusCode = client.executeMethod(method); 00150 if( statusCode != -1 ) { 00151 sSource = method.getResponseBodyAsString(); 00152 method.releaseConnection(); 00153 }else{ 00154 sSource+=statusCode; 00155 } 00156 } 00157 catch( Exception e ) { 00158 sSource+=e.toString(); 00159 } 00160 return sSource; 00161 } 00162 public void setPage(int pPage){ 00163 this.page=pPage; 00164 } 00165 public int getCount(){ 00166 return this.count; 00167 } 00168 public int getTotalPages(){ 00169 return this.totalpages; 00170 } 00171 public List<String> getIDLists(){ 00172 return this.lIDList; 00173 } 00174 public List<String> getConcepts(){ 00175 return this.lConcept; 00176 } 00177 public List<String> getArticles(){ 00178 return this.lArticle; 00179 } 00180 public List<String> getImages(){ 00181 return this.lImage; 00182 } 00183 public List<String> getFBUrls(){ 00184 return this.lFBUrl; 00185 } 00186 /*public List<String> getContras(){ 00187 return this.lContra; 00188 }*/ 00189 public List<String> getSideEf(){ 00190 return this.lSideEf; 00191 } 00192 public List<String> getUsedTo(){ 00193 return this.lUsedTo; 00194 } 00195 /*public List<String> getTrials(){ 00196 return this.lTrials; 00197 }*/ 00198 public static void main (String[] args){ 00199 CallFBTre h=new CallFBTre("chemotherapy"); 00200 h.setPage(0); 00201 h.queryFB(); 00202 System.out.println(h.getCount()); 00203 for (int i=0;i<h.getIDLists().size();i++){ 00204 System.out.println("ID: "+h.getIDLists().get(i)); 00205 System.out.println("CONCEPT: "+h.getConcepts().get(i)); 00206 System.out.println("ARTICLE: "+h.getArticles().get(i)); 00207 System.out.println("IMAGE: "+h.getImages().get(i)); 00208 System.out.println("FREEBASE URL: "+h.getFBUrls().get(i)); 00209 //System.out.println("CONTRAINDICATIONS: "+h.getContras().get(i)); 00210 System.out.println("EFFECT OF: "+h.getSideEf().get(i)); 00211 System.out.println("USED TO: "+h.getUsedTo().get(i)); 00212 //System.out.println("TRIALS: "+h.getTrials().get(i)); 00213 } 00214 } 00215 00216 }