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());
		}
	}
}