Scratch APIを使って外部アプリから呼び出す
あまり知られていませんが、ScratchにはAPIが用意されています。
当スクールの会員アプリ「エルサポ」でも、このScratchAPIを使って、
子どもたちの作品を、保護者の方が見れるようにしています。
すごくシンプルなAPIですので、簡単に使うことができます。
Scratch APIの基本的な動き
Scratch APIは、GETでリクエストして、JSON形式で値を受け取るというシンプルなAPIです。
※一部、PUTで情報を更新するAPIもあります。
例えば、ユーザーのアカウント情報を取得する場合、
(Curlコマンドでリクエストします)
curl https://api.scratch.mit.edu/users/ScratchCat
ScratchCat の部分がScratchのユーザー名です。
この赤枠のところに書いているアルファベットの文字です
JSON形式でレスポンスが返ってきます
{
"id": 10817178,
"username": "apple502j",
"scratchteam": false,
"history": {
"joined": "2015-06-26T22:47:57.000Z"
},
"profile": {
"id": 9986108,
"images": {
"90x90": "https://cdn2.scratch.mit.edu/get_image/user/10817178_90x90.png?v=",
"60x60": "https://cdn2.scratch.mit.edu/get_image/user/10817178_60x60.png?v=",
"55x55": "https://cdn2.scratch.mit.edu/get_image/user/10817178_55x55.png?v=",
"50x50": "https://cdn2.scratch.mit.edu/get_image/user/10817178_50x50.png?v=",
"32x32": "https://cdn2.scratch.mit.edu/get_image/user/10817178_32x32.png?v="
},
"status": "Also vulnerability researcher who discovered CVE-2020-14000, CVE-2020-15179 and CVE-2020-7750 (\"SVG Renderer XSS\")\n\nFree speech should be respected more than anything else, including 3 million users",
"bio": "Scratch Wiki editor (now EW on en/FTP admin on jawiki)/Scratch OSS contributor (fixes bugs!)/Scratch Translator/Hosted Scratch Day/Speaks English and Japanese/he/him, they is ok too/Python 3!/autistic",
"country": "Antarctica"
}
}
Scratch APIで取得できる情報
Scratch APIで取得できる情報はたくさんありますが、大きく分けると以下の通りです。
- サーバーの状態
- ニュース
- プロキシ
- ユーザー
- プロジェクト
- コメント
- 教師用アカウント
- プロジェクトの検索
- ユーザー名のチェック
中でも特に使うのは、ユーザーとプロジェクトでしょう。
ユーザーに関するAPI
ユーザーに関するAPIとしては、以下のようなものがあります。
※ScratchCatの部分にユーザー名を入れます
ユーザーのアカウント情報を返す。
GET https://api.scratch.mit.edu/users/ScratchCat
「お気に入り」を押したプロジェクトの詳細を配列で返す。
GET https://api.scratch.mit.edu/users/ScratchCat/favorites
ユーザーの最新のフォロワーの配列を返す。
GET https://api.scratch.mit.edu/users/ScratchCat/followers
ユーザーがフォローしているユーザーのうち、直近5件を配列で返す。
GET https://api.scratch.mit.edu/users/ScratchCat/following
ユーザーの未読メッセージ数を返す。
GET https://api.scratch.mit.edu/users/ScratchCat/messages/count
ユーザーがキュレーションしているスタジオの情報を返す。
GET https://api.scratch.mit.edu/users/ScratchCat/studios/curate/
ユーザーが共有したプロジェクトの情報を返す。
GET https://api.scratch.mit.edu/users/ScratchCat/projects
※共有したプロジェクトしか取得することはできません。(自分のプロジェクトも含む)
プロジェクトに関するAPI
プロジェクトに関するAPIには、以下のようなものがあります。
※103530008の部分がプロジェクトIDです。
URL「https://scratch.mit.edu/projects/103530008/」
の数字の部分です。
プロジェクトの情報を返す。
GET https://api.scratch.mit.edu/projects/103530008
リミックスされた情報を返す。
GET https://api.scratch.mit.edu/projects/103530008/remixes/
スタジオの情報を返す。
GET https://api.scratch.mit.edu/projects/103530008/studios/
Scratch APIで更新できる情報
Scratch API はそのほとんどがGET、つまり情報を取得するためのAPIですが、
一部情報を更新するためのAPIがあります。
ユーザーをフォローする
PUT https://scratch.mit.edu/site-api/users/followers/XXX/add/
※XXXにフォローしたいユーザーのユーザー名をセットします。
プロジェクトに「好き」を入れる
PUT https://scratch.mit.edu/site-api/users/lovers/103530008/add/
プロジェクトを「お気に入り」にする
PUT https://scratch.mit.edu/site-api/users/favoriters/103530008/add/
前提条件:必要なヘッダー
PUTをするためには、前提条件があります。
X-CSRFTokenというヘッダーに、トークンを設定する必要があります。
また、X-Requested-WithにはXMLHttpRequestを指定する。
Cookieは、scratchcsrftokenとscratchsessionsidが必要です。
PHPアプリからプロジェクト情報を取得する
PHP Laravelで構築している会員アプリ「エルサポ」では、Scratch APIを使って、子どものプロジェクト情報を取得しています。
ご参考までにコードを貼り付けておきます。
//api用
//ストリームコンテキストのオプションを作成
$options = array(
// HTTPコンテキストオプションをセット
'http' => array(
'method'=> 'GET',
'header'=> 'Content-type: application/json; charset=UTF-8' //JSON形式で表示
)
);
//ストリームコンテキストの作成
$context = stream_context_create($options);
//生徒に紐づくプロジェクト一覧を取得する
$itemset=[];
foreach($students as $student){
// 取得URL
// GET https://api.scratch.mit.edu/users/ScratchCat/projects
$url = "https://api.scratch.mit.edu/users/".$student->ScratchID."/projects";
$raw_data = file_get_contents($url, false,$context);
if($raw_data!=false){
// json の内容を連想配列として $itemset に格納する
$itemset[$student->StudentCd] = json_decode($raw_data,true);
}
}
※共有されたプロジェクトしか取得できない点に留意してください。
参考)公式ドキュメント
公式ドキュメントはこちらです。
2.0となっておりますが、3.0についての記事はなく、こちらが最新の情報です。