Lab

Cocos2d-x v3:Parseの利用 : データを扱う

 Tag :  Published : 2014-8-28

Pocket

アプリ開発でサーバー周りの機能が必要な時に便利なサービス、Parse.comを利用してみます。
データを送信、受信、削除します。

データの送信

こちらのページで行ったParseの設定を想定しています。
データの格納場所としてColNum、ColStringを作成しました。

Parse.comに送信準備

それではデータを送信します。
『ColNum』に100を、『ColString』にABCを送信してみます。
データはJSON形式です。JSONに関してはこちらで書いています。

    // HTTPリクエスト用オブジェクト
    auto r = new HttpRequest();
    
    // ヘッダーに認証情報の設定
    r->setUrl("//api.parse.com/1/classes/SampleClass"); // https:を付けてください。
    vector<string> h;
    h.push_back("X-Parse-Application-Id: 【Application ID】");
    h.push_back("X-Parse-REST-API-Key: 【REST API Key】");
    h.push_back("Content-Type: application/json");
    r->setHeaders(h);
    
    // POST送信
    r->setRequestType(HttpRequest::Type::POST);
    
    // 送りたいデータ(JSON形式)をセット
    auto data = "{\"ColNum\":100, \"ColString\":\"ABC\"}";
    const char* buffer = data;
    r->setRequestData(buffer, strlen(buffer));
    
    // コールバック
    r->setResponseCallback(CC_CALLBACK_2(HelloWorld::callbackFunc, this));
    
    // リクエスト
    network::HttpClient::getInstance()->send(r);
    r->release();
    

【Application ID】と【REST API Key】は、それぞれアプリ登録時に発行されます。
SettingのApplication Keysで調べる事ができます。

Parse.comのApplication Keys

以下は、callbackFuncです。ユニークで発行されるobjectIdカラムの値を取得してみます。

void HelloWorld::callbackFunc(HttpClient* client, HttpResponse* response){
    if (response->isSucceed()) {
        //objectIdを取得
        std::vector<char> *buffer = response->getResponseData();
        
        char data[buffer->size()];
        for (int i = 0; i < buffer->size(); i++) {
            data[i] = buffer->at(i);
        }
        
        Json* json = Json_create(data);
        string objectId = Json_getString(json, "objectId", "");
        log("Suceeded! IDは%sです", objectId.c_str());
    }else{
        log("Failed");
    }
}
    

バッチリデータが入りました。

Parse.comにデータ送信

データの受信

送ったデータを取得してみます。
【Application ID】と【REST API Key】は前述の通り、【objectId】は先ほどcallbackFuncで返したobjectIdです。

    HttpRequest* r = new HttpRequest();
    
    r->setUrl("//api.parse.com/1/classes/SampleClass/【objectId】"); // https:を付けてください。
    vector<string> h;
    h.push_back("X-Parse-Application-Id: 【Application ID】");
    h.push_back("X-Parse-REST-API-Key: 【REST API Key】");
    r->setHeaders(h);
    
    // GET送信
    r->setRequestType(HttpRequest::Type::GET);

    // callback
    r->setResponseCallback(CC_CALLBACK_2(HelloWorld::callbackFunc2, this));
    
    // request
    HttpClient::getInstance()->send(r);
    r->release();
    

callbackFunc2です。

void HelloWorld::callbackFunc2(HttpClient* client, HttpResponse* response){
    if (response->isSucceed()) {
        std::vector<char> *buffer = response->getResponseData();
        
        char data[buffer->size()];
        for (int i = 0; i < buffer->size(); i++) {
            data[i] = buffer->at(i);
        }
        
        Json* json = Json_create(data);
        
        //ColNum
        int dataNum = Json_getInt(json, "ColNum", 0);
        log("ColNumは%dです", dataNum); // cocos2d: ColNumは100です
        
        //ColString
        string dataString = Json_getString(json, "ColString", "");
        log("ColStringは%sです", dataString.c_str()); // cocos2d: ColStringはABCです
    }else{
        log("Failed");
    }
}
    

データの削除

データを削除してみます。
【Application ID】と【REST API Key】、【objectId】は前述の通りです。

    HttpRequest* r = new HttpRequest();
    
    r->setUrl("//api.parse.com/1/classes/SampleClass/【objectId】"); // https:を付けてください
    vector<string> h;
    h.push_back("X-Parse-Application-Id: 【Application ID】");
    h.push_back("X-Parse-REST-API-Key: 【REST API Key】");
    r->setHeaders(h);

    // DELETE送信
    r->setRequestType(HttpRequest::Type::DELETE);
    
    // callback
    r->setResponseCallback(CC_CALLBACK_2(HelloWorld::callbackFunc3, this));

    // request
    HttpClient::getInstance()->send(r);
    r->release();
    

callbackFunc3です。

void HelloWorld::callbackFunc3(HttpClient* client, HttpResponse* response){
    if (response->isSucceed()) {
        log("Suceeded");
    }else{
        log("Failed");
    }
}
    

成功すると、ParseのData Browserから該当箇所が消えているはずです。

pageTop