No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

GroovyではてなAPIを利用しハイクに投稿

発端

ハイクで id:daichan330 さんが文字列のエンコーディング+はてなAPIでのPOST処理なんかを試していたので、勉強がてらGroovyでやってみました。

そんなわけで、書いたソースです*1

ひとまず、ハイクAPIを利用して日本語で投稿できることだけを目指しました。
ネットワークが絡むと難しいですね、勉強不足なコードですがひとまず公開。

/** Basic認証のためのクラス */
class HttpAuthenticator extends Authenticator {
  def username
  def password
  PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(this.username, this.password as char[])
  }
  String myGetRequestingPrompt() {
    return super.getRequestingPrompt()
  }
}

// コネクション接続
URL url = new URL('http://h.hatena.ne.jp/api/statuses/update.xml')
String username = 'hoge'
String password = 'fuga'
def authenticator = new HttpAuthenticator('username':username, 'password':password)
Authenticator.setDefault(authenticator)
def urlconn = url.openConnection() as HttpURLConnection
urlconn.setRequestMethod('POST')
urlconn.setDoOutput(true)
urlconn.connect()

// ポストする文字
def writer = new PrintWriter(urlconn.getOutputStream())
writer.write("status=${URLEncoder.encode('test=テスト from Groovy', 'UTF-8')}")
writer.flush()
writer.close()

// レスポンス
Map headers = urlconn.getHeaderFields()
headers.each { println " ${it.key}: ${it.value}" }
println """\
レスポンスコード    [${urlconn.getResponseCode()}]
レスポンスメッセージ[${urlconn.getResponseMessage()}]
プロンプト(realm)   [${authenticator.myGetRequestingPrompt()}]
---- ボディ ----
${new BufferedReader(new InputStreamReader(urlconn.getInputStream(), 'UTF-8')).getText()}\
"""

// コネクション切断
urlconn.disconnect()

解説

ユーザ名とパスワードを設定。例) ユーザ:hoge パスワード:fuga (パスワードは実際はこちらを参照)


String username = 'hoge'
String password = 'fuga'

キーワード=本文で投稿


writer.write("status=${URLEncoder.encode('test=テスト from Groovy', 'UTF-8')}")

*1:動作確認:Groovy Version: 1.5.7 JVM: 1.6.0_10