FlashからJSON書き出し

タイトルの通り、FlashからJSONファイルの書き出しをやってみました。

今回は、Flashからphpファイルに値を渡して、それをJSON形式で書き出す」という流れです。

こちらのサイトにphpFlashの連携方法が書かれていたので、そちらを参考にしつつ行いました。
AS3でPHPと通信する



【ConnectPHP.as】

phpファイルにデータを送信 + phpファイルを実行


package connectphp
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
public class ConnectPHP extends EventDispatcher
{
public static const COMPLETE:String = "connectPHP_complete";
/**
* コンストラクタ
*/
public function ConnectPHP(url:String = null, variables:Object = null)
{
if (url && variables)
{
sendAndLoad(url, variables);
}
}
/**
* phpファイルにデータの内容を送信する
* @param {String} : phpデータのパス
* @param {String} : データの中身
*/
public function sendAndLoad(url:String, variables:Object):void
{
var urlRequest:URLRequest = new URLRequest(url);
// php に送信するデータをオブジェクト形式で保存する
var urlVariables:URLVariables = new URLVariables();
// 引数のデータを全て渡す
for (var i:String in variables)
{
urlVariables[i] = variables[i];
}
// urlRequest.dataに渡す
urlRequest.data = urlVariables;
// phpへの送信方法
urlRequest.method = URLRequestMethod.POST;
// phpファイルをリクエスト
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.load(urlRequest);
}
/**
* phpファイルの呼び出しが終了したときのイベントハンドラ
*/
private function completeHandler(e:Event):void
{
// イベントディスパッチ
dispatchEvent(new Event(COMPLETE));
}
}
}




【data.php

phpファイル

このファイルを通せば、"name".jsonというJSON形式のファイルが出来上がります。



// 保存する中身
$name = $_POST["name"];
$userData = $_POST["userData"];

// jsonデータ
$dataFile = "$name.json";

// 書き込むデータ
$contents = "$userData";

// データを開く(データ名が存在しない場合は、作成を試みる)
$fp = fopen($dataFile, "w");
// データを書き込む
if(fwrite($fp, $contents) === false) { // 型も値も含めて厳密に比較してくれる
echo "書き込めなかった";
exit;
}

fclose($fp);

?>




【Main.as】

メインのドキュメントクラス



package connectphp
{
import flash.display.MovieClip;
import flash.events.Event;
import connectphp.*;
public class Main extends MovieClip
{
/**
* コンストラクタ
*/
public function Main()
{
// 保存したいデータのオブジェクトを作る
var userData:Object = {
// 名前
name: "tanaka",
// 買い物リスト
item:[
"ファブリーズ",
"ジョイ",
"キャベツ",
"カレールー",
"じゃがいも"
]
};
// オブジェクトをJSON形式の文字列に変換
var userDataForJson:String = JSON.stringify(userData);
// 送るデータ
var sendData:Object = new Object();
sendData.name = userData.name.toString();
sendData.userData = userDataForJson;
// データをphpに送る
var connectPHP:ConnectPHP = new ConnectPHP();
connectPHP.addEventListener(ConnectPHP.COMPLETE, completeHandler);
connectPHP.sendAndLoad("data.php", sendData);
}
private function completeHandler(e:Event):void
{
trace("送信完了");
}
}
}