ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

jsdo.it API...だと...

しかもVer0.2だと…

jsdo.it API’s documentation — jsdo.it API v0.2 documentation

たまたま「jsdo.it API」で検索してみたら見つけてしまいました。
基本的にjsonを返すAPIなのですが、うれしいことに、すべてのリクエストでレスポンスヘッダに

Access-Control-Allow-Origin: *

を含めて返してくれます。このため、XMLHttpRequest Level2に対応しているブラウザであればJavaScriptからたたいて使うことができます*1

用意されているAPI

大きく分けて

  • ユーザー情報を取得するAPI
  • コードを検索・取得するAPI

の2つがあります。

ユーザー情報を取得するAPI

2つありますが、いずれもパラメータ「name」にユーザーIDを指定するだけのシンプルなAPIです。JSONPを使う場合はパラメータ「callback」にメソッド名を指定します。

user/show

指定したユーザーのプロフィールを取得します。リクエストとレスポンスは以下の通り。

リクエストURL

http://api.jsdo.it/v0.2/user/show.json?name=yuu_hara

レスポンス(整形したもの)

{
  "icon":"http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/9/d/b/b/9dbbe1f40de3d1ff2abba43e67323d2628c2f8bc_100.jpg",
    "external_url":"http://yuuxxxx.hatenablog.com/",
    "url":"http://jsdo.ityuu_hara",
    "name":"yuu_hara",
    "created_date":"2011-10-13 18:51:26",
    "counts":{
        "favorited":"6",
        "codes":"15",
        "forked":"11",
        "following":"0",
        "followers":"1"
    },
    "description":"JS/CSS/HTML5以外ならPHPとかRubyとか書く人。\r\nアイコンは本人、しごとください"
}

user/codes

指定したユーザーが投稿した公開されているコード一覧を取得します。リクエストとレスポンスの一部は以下の通りです。

リクエストURL

http://api.jsdo.it/v0.2/user/codes.json?name=yuu_hara

レスポンス(整形したもの)

{
    "results":[
        {
            "thumbnail":{
                "wide":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb_w.jpg",
                "465":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb.jpg",
                "100":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb_100.jpg"
            },
            "modified_date":"2013-01-05 06:00:40",
            "uid":"tnsb",
            "created_date":"2013-01-05 00:47:52",
            "path":"tnsb",
            "statistic":{
                "forked":"0",
                "favorite":"0",
                "pageview":"334"
            },
            "user":{
                "icon":"http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/9/d/b/b/9dbbe1f40de3d1ff2abba43e67323d2628c2f8bc_100.jpg",
                "name":"yuu_hara"
            },
            "url":"http://jsdo.it/yuu_hara/tnsb",
            "title":"ふもふもさん.svg"
        },
        (中略)
    ]
}

コードを検索・取得するAPI

こちらは検索APIを除いて、ユーザーIDとコードIDが必要となります。コードIDというのは上のレスポンスでいう「path」に相当します。

code/show

コードの情報を取得します。また、パラメータ「source」にhtml,css,jsを列挙することでコードそのものも取得することができます。たとえば、スクリプト*2を取得するには以下のようにします。
リクエストURL

http://api.jsdo.it/v0.2/code/show.json?user=yuu_hara&path=tnsb&source=js

レスポンス(整形…めんどくさいです)

{
    "created_date": "2013-01-05 00:47:52", 
    "modified_date": "2013-01-05 06:00:40", 
    "path": "tnsb", 
    "source": {
        "js": "$(document).ready () ->
    size = [100.5, 125]
    zoom = 1
    eritwin = $("#fmfm")
    $("#stroke_color").change () ->
        $("#stroke").attr "stroke", this.value
        $("#stroke .eye").attr "fill", this.value
    $("#background_color").change () -> 
        $("#background").attr "fill", this.value
    $("#size").change () -> 
        zoom  = this.value
        $("#size_height").text zoom * size[0]
        $("#size_width").text zoom * size[1]
    $("#random").click () ->
        x = [0, 0]
        for i in [0..2]
            x[0] = (x[0] << 8) + Math.ceil Math.random() * 255
            x[1] = (x[1] << 8) + Math.ceil Math.random() * 255
        console.log x
        $("#stroke_color").attr "value", "#" + x[0].toString 16
        $("#background_color").attr "value", "#" + x[1].toString 16
        $("#stroke_color").change()
        $("#background_color").change()
    $("#download").click () ->
        img = new Image()
        img.onload = () ->
            c = document.getElementById 'result_canvas'
            c.height = zoom * size[0]
            c.width = zoom * size[1]
            ctx = c.getContext '2d'
            ctx.drawImage img, 0, 0
            eritwin.attr "height", size[0]
            eritwin.attr "width", size[1]
        eritwin.attr "height", zoom * size[0]
        eritwin.attr "width", zoom * size[1]
        img.src = "data:image/svg+xml;base64," + btoa($("#preview")[0].innerHTML)
", 
        "lisence": "MIT"
    }, 
    "statistic": {
        "favorite": "0", 
        "forked": "0", 
        "pageview": "334"
    }, 
    "thumbnail": {
        "100": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb_100.jpg", 
        "465": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb.jpg", 
        "wide": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/t/n/s/tnsb_w.jpg"
    }, 
    "title": "ふもふもさん.svg", 
    "uid": "tnsb", 
    "url": "http://jsdo.it/yuu_hara/tnsb", 
    "user": {
        "icon": "http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/9/d/b/b/9dbbe1f40de3d1ff2abba43e67323d2628c2f8bc_100.jpg", 
        "name": "yuu_hara"
    }
}

code/children

指定したコードをフォークしたコードを取得します。使い方は以下の通り。
リクエストURL

http://api.jsdo.it/v0.2/code/children.json?user=yuu_hara&path=uCVu

レスポンス(整形したもの)

{
    "results":[
        {
            "thumbnail":{
                "wide":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/3/i/7/3i7z_w.jpg",
                "465":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/3/i/7/3i7z.jpg",
                "100":"http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/3/i/7/3i7z_100.jpg"
            },
            "modified_date":"2012-06-04 11:04:34",
            "uid":"3i7z",
            "created_date":"2012-06-04 10:39:02",
            "path":"3i7z",
            "statistic":{
                "forked":"1",
                "favorite":"1",
                "pageview":"1050"
            },
            "url":"http://jsdo.it/sasaplus1/3i7z",
            "user":{
                "icon":"http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/1/a/2/f/1a2fd343715d0ad270de13f6ae0f891d8a2d592f_100.jpg",
                "name":"sasaplus1"
            },
            "title":"forked: 某ゲームの背景に流れる波っぽいやつ"
        },
        (中略)
    ]
}

code/search

コードを検索します。パラメータ「tag」に検索するキーワードを指定します。オプションで「pages」を指定するとさらに検索結果を読み込みます。たぶん20件ずつくらいです。
リクエストURL

http://api.jsdo.it/v0.2/code/search.json?tag=quine

レスポンス(整形したもの)

{
    "results": [
        {
            "thumbnail": {
                "wide": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/n/h/c/nhcz_w.jpg",
                "465": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/n/h/c/nhcz.jpg",
                "100": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/n/h/c/nhcz_100.jpg"
            },
            "modified_date": "2011-05-19 13:26:51",
            "uid": "nhcz",
            "created_date": "2011-05-19 13:09:57",
            "path": "quine_pre",
            "statistic": {
                "forked": "0",
                "favorite": "1",
                "pageview": "870"
            },
            "user": {
                "icon": "http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/5/f/f/c/5ffcafd96a6689eeade89939122ce3a14bd09e09_100.jpg",
                "name": "sugyan"
            },
            "url": "http://jsdo.it/sugyan/quine_pre",
            "title": "Quine (write to <pre>)"
        },
        {
            "thumbnail": {
                "wide": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/o/0/q/o0q0_w.jpg",
                "465": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/o/0/q/o0q0.jpg",
                "100": "http://jsdo-it-static-contents.s3.amazonaws.com/images/capture/o/0/q/o0q0_100.jpg"
            },
            "modified_date": "2011-05-19 13:23:30",
            "uid": "o0q0",
            "created_date": "2011-05-19 13:09:17",
            "path": "quine",
            "statistic": {
                "forked": "0",
                "favorite": "3",
                "pageview": "937"
            },
            "user": {
                "icon": "http://jsdo-it-static-contents.s3.amazonaws.com/images/icon/5/f/f/c/5ffcafd96a6689eeade89939122ce3a14bd09e09_100.jpg",
                "name": "sugyan"
            },
            "url": "http://jsdo.it/sugyan/quine",
            "title": "Quine"
        }
    ]
}

とりあえずこれで何ができるかですね…せっかくgithub page立てたので、そこでまとめでも(二度手間?)作りましょうか…

*1:JSONPにも対応しているので非対応ブラウザも安心です

*2:ふもふもさん.svgではCoffeeScriptを使っています。