さまざまな API サービスの把握
この章で学ぶこと
さまざまな API サービスの把握をします。
API とは(再確認)
さて、あらためて API とはこういうものです。
参考資料 : http://e-words.jp/w/API.html
API とは、 Application Programming Interface の頭文字です。データを提供したり、何かしらの機能を提供するソフトウェアの一部を、私たちのような外部の人間が扱えるように公開されている窓口です。HTTP プロトコルでやり取りしていることが多いです。
たとえば、Web アプリケーションなどインターネットの様々な仕組みを構築するとき、 API からデータを取得して加工して表示することが多いです。データや機能を借り受けるということですね。
✅ポイント
みなさんの「つくる」視点からも API は大事な役割あります。それは「API は技術同士をつなげる良き接着剤」というポイントです。
自分が API へつなげることで、自分だけでは用意できなかったデータや仕組みで制作物を面白くできたり、何かの API を存在を知ることで、自分の企画に新しい視点が生まれます。
- アイデアのつくり方
- 著 ジェームス W.ヤング
- https://www.amazon.co.jp/gp/product/4484881047
- アイデアのつくり方 - Wikipedia
何かをつくっていく上で、とても勉強になるクリエイティブの古典で「アイデアのつくり方」というジェームス W.ヤング氏の書かれた本があります。
この中で「アイデアは既存の要素の新しい組み合わせである」とあります。様々な技術とつながって新しい世界(データ)をみせてくれる API は、カジュアルに発想の組み合わせをしていく助けになります。
さて、こちらの図は、私が使ったことのある API や、まだ使ったことはないが知っている API をまとめてみたものです。
みなさんもイチから仕組みを構築してシステムをつくることももちろん大事ですが、このように API を知ることで、データを用意出来たり、ひとりでは難しい仕組みを導入出来たり、API を通じて新しい技術に触れることができます。
✅ポイント
API をながめてみよう
私がまとめたこの図のように API にはこのような広がりがあります。
フリーのAPIのリストコレクション public-apis をご紹介します。
- public-apis
英語ですが、実に 100 以上の API があり見ているだけで楽しいです。しかも定期的にメンテナンスされています。実は柴犬画像 API もこの中で紹介されているもののひとつです。
各 API では
- Auth
- 使うために認証が必要か
- ないものは特別のユーザー登録が必要なく柴犬画像 API のような使いやすいリクエスト GET リクエストでアクセスできたりする
- HTTPS
- セキュアな通信でつながるか
- CORS
- クロスドメイン制約(ドメインの違うところからのアクセスに関する制約)がないか
という項目で、使い方がザっと把握できます。
以下の点を注目しておくと使いやすいものを探せるでしょう。
- Auth
- No のものは特別のユーザー登録が必要なく柴犬画像 API のような使いやすいリクエスト GET リクエストでアクセスできたりする
- CORS
- ブラウザでのクロスドメイン制約(ドメインの違うところからのアクセスに関する制約)がないか
- ないとアクセスしやすい。Unity 単体でのアクセスであれば気にしなくてよい。
ということで、
いろいろな API を紹介していきます!
今回紹介した API たちのように、すぐに作れるツールやアプローチを知っていることで、よりつくるためのアイデアが増えていくので、手を動かしつつ技術に触れつつ、鍛えていきましょう。
✅ポイント
- ひとまず試すなら Auth なしで GET リクエストだとデータが取り出しやすかったりします
今回は CodeSpaces は起動しません
外部の API にいよいよつなげるので、起動しません。もちろん、後半のほうで、また学ぶために使います。
Unity プロジェクトを削除
現在作業しているフォルダを削除します。この場所を覚えておいて再度置けるようにしましょう。
Unity プロジェクトをダウンロード
今回の教材の Unity プロジェクトを https://github.com/1ft-seabass/vantan-unity-network-project-01 にブラウザからアクセスします。
Code ボタンをクリックして Local タブから Download ZIP をクリックしてダウンロードします。
ダウンロードできたら ZIP ファイルを、ダブルクリックして ZIP の中身をエクスプローラで表示します。
ZIP ファイル直下に vantan-unity-network-project-01-main というフォルダがあります。
このフォルダを選択して、作業フォルダにドラッグアンドドロップしましょう。
フォルダの中身はには、このように Unity プロジェクトそのものがあり Assets や Packages などのファイルがある状況です。
Unity プロジェクトを Unity Hub から開く
Unity Hub を開きます。
Open ボタンをクリックします。
フォルダ選択で vantan-unity-network-project-01-main フォルダを選択して Open ボタンをクリックします。
プロジェクトが読み込まれます。
プロジェクトが表示されました。現時点で、授業用のシーンではなく Untitled になっているのは問題ないです。
コンソールでこのようなエラーが出るのも問題ないです。
ひま API (Bored API) につなげてみましょう
https://www.boredapi.com/ という「ひまなときに、何かしてみようという」ものを英語ですがテキストを返してくれる面白い API です。
ドキュメント https://www.boredapi.com/ を見てみると GET リクエストで https://www.boredapi.com/api/activity?participants=1
でアクセスすると、
{
"activity": "Learn about a distributed version control system such as Git",
"type": "education",
"participants": 1,
"price": 0,
"link": "https://en.wikipedia.org/wiki/Distributed_version_control",
"key": "9303608",
"accessibility": 0
}
といった値が返ってくることがわかります。今回は、実際に暇のつぶし方のテキストである activity 値だけを読み込んでみましょう。
今回の Unity シーンを起動
Project タブから Assets > Scenes を選択します。Scene-Term1-4-Chapter01 をダブルクリックして起動しましょう。
Term1_4_Chapter01_CubeEvent01.cs を見てみる
Cube オブジェクトの Assets/Scripts/Term1_4_Chapter01_CubeEvent01.cs
で実際の動作が書かれています。こちらをエディタで開きます。
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections; // IEnumerator のための参照
using UnityEngine.Networking; // UnityWebRequest のための参照
using System; // Serializable のための参照
public class Term1_4_Chapter01_CubeEvent01 : MonoBehaviour, IPointerClickHandler
{
// アクセスする API の URL
// https://www.boredapi.com/
string urlAPI = "https://www.boredapi.com/api/activity?participants=1";
// 受信した JSON データを Unity で扱うデータにする ResponseData ベースクラス
[Serializable]
public class ResponseData
{
// activity というプロパティ名で string 型で変換
// activity だけ取得
public string activity;
}
void Start()
{
}
public void OnPointerClick(PointerEventData eventData)
{
// マウスクリックイベント
// HTTP リクエストを非同期処理を待つためコルーチンとして呼び出す
StartCoroutine("GetData");
}
// GET リクエストする本体
IEnumerator GetData()
{
// HTTP リクエストする(GET メソッド) UnityWebRequest を呼び出し
// アクセスする先は変数 urlGitHub で設定
UnityWebRequest request = UnityWebRequest.Get(urlAPI);
// リクエスト開始
yield return request.SendWebRequest();
// 結果によって分岐
switch (request.result)
{
case UnityWebRequest.Result.InProgress:
Debug.Log("リクエスト中");
break;
case UnityWebRequest.Result.Success:
Debug.Log("リクエスト成功");
// コンソールに表示
Debug.Log($"responseData: {request.downloadHandler.text}");
// ResponseData クラスで Unity で扱えるデータ化
ResponseData response = JsonUtility.FromJson<ResponseData>(request.downloadHandler.text);
// MessageText に結果テキスト割り当て
this.transform.Find("MessageText").GetComponent<TextMesh>().text = response.activity;
break;
}
}
void Update()
{
}
}
質疑応答
ここまでで質問があればどうぞ!