Created
May 31, 2014 14:41
-
-
Save uemuraj/80c9ef6856477b529c92 to your computer and use it in GitHub Desktop.
気象庁防災情報XMLデータのエクスポート。指定した日付から昨日まで。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env groovy | |
@Grab('postgresql:postgresql') | |
@GrabConfig(systemClassLoader=true) | |
import java.sql.* | |
import java.text.* | |
import java.util.zip.* | |
import javax.xml.* | |
import javax.xml.transform.* | |
import javax.xml.transform.stream.* | |
def today = new java.util.Date().format('yyyy-MM-dd') | |
def day | |
def sql | |
if (args.length > 0) { | |
day = args[0] | |
sql = "SELECT * FROM reports WHERE received < DATE '${today}' AND received >= DATE '${day}'" | |
} else { | |
day = new java.util.Date().previous().format('yyyy-MM-dd') | |
sql = "SELECT * FROM reports WHERE received < DATE '${today}' AND received >= DATE '${day}'" | |
} | |
Connection db = DriverManager.getConnection('jdbc:postgresql://localhost:5432/jmardb', 'jmardb', 'jmardb') | |
db.autoCommit = false | |
PreparedStatement ps = db.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) | |
ps.fetchSize = 50 | |
new File("jmardb-${day}.zip").withOutputStream { | |
Transformer transformer = TransformerFactory.newInstance().newTransformer() | |
ZipOutputStream stream = new ZipOutputStream(new BufferedOutputStream(it)) | |
try { | |
SimpleDateFormat df = new SimpleDateFormat('yyyyMMdd') | |
ResultSet rs = ps.executeQuery() | |
while(rs.next()) { | |
def id = rs.getObject('id') | |
def report = rs.getObject('report') | |
def received = rs.getObject('received') | |
try { | |
ZipEntry file = new ZipEntry("${df.format(received)}/${id}.xml") | |
file.time = received.time | |
stream.putNextEntry(file) | |
Source source = report.getSource(null) | |
Result result = new StreamResult(stream) | |
transformer.transform(source, result) | |
} catch (ZipException e) { | |
System.err.println(e.message) | |
} | |
} | |
} finally { | |
stream.close() | |
db.close() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment