JsonSlurperを使ってfacebook内のいいね!をクリック

Facebook,Groovy

悪用厳禁で。

#!/usr/bin/env groovyimport groovy.json.*
def facebookApi = new Object(){
def baseurl = "https://graph.facebook.com"def accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"def jsonSlurper = new JsonSlurper()
def get = { path, params = [:] ->
jsonSlurper.parseText(
new URL(
baseurl + path + "?" +
([ "access_token":accessToken ] + params).collect{ it.key + "=" + it.value }.join("&")).text
)
}
def post = { path, params = [:] ->println (baseurl + path)
new URL(
baseurl + path
).openConnection().with{
doOutput = true
setRequestProperty("User-Agent", "JsonSlurper")
setRequestProperty("Accept-Language", "ja")
outputStream.withWriter {
it << ([ "access_token":accessToken ] + params).collect{ it.key + "=" + it.value }.join("&")
}
def result = ""
inputStream.withReader {
result = it.text
}
result
}
}
}
def nameKeyword = args[0]
def me = facebookApi.get("/me")
def friends = facebookApi.get("/me/friends")
friends.data.findAll{
it.name.contains(nameKeyword)
}.id.each{ id ->
feeds = facebookApi.get("/${id}/feed")
feeds.data.findAll{
def likes = facebookApi.get("/${it.id}/likes")
!likes.data.id.contains( me.id ) &&
it?.created_time >= (newDate()-2).format('yyyy-MM-dd')
}.each{ feed ->println feed.from
println feed.message
println feed.created_time
println facebookApi.post("/${feed.id}/likes")
println"--------------------------------------------------"
}
}

第一引数にフレンドの名前を指定。
それを含むフレンドの2日前までのフィードに一括でいいね!します。
すでにいいね!しているものにはなにもしません。
最後のpostでいいね!している。

facebooktwitterはkeyword:restな作りになってるんだね。
取得=get、登録・更新=post、削除=deleteにてHTTPのリクエスト投げると。

urlの形式は、オブジェクト#メソッドの関係に似ている。
getリクエストで me/friends にアクセスすれば、自分のフレンド情報を取得。(パラメータでidはいる。)
deleteリクエストで ${feedId}/likes にアクセスすれば、${feedId}に関するいいね!を取り消せる。

Facebook,Groovy