16
13

More than 5 years have passed since last update.

UnityからFuelPHPで作成したWebAPIにアクセス

Last updated at Posted at 2014-10-27

概要

Unityからサーバー上にある、FuelPHPで作ったWebAPIにアクセスする方法。
ApacheやPHPやMySQLのインストールや設定や起動の仕方は省略しているので、その辺の知識があってなおかつUnityの基本操作が分かる人向けです。
MySQLのユーザ、パスワードともに rootと仮定して説明しています。

参考文献

・#FuelPHP 5 分で API を実装するチュートリアル(スクリーンキャストあり)
http://blog.omoon.org/20131219/925
・[Unity][MiniJSON]JSONデータを読み込む
http://www.cho-design-lab.com/2013/08/15/unity-minijson-load-json/

試行環境

サーバー側
OS:Amazon Linux AMI release 2014.09
Apache:2.4.10
PHP:5.4.33
MySQL:5.5.40
FuelPHP:1.7.2


クライアント側
OS:Windows 8.1
Unity:4.5.5f1

サーバー側

上にに載せている参考文献の#FuelPHP 5 分で API を実装するチュートリアル(スクリーンキャストあり)をほとんどそのまま使わせていただきます…すこし変えていますが、参考文献の方を覗いたほうがわかりやすいと思います。

DBの用意

$ echo 'create database fuel_dev' | mysql -u root -proot

(FuelPHP インストール時にデフォルトでdevelopment環境でのデフォルトのDBの名前がfuel_dev)

FuelPHPのインストール

$ curl get.fuelphp.com/oil | sh
$ cd /var/www/html #ドキュメントルートへ
$ oil create api

ビルトインサーバは使いません。
http://(各自のサーバーのアドレス)/api/publicにアクセスし以下のようなページが出たらインストール完了
FuelPHP Framework.png

DBの設定

DBの接続のための設定をします。仮定通りなら読み飛ばしてください。

api/fuel/app/config/development/db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',//自分の環境に合わせて変更
            'username'   => 'root',//自分の環境に合わせて変更
            'password'   => 'root',//自分の環境に合わせて変更
        ),
    ),
);

何を作るか

簡単なメモみたいなのを作ります。

http://(各自のサーバーのアドレス)/api/public/memo/write (POST メソッドで)
http://(各自のサーバーのアドレス)/api/public/memo/read (GET メソッドで、JSONを返す)
という2つの URL を用意して、それぞれ、メモの投稿と取得をさせる。

oil generate で model 作成

$ oil generate model memo memo:varchar created_at:timestamp updated_at:timestamp --mysql-timestamp --crud --created-at --updated-at

 Creating model: /Users/omoon/Documents/api/fuel/app/classes/model/memo.php
    Creating migration: /Users/omoon/Documents/api/fuel/app/migrations/001_create_memos.php

となって、model と同時にマイグレーションファイルも作成されている。

そのまま oil r migrate して、テーブルを作成する。

$oil r migrate
Performed migrations for app:default:
001_create_memos

ここでエラーが出るならDBの接続に失敗しているので、DBの設定を参考に間違えてないか確認

ルーティングの設定

fuel/app/config/route.php
//(省略)
    'memo/read' => 'memo/read',
    'memo/write' => 'memo/write',
);

上記の2行を追加。

oil generate で controller 作成

$ oil generate controller memo write read --extends=Controller_Rest

でViewとControllerが自動生成される。
自動生成されたコントローラを以下のように変更

fuel/app/classes/controller/memo.php
<?php
class Controller_Memo extends Controller_Rest
{

    protected $format = 'json';

    public function get_read()
    {
        $memos = Model_Memo::find_all();
        $this->response($memos);
    }

    public function post_write()
    {
        $memo = Input::post('memo');
        Model_Memo::forge(['memo' => $memo])->save();
    }

}

動作確認

$ curl http://(各自のサーバーのアドレス)/api/public/memo/write -d "memo=test1"
$ curl http://(各自のサーバーのアドレス)/api/public/memo/write -d "memo=test2"
$ curl http://(各自のサーバーのアドレス)/api/public/memo/write -d "memo=test3"

http://(各自のサーバーのアドレス)/api/public/memo/readにアクセスして以下の様なJSONを出力していたら成功

[{"id":"1","memo":"test1","created_at":"2014-10-27 13:27:56","updated_at":"2014-10-27 13:27:56"},{"id":"2","memo":"test2","created_at":"2014-10-27 13:28:03","updated_at":"2014-10-27 13:28:03"},{"id":"3","memo":"test3","created_at":"2014-10-27 05:45:01","updated_at":"2014-10-27 13:28:06"}]

これでサーバー側の方は終わりです。

クライアント側

miniJSONの利用準備

わかりにくかったら参考文献の[Unity][MiniJSON]JSONデータを読み込むを参照してください。
https://gist.github.com/darktable/1411710
1.上記のページの「Download Gist」ボタンを押し、圧縮ファイルをダウンロードし、ファイルを解凍、ディレクトリ中の「MiniJSON.cs」を取り出します。

2.UnityのProjectウインドウのAsset内に「Plugins」というディレクトリを作成し、このディレクトリにMiniJSON.csをコピーする。
これで使えるはずです。

実際にスクリプトを書いて書き込み読み出しを行ってみる

スクリプトを作成する

ReadWriteJSON.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using MiniJSON;

public class ReadWriteJSON : MonoBehaviour {

    // Use this for initialization
    void Start () {

        StartCoroutine ("ReadMemo");
    }

    IEnumerator WriteMemo(){
        string url1 = "http://(各自のサーバーのアドレス)/api/public/memo/write";
        WWWForm wwwForm = new WWWForm();
        //指定urlにデータを送信
        wwwForm.AddField( "memo", "test4" );

        WWW gettext = new WWW(url1,wwwForm);
        yield return gettext;


    }


    IEnumerator ReadMemo(){
        //WriteMemoを実行し終わるまで待つ
        yield return StartCoroutine ("WriteMemo");

        //URLからデータを取得
        WWW www = new WWW("http://(各自のサーバーのアドレス)/api/public/memo/read");
        yield return www;

        //Null or empty ならブレイク
        if(!string.IsNullOrEmpty(www.error)){
            Debug.LogError(string.Format("Fail Whale!\n{0}", www.error));
            yield break;
        }
        //データを代入し整形
        string json = www.text;
        IList memo = (IList)Json.Deserialize(json);

        //テスト用にコンソールに書き出し
        foreach(IDictionary memos in memo){
            Debug.Log((string)memos["memo"]);
        }
    }
}

Create EmptyでGameObjectを作成し、先ほど作ったスクリプトをドラッグオンドロップして実行し以下の様にconsoleに出力されたら成功
キャプチャ.PNG

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13