paiza.IO 上に書いたソースコードおよび実行結果をJSONで取得する


TL;DR

現在の paiza.IO の仕様上、直接 RAW でソースコードは取得できませんが、 JSON 形式でソースコードと実行結果を API 経由で取得できるので、そこから必要な部分を取り出します。

API のリクエスト URL のフォーマット

https://paiza.io/api/projects/<YourPaizaGistID>.json

https://paiza.io/projects/XUafcAYRnL6l2YTYDTVbew

対象の paiza.IO コードの URL が上記の場合、API のリクエスト URL は以下のようになる。

https://paiza.io/api/projects/XUafcAYRnL6l2YTYDTVbew.json

返される JSON のサンプル(取得できる結果)

sample.json
{
    "id": 535660,
    "parent_id": null,
    "uid": "xxxxxxxxxxxxxxxxxxxxxx",
    "share": "public",
    "runner_id": "xxxxxxxxxxxxxxxxxxxxxx",
    "status": "completed",
    "language": "php",
    "input": null,
    "build_time_limit": null,
    "time_limit": null,
    "memory_limit": null,
    "build_stdout": null,
    "build_stderr": null,
    "build_exit_code": 0,
    "build_time": null,
    "build_memory": 25012000,
    "build_result": null,
    "stdout": "<ここに実行した際の出力結果>",
    "stderr": "",
    "exit_code": 0,
    "time": "0.37",
    "memory": 25012000,
    "connections": 2,
    "result": "<実行結果。成功はsuccess>",
    "live": null,
    "output_type": null,
    "schedule": null,
    "title": "<paiza.IO上のタイトル>",
    "saved_at": "2017-08-16T15:38:02.000Z",
    "run_at": "2017-08-16T15:37:33.000Z",
    "created_at": "2017-08-16T15:14:24.000Z",
    "updated_at": "2017-08-16T15:38:02.000Z",
    "is_owner": false,
    "network": true,
    "source_files": [
        {
            "id": 671527,
            "project_id": 535660,
            "filename": "<コードのファイル名>",
            "body": "<ここにエスケープされたソースコード>",
            "created_at": "2017-08-16T15:14:43.000Z",
            "updated_at": "2017-08-16T15:26:58.000Z",
            "position": null,
            "annotations": null
        }
    ],
    "external_projects": [],
    "favorite": false,
    "featured": false,
    "user": {
        "id": xxxxxx,
        "email": "<登録メールアドレス>",
        "use_password": false,
        "provider": "github",
        "username": "<ユーザ名>",
        "gender": null,
        "timezone": null,
        "image_url": "https:\/\/avatars0.githubusercontent.com\/u\/11840938?v=3",
        "created_at": "2017-06-09T17:41:40.000Z",
        "updated_at": "2017-08-14T11:31:39.000Z",
        "policy_id": 1,
        "locale": "ja-jp"
    }
}

所感と利用用途

ノマドな開発の一貫として、ノートやタブレットから TeamViewer を使って自宅の Windows や OSX にアクセスできるようにしており、それなりに便利なのですが、ブラウザさえあれば開発できるような環境を作りたいな、という願望の模索をしています。

理想で言えば、関数やクラスなどの小さい単位の開発は gist+paiza.IO で行い、テストをパスしたら自動的にメインに統合するような仕組みです。

paiza.IO は GitHub の gist と連携できるので、個人だけであれば、ほぼ実現できているのですが、最近オープンソースなものに関しては、もっとコラボレーションできたらいいなと感じてきました。

しかし、他の人が fork (コピー)したコードは paiza.IO 上ではマージすることができません。そのため、レビューされた結果やコードはコピペするか、お互いに git コマンドを駆使する必要があるのですが、もっと手軽にコラボしたいのです。

そこで、gist 上にテストコードとソースコードをアップして paiza.IO 上で実行結果を確認(動作確認)できたら、ソースコードを本番に適用するなりできる方法はないかなと、 paiza.IO の運営に問い合わせたところ、API を使ってはどうかとアドバイスをもらったので、ちょっと調べた結果を記事にしてみました。