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
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立てたので、そこでまとめでも(二度手間?)作りましょうか…