2014年9月15日月曜日

groovyでPocketのエクスポートデータをCSV形式に変換する

Pocketでは、保存したページを以下のページからHTML形式でエクスポートすることができます。

Pocketのエクスポート用ページ
https://getpocket.com/export/

エクスポートデータをCSV形式に変換するには、以下のコードを実行します。
@Grab(group='org.jsoup', module='jsoup', version='1.7.3')
import org.jsoup.*
import org.jsoup.select.*
import org.apache.commons.csv.*

doc = Jsoup.parse(new File("ril_export.html").getText("UTF-8"))

def fmt = CSVFormat.EXCEL
  .withHeader("time_added", "title", "url", "tags")
  .withQuoteMode(QuoteMode.NON_NUMERIC)
def printer = new CSVPrinter(new FileWriter("ril_export.csv"), fmt)

for(link in Selector.select("a", doc)){
  def time_added = new Date(Long.parseLong(link.attr("time_added"))*1000).format("yyyy/MM/dd HH:mm:ss")
  def title = link.text()
  def url = link.attr("href")
  def tags = link.attr("tags")
  printer.printRecord([time_added, title, url, tags])
}
printer.flush()
printer.close()

2014年9月14日日曜日

SwingBuilderでラベルの水平方向アライメントを設定する

SwingBuilderでラベルの水平方向アライメントを設定するには、以下のコードのようにhorizontalAlignmentを使用します。

サンプルコード
import java.awt.*
import javax.swing.*
import groovy.swing.*

sb = new SwingBuilder()
sb.edt {
  frame(
    title: "example - horizontal alignement",
    show: true,
    resizable: true,
    pack: true,
    defaultCloseOperation: WindowConstants.EXIT_ON_CLOSE
  ){
    label(text:"left", horizontalAlignment: JLabel.LEFT,
      constraints: BorderLayout.NORTH
    )
    label(text:"center", horizontalAlignment: JLabel.CENTER,
      constraints: BorderLayout.CENTER
    )
    label(text:"right", horizontalAlignment: JLabel.RIGHT,
      constraints: BorderLayout.SOUTH
    )
  }
}
実行時画面

動作環境
groovy 2.2.2, JDK 1.7 update55

groovyとZooKeeperで、znodeを一覧表示する

groovyとZooKeeperで、指定パスのznodeを一覧表示するには、以下のコードを実行します。

サンプルコード
@Grab(group='org.apache.zookeeper', module='zookeeper', version='3.4.6')
import org.apache.zookeeper.*

def zk = new ZooKeeper("localhost:2181", 3000, null)
try
{
  for(child in zk.getChildren("/", false)){
    println child
  }
}
finally
{
  zk.close()
}
動作環境
groovy 2.3.6, JDK 7 Update 65, Hadoop 2.5.0, zookeeper 3.4.6

2014年9月12日金曜日

Raspberry pi上のgroovyでメモリサイズ・メモリ使用量・フリーサイズを取得する

Raspberry pi上のgroovyでメモリサイズ・メモリ使用量・フリーサイズを取得するには、以下のコードのようにSystemInfoのgetMemoryTotal()とgetMemoryUsed(), getMemoryFree()を使用します。

@Grab(group='com.pi4j', module='pi4j-core', version='0.0.5')
import com.pi4j.system.*

println "total memory:${SystemInfo.getMemoryTotal()/1024/1024}M"
println "used memory:${SystemInfo.getMemoryUsed()/1024/1024}M"
println "free memory:${SystemInfo.getMemoryFree()/1024/1024}M"
実行結果
total memory:437.49609375M
used memory:422.93359375M
free memory:14.5625M

2014年9月11日木曜日

Apache Commons CSVとgroovyでヘッダー行付きのCSVデータを書き込む

Apache Commons CSVとgroovyでヘッダー行付きのCSVデータを書き込むには、以下のコードのようにwithHeaderでヘッダー情報を指定します。

import org.apache.commons.csv.*

def data = [
  [100, "テスト"],
  [200, "サンプル"]
]

def fmt = CSVFormat.EXCEL
  .withHeader("id", "category")
  .withQuoteMode(QuoteMode.NON_NUMERIC)
def printer = new CSVPrinter(new FileWriter("test.csv"), fmt)
printer.printRecords(data)
printer.flush()
printer.close()

2014年9月8日月曜日

groovyとApache OpenNLPで英語をトークン化する

groovyとApache OpenNLPで英語をトークン化するには、以下のコードの様にSimpleTokenizerを使用します。
import opennlp.tools.tokenize.*

def text = """The Apache OpenNLP library is a machine learning based toolkit for
the processing of natural language text."""

for(token in SimpleTokenizer.INSTANCE.tokenize(text)){
  println token
}

2014年9月5日金曜日

Raspberry pi上のgroovyでOS名称・バージョンを取得する

Raspberry pi上のgroovyでOS名称・バージョンを取得するには、以下のコードのようにSystemInfoのgetOsName()とgetOsVersion()を使用します。

@Grab(group='com.pi4j', module='pi4j-core', version='0.0.5')
import com.pi4j.system.*

println "OS name:${SystemInfo.getOsName()}"
println "OS version:${SystemInfo.getOsVersion()}"
実行結果
OS name:Linux
OS version:3.12.22+