시소당
GoogleAPI는 구글의 기능 몇가지를 이용하도록 하기 위한 API 입니다.
여기서의 기능은 검색, 캐쉬페이지, 추천문구기능이 그것인데요...
캐쉬페이지의 경우는 구글의 크롤러(인터넷 모든 사이트를 쑤시고 다니는 프로그램)의 결과 파일을 볼수 있는 기능입니다.
내부적으로는 웹서비스 통신을 하도록 되어 있습니다.
워낙 단순한 기능만을 제공하므로, 사용방법이 어렵지 않습니다. API 구조도 단순하구요.
지원 언어는 .net과 java 입니다.
이를 이용하기 위해서는 요청시에 딸려보내야 하는 사용자 키값이 있어야 합니다.
이는 http://www.google.com/apis/ 에 들어가셔서 계정을 만드시면 키값을 메일로 줍니다.
간단한 예제도 들어 있으므로 한번 보시면 재미있을 겁니다.
저의 경우는 swing을 이용해서 한번 만들어 보았습니다...
오랫만에 코딩을 하니... 재미도 있고 보람도 있네요...
swing을 처음 해보는 것이라 여러 튜토리얼을 참조하였구요.
조금 전까지 JTextArea를 이용한 버젼이어서 plain text로만 결과를 보게 되었었는데요.
1시간을 공을 들여서 이를 JTextPane 버젼으로 바꾸었습니다..
AWT보다 훨씬 이쁘고 뽀대도 나는군요..
다음은 캡쳐화면입니다.
저의 키값을 이용했는데요. 보안상 뒷부분은 지웠습니다..
또한 예제에는 별도의 함수로 코딩이 되어 있지 않았습니다.
저의 경우는 다음과 같이 코딩을 하였죠.
private String callGoogleAPI(String cmd, String key, String str) throws Exception {
GoogleSearch s = new GoogleSearch();
System.out.println("cmd:" + cmd + " key:" + key + " str:" + str);
s.setKey(key);
String result = null;
try {
if("search".equals(cmd)) {
s.setQueryString(str);
GoogleSearchResult r = s.doSearch();
result = r.toString();
} else if("cached".equals(cmd)) {
byte [] cachedBytes = s.doGetCachedPage(str);
result = new String(cachedBytes);
} else if("spell".equals(cmd)) {
result = s.doSpellingSuggestion(str);
}
} catch(GoogleSearchFault f) {
System.out.println("The call to the Google Web APIs failed:");
System.out.println(f.toString());
} catch(Exception e) {
System.out.println("Failed Exception:");
System.out.println(e.toString());
}
return result;
}
대략 봐도 GoogleSearch/GoogleSearchResult 뿐이죠..
googleAPI를 이용한 간단한 application에 추가작업을 했습니다..
이전의 작업은
1. googleAPI를 테스트할수 있는 application 작성
Swing 이용, JTextArea를 이용: plain text만을 이용해야 하므로 JTextPane으로 수정함.
이었습니다.
이전 포스트에서도 언급했듯이, 결과를 조리있게 보여주는 것과.
URL을 링크한 경우 해당 페이지를 띄우는 것이 추가로 해야 할 작업이었습니다.
그래서 오늘 작업을 다 했죠... 백수의 장점이 여유있는 시간을 이용해서요..
작업1. JTextPane에서 html 이용하기.
오늘에서야 안 사실이지만, JTextPane 클래스는 이미 html을 표시할수가 있더군요.
일종의 작은 브라우져 역할을 수행한다고 보시면 되겠습니다.
하지만 기능적인 측면이 아주 미비합니다. 복잡한 페이지나 script가 많은 페이지는 제대로 표현을 하지 못합니다.
그러다 보니, JTextPane에는 결과만을 조리있게 간단한 html 을 이용하여 출력하고.
검색결과의 URL을 클릭하면 이를 별도의 브라우져를 기동하여 보여주는 것으로 결정을 내렸습니다.(혼자 뚝딱 만드는 프로그램이니 순전히 제 맘이죠...)
JTextPane의 내부 구조는 EditorKit와 Document, JTextPane으로 구성이 되어 있습니다.
음 이부분에서는 Document와 View 구조를 이해를 하셔야 합니다...
단순히 JTextPane을 생성을 하고, 문자를 찍게 되면 plain text로 출력이 되게 됩니다.
HTMLEditorKit htmlKit = null;
HTMLDocument doc = null;
JTextPane paneArea = null;
htmlKit = new HTMLEditorKit();
doc = (HTMLDocument)htmlKit.createDefaultDocument();
paneArea = new JTextPane();
paneArea.setPreferredSize(new Dimension(700, 400));
paneArea.setContentType("text/html");
paneArea.setDocument(doc);
paneArea.addHyperlinkListener(listener);
paneArea.setEditable(false);
....
htmlKit.insertHTML(doc, doc.getLength(), "<i>TEST PAGE~~~</i>", 0, 0, null);
위와 같이 해야만이 html로 JTextPane으로 보여집니다..
이를 통하여 결과를 html로 출력을 해보았죠.(이전 버젼은 GoogleSearchResult의 toString 함수의 결과만을 출력했었습니다.)
그 결과는 다음과 같습니다.
작업2. JTextPane의 링크를 클릭한 경우 브라우져를 해당 페이지로 해서 기동하기.
이는 바로 아래 포스트의 참조를 이용해서 작업을 했습니다.
실제 코드는 단순하죠...
하지만 JTextPane의 결과에서 html링크는 기본적으로 제공하지 않습니다.
이를 제공하기 위해서는
다음가 같은 코드가 추가되어야 합니다.
HyperlinkListener listener = new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
setStdStr("link clicked!!!! url:" + e.getURL());
setStdStr("start IE url:" + e.getURL());
BrowserControl.displayURL(e.getURL().toString());
}
}
};
paneArea.addHyperlinkListener(listener);
HyperlinkListener 인터페이스를 이용해서 hyperlinkUpdate 함수를 구현해야 하죠..
아래 그림은 실제 URL을 눌렀을때 브라우져가 기동된 화면입니다.
[출처] googleAPI를 사용한 간단 application 작성 step2|작성자 하자두
http://blog.naver.com/hazard11?Redirect=Log&logNo=80023556714