HTML形式のログを定期的に取得しているのですが、その時に使用しているサンプルプログラムを公開します。
Javaの実行環境が整っているWindowsOSで、LogGet.java と LogGet.bat を同じディレクトリに置き、LogGet.bat を実行すると、「html」フォルダが出来上がりそこにHTMLファイルが格納されます。
取得するHTMLファイルのURL、及びHTMLファイルのローカルでのファイル名は、LogGet.java を修正して変更します。
HTMLファイルの文字コードは「EUC-JP」を前提としていますので、他の文字コードが使用されている場合は LogGet.java の「EUC-JP」の箇所を適宜修正してください。
【サンプルコード】
・LogGet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.net.URL; public class LogGet { public static void main(final String[] args){ /* 利用者がいじる所はここです。 * ・"~.html"となっている箇所は取得ログのファイル名です。 * 適宜書き換えてください。 * ※ファイル名が被った場合はログを取得しません * ・取得する必要が無いログはコメントアウトしてください。 */ //LogGet("ログ1","http://hoge.html","ほげ.html"); LogGet("ログ2","http://fuga.html","ふが.html"); } public static void LogGet(String logName, String logUrl, String fileName){ File f = new File("html\\" + fileName); if(f.exists()){ System.out.println ("重複したファイル名 " + fileName + " が与えられたため " + logName + " は取得しません。"); return; } URL url = null; InputStream is = null; InputStreamReader isr = null; FileOutputStream fos = null; OutputStreamWriter osw = null; try { url = new URL(logUrl); is = url.openStream(); isr = new InputStreamReader(is,"EUC-JP"); fos = new FileOutputStream("html\\" + fileName); osw = new OutputStreamWriter(fos,"EUC-JP"); while(true) { int i = isr.read(); if (i == -1) { break; } osw.write((char)i); } System.out.println (logName + " をファイル名 " + fileName + " で取得しました。"); } catch (Exception e) { System.out.println(e.getMessage()); } finally { try { isr.close(); is.close(); osw.close(); fos.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } } |
・LogGet.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off rem JDKをインストールしていない場合はインストールしてください。 rem https://qiita.com/ko2a/items/69fa8a5366d7449500ca rem 都度コンパイルを実施(javaをスクリプト言語っぽく利用) if exist .\LogGet.class (del .\LogGet.class) javac -encoding UTF-8 .\LogGet.java rem 処理実行 if not exist html\ (mkdir html) java -classpath . LogGet rem 処理終了 del .\LogGet.class pause exit |
いかがでしたでしょうか。
定期的にHTMLファイルを取得する機会があったので、javaでプログラムを作ってみました。
複雑なWebページを取得するには不向きですが、単純なHTMLで書かれたページを定期的に取得する時に便利だと思います。
便利な機能を見つけたら、また紹介したいと思います!
コメント