読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

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

facebook Groovy

悪用厳禁で。

#!/usr/bin/env groovy
 import 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 >= (new Date()-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}に関するいいね!を取り消せる。