読者です 読者をやめる 読者になる 読者になる

エンジニア、オールインも辞さない

スタートアップやってます。Web系、アプリ系の話題多し。好きなことはポーカー、ウイスキー、アウトドア。

ParseのデータをPHPスクリプトを使用してjson形式で保存する

Parseのデータの管理って皆さんどうやっているのでしょうか?稼働中のシステムのDBのデータは大変重要なデータを含みますので、常にバックアップを取っておきたいところですよね。バックアップなしのシステム運用は商用サービスをやっている限りはユーザ影響が出るという意味で禁忌かと思います。

さてParseでは親切なことにダッシュボードからデータのexport機能が提供されております。

f:id:splitaces:20160526164716p:plain

しかし悲しいことに、完全にマニュアル操作が要求されます。自動的にレプリケーションしてくれるほど優しい設計にはなっていません。毎日毎日手作業でポチポチバックアップできる人なんてそういないわけですから、おとなしくシステムで処理する方法を検討していきましょう。

今回使うのはParseのphp-sdkです。githubにおいてあります。これを使うとPHPからParse上のデータへアクセスすることができます。

githubに詳しいことが書いてあるので大きな流れだけ書くと、

1.(入ってなかったら)composerをインストールします
2.composer経由でparse-php-sdkをインストールします
3.使いたいシステムで自分のParseのApplicationId, REST API Key, Master Keyを設定します

という感じです。

個人的にcomposerは変な依存ができるのであんま好きではないのですが仕方ありません。コマンドラインからでもNetBeansからでもインストールできますので好きな方をお選びください。NetBeansからの方が簡単かな。

インストールが完了するとvendorディレクトリの下にparseディレクトリができて、その中にphp-sdkがあるという構成になっているはずです。

この状態でプロジェクト内にphpスクリプトを作成し、parseへ接続していきます。

<?php
date_default_timezone_set('Asia/Tokyo');
require 'vendor/autoload.php';

// データ取得数
$limitCount = 1000;
// skip
$skip = 0;

// key
$appId = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;  
$restKey = ‘yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy’;  
$masterkey = ‘zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz’;

 
// 情報を取得したいClass名
$className = "Note";

if ($className == "Installation") {
        $url = 'https://api.parse.com/1/installations';
    } else if ($className == "User") {
        $url = 'https://api.parse.com/1/users';
    } else {
        $url = 'https://api.parse.com/1/classes/' . $className;
    }
    $params = '?limit=' . $limitCount;
    $params .= '&skip=' . $skip;


    $headers = array(
        "X-Parse-Application-Id: $appId",
        "X-Parse-REST-API-Key: $restKey",
        "X-Parse-Master-Key:  $masterkey"
    );

    $handle = curl_init();
    curl_setopt($handle, CURLOPT_URL, $url);
    curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt( $handle, CURLOPT_URL, $url . $params );

    $data = curl_exec($handle);
    curl_close($handle);

    $results = json_decode($data);

 

このphpスクリプトを実行すると、ソース内で指定したクラスのデータを引っこ抜いてこられます。データ形式jsonなので別のmongoDBに突っ込んだりするのにも便利かと思います。なお、クラス名を引数に指定しつつ全件を自動的にすべて持ってくるようなことも可能です。Parseでは一度のリクエストでは1000件しか持ってこられないので、ちょっと工夫が必要です。そうしたちょっとリッチなスクリプトに興味があるがよくわからんという方のために全文を下記にて公開していますので欲しい方はどうぞ。(ソースコードって有料でもニーズがあるかどうかのトライアルも兼ねてます。)

note.mu