HTTPで文書を取得するモジュールほか
近況
テストが近づいている……
- jxtaで作ってたアプリケーションが一応完成した.jxta2.5を使って実装していたけれど,インターネット越しでピア(ノード)が発見できないという罠に落ちた.原因不明(原因究明する暇がねぇからww).なんだかしらんがランデブーピア(まぁサーバみたいなもん)に接続されていないらしい.…ということで,jxta2.4.1に乗り換えて実装(発狂気味).
- Tomcatをインストールして,SOAPを使った遊びができる環境を構築した.参考にしたページ(hellohiro.com)が古すぎて,いろいろ問題発生.今はApache SOAPでは無く,Axisというものを使うらしい.しかし,Axisの使い方がいまいちわからん…ので,グーグルに頼って,昔のバイナリを探して無理やり環境構築.
- 作った環境を使って適当なアプリケーションを実装.
- この状況でテスト1週間切った.まだレポート2つあるんですが,どうしましょうねぇ
……テストが近づいている.
以下は適当に作ったモジュールを晒す.
HTTPで文書を取得するモジュール
使い方
HtmlGet ht = new HtmlGet(new URL("http://api.gogo.gs/v1.1/?apid=guest&lat="+lat+"&lon="+lon),"UTF-8"); String str = ht.toString();
HtmlGet
import java.io.BufferedInputStream; 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.net.UnknownHostException; import javax.swing.JTextArea; public class HtmlGet { JTextArea htmlArea = new JTextArea(); public HtmlGet(URL url,String charset){ // Webページを読み込む try { // 接続 URLConnection uc = url.openConnection(); // HTMLを読み込む BufferedInputStream bis = new BufferedInputStream(uc.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(bis, charset)); htmlArea.setText("");//初期化 String line; while ((line = br.readLine()) != null) { htmlArea.append(line + "\n"); } } catch (MalformedURLException ex) { htmlArea.setText("URLが不正です。"); ex.printStackTrace(); } catch (UnknownHostException ex) { htmlArea.setText("サイトが見つかりません。"); } catch (IOException ex) { ex.printStackTrace(); } } public String toString(){ return htmlArea.getText(); } }
StringをDOM木にするモジュール
使い方
StringtoDOM strdom = new StringtoDOM(ht.toString());
Document doc = strdom.getDoc();
StringtoDOM
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; public class StringtoDOM { Document doc; List results = new ArrayList(); public StringtoDOM(String str){ try{ InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8")); DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); doc=parser.parse(is); } catch (Exception ex) { ex.printStackTrace(); } } public Document getDoc(){ return doc; } public List search(String tag){ results.clear(); SubSearch(doc.getFirstChild(),tag); return results; } private void SubSearch(Node node,String tag){ //System.out.println(node.getNodeName()); if(node.getParentNode().getNodeName().equals(tag)){ results.add(node.getNodeValue()); } Node childNode = node.getFirstChild(); if(childNode != null){ SubSearch(childNode,tag); } Node siblingNode = node.getNextSibling(); if(siblingNode != null){ SubSearch(node.getNextSibling(),tag); } } }
DOMをStringにするモジュール
なんかもうちょっとかっこいいDOM木を文字列にする方法を教えてくれ…
使い方
HtmlGet ht = new HtmlGet(new URL("http://api.gogo.gs/v1.1/?apid=guest&lat="+lat+"&lon="+lon),"UTF-8"); StringtoDOM strdom = new StringtoDOM(ht.toString()); DOMtoString dom = new DOMtoString(strdom.getDoc()); String str = dom.toString();
DOMtoString
import org.w3c.dom.Document; import org.w3c.dom.Node; public class DOMtoString { String result = ""; public DOMtoString(Document doc){ SubSearch(doc.getFirstChild()); } public String toString(){ result = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + result; return result; } private void SubSearch(Node node){ //System.out.println(node.getNodeName()); if(node.getNodeName().equals("#text")==false){ result = result + "<" + node.getNodeName() + ">"; } if(node.getNodeValue()!=null && node.getNodeValue().trim().equals("")!=true){ result = result + node.getNodeValue(); } Node childNode = node.getFirstChild(); if(childNode != null){ SubSearch(childNode); } if(node.getNodeName().equals("#text")==false){ result = result + "</" + node.getNodeName() + ">\n"; } Node siblingNode = node.getNextSibling(); if(siblingNode != null){ SubSearch(node.getNextSibling()); } } }