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

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

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.