mike-neckのブログ

Java or Groovy or Swift or Golang

groovyで強引にblog更新pingを送ってみる

こんにちわ、みけです。

xmlrpcでブログ更新pingを打ってみる

キーワード「xmlrpc ping ブログ更新」で検索してみると、

大抵WordPressでのping送信の設定方法が出てくるので、

うーんと思ってたので、

googleのドキュメント

Google ブログ検索の更新通知 API について

を読みつつ、強引にgroovyでブログ更新のpingを送ってみることにしました。

スクリプト本体

書いたスクリプトはこんな感じです。

import groovy.xml.*

def w = new StringWriter()
def x = new MarkupBuilder(w)
x.mkp.xmlDeclaration(version:'1.0', encoding:'UTF-8')
x.methodCall {
    methodName 'weblogUpdates.extendedPing'
    params {
        param {
            value 'mike-neckのブログ'
        }
        param {
            value 'http://mike-neck.hatenadiary.com/'
        }
        param {
            value 'http://mike-neck.hatenadiary.com/'
        }
        param {
            value 'http://mike-neck.hatenadiary.com/rss'
        }
        param {
            value 'java|groovy|xmlrpc'
        }
    }
}

def message = w.toString()
def encoded = message.getBytes('UTF-8')

def url = new URL('http://blogsearch.google.co.jp/ping/RPC2')
def connection = url.openConnection()

connection.doOutput = true
connection.requestMethod = 'POST'
connection.setRequestProperty ('Content-Length', "${encoded.size()}")
connection.setRequestProperty ('Content-Type', 'text/xml')
connection.setRequestProperty ('Host', 'blogsearch.google.co.jp')
def writer = new PrintWriter(connection.outputStream)
writer << message
writer.flush()

def reader = new BufferedReader(new InputStreamReader(connection.inputStream))
def res = new StringWriter()
while(reader.ready()) {
    res << reader.readLine()
    res << '\n'
}
println res.toString()
reader.close()

実行結果

実行したところ、こんな感じで返ってきました。

<?xml version="1.0"?>
<methodResponse><params>
  <param><value><struct>
    <member>
      <name>flerror</name><value><boolean>0</boolean></value>
    </member>
    <member>
      <name>message</name><value>Thanks for the ping.</value>
    </member>
  </struct></value></param>
</params></methodResponse>

先ほどのgoogleのドキュメントを参照する限り、

flerrorのところのvalueの値が0の場合は成功だそうです。

めでたく、groovyでブログ更新pingを送信できたようです。

以上