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')}")