Skip to content

Instantly share code, notes, and snippets.

@uemuraj
Created May 31, 2014 14:41
Show Gist options
  • Save uemuraj/80c9ef6856477b529c92 to your computer and use it in GitHub Desktop.
Save uemuraj/80c9ef6856477b529c92 to your computer and use it in GitHub Desktop.
気象庁防災情報XMLデータのエクスポート。指定した日付から昨日まで。
#!/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