Let's write β

プログラミング中にできたことか、思ったこととか

ClojureからPixivアクセス

PixivってなんでAPI公開しないんですかね...う〜ん
とおもいながらAPIをちょっと叩いてみました。

(ns pixivy.core
  (:gen-class)
  (:require [clj-http.client :as client])
  (:require [net.cgrand.enlive-html :as en]))

(def pixiv-api-base "http://touch.pixiv.net/")
(def pixiv-base-url "http://www.pixiv.net")

(defn get-ssid [name pass]
  (let [my-cs (clj-http.cookies/cookie-store)
        res (client/post (str pixiv-api-base "login.php")
                     {:form-params {:mode "login"
                                    :pixiv_id name
                                    :pass pass
                                    :skip 0}})]
    (when (= 302 (:status res))
      (:value ((:cookies res) "PHPSESSID")))))

(defn get-update-list [ssid]
  (let [list-url
        (str pixiv-api-base "bookmark_new_illust.php?PHPSESSID=" ssid)
        img-links (-> list-url
                      java.net.URL.
                      en/html-resource
                      (en/select [:ul#articles :li :article :div.imgbox :a]))]
    (doseq [img-link img-links]
      (println (:src (:attrs (first (get-in img-link [:content])))))
      (println (str pixiv-base-url (get-in img-link [:attrs :href]))))))

とりあえず、僕のアカウントで

;;Replace user & pass
(get-update-list (get-ssid "user" "pass"))

すると、ブックマークしているユーザーの新規画像の情報が出力されます。
ゆくゆくは、更新通知をデスクトップに表示したりしたいなぁとおもっています。