ロング体験会 ご応募受付中です

Scratch APIを使って外部アプリから呼び出す

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のユーザー名です。

Scratchのユーザー名とは
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です。

プロジェクトIDとは
Scratchのプロジェクト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についての記事はなく、こちらが最新の情報です。

Scratchは、MITメディア・ラボのライフロング・キンダーガーテン・グループの協力により、Scratch財団が進めているプロジェクトです。https://scratch.mit.edu から自由に入手できます。

シェアおねがいします
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

もつさん
プログラミングスクールLの代表
妻、息子、娘の4人家族
プログラミング教育は、子どもの将来を変え、社会を変えるという信念のもと、日々子どもと向き合っています。

目次