Dynamic DO!.jpでDNSを更新してくれるJavaプログラム

Dynamic DO!.jpが提供している無料版DDNSサービスに対して、コマンドベースでDNSを更新するプログラムをJavaで書いたので載せます。(Perl版はネットで見つけましたがJava版はなかったので、これで誰かの5分くらいは短縮できるかな?)

以下のソースを適当な場所に「Ddo.java」として保存して、「javac Ddo.java」と実行してコンパイルしてください。コンパイルにはJDK(たぶん1.5くらいで大丈夫)が必要です。

あとは「java Ddo [domain] [password]」とコマンドを打ってあげてください。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Ddo {

	private static String url1 = "http://ddo.jp/?free=on";
	private static String url2 = "http://free.ddo.jp/dnsupdate.php";

	public static void main(String[] args) {
		String domain;
		String password;
		
		if(args.length!=2){
			printUsage();
			return;
		}else{
			domain = args[0];
			password = args[1];
		}
		
		URL url;
		String ip=null;
		try {
			url = new URL(url1);
			BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),"EUC-JP"));
			String prefix = "<input type=text name=ip value=\"";
			String postfix = "\" size=30>";

			String line;
			while((line=br.readLine())!=null){
				if (line.indexOf(prefix)!=-1&&line.indexOf(postfix)!=-1){
					ip = line.substring(line.indexOf(prefix)+prefix.length(),line.indexOf(postfix));
				}
			}
			br.close();
			if(ip==null){
				System.out.println("IP Address Not Found(Not Updated)");
				return;
			}
		} catch (MalformedURLException e) {
			printUrlIllegal(url1);
			e.printStackTrace();
			return;
		} catch (IOException e) {
			printOtherIllegal();
			e.printStackTrace();
			return;
		}

		System.out.println("IP Address Found => "+ip);
		
		try {
			url = new URL(url2+"?dn="+domain+"&ip="+ip+"&pw="+password);
			BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),"EUC-JP"));
			Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
			StringBuffer result = new StringBuffer();

			String line;
			while((line=br.readLine())!=null){
				Matcher matcher = pattern.matcher(line);
				result.append(matcher.replaceAll("")+"\n");
			}
			br.close();
			
			System.out.println(result.toString());

		} catch (MalformedURLException e) {
			printUrlIllegal(url2);
			e.printStackTrace();
			return;
		} catch (IOException e) {
			printOtherIllegal();
			e.printStackTrace();
			return;
		}
		
		
	}

	private static void printUsage(){
		System.out.println("Usage : java Ddo [domain] [password]");
	}
	private static void printUrlIllegal(String url){
		System.out.println("URL is illegal => "+url);
	}
	private static void printOtherIllegal(){
		System.out.println("Probabry Network has any problems");
	}
}