Simplenoteを自動でバックアップしたい、できればPHPで

以前使ってて、最近また使おうとしている、AutomatticのSimplenoteなのですが、前使ってた時に何回かノートがおかしくなったことがありました。原因はSublime Textの拡張機能のせいだったのかもしれませんが……

自動でバックアップとかできんのかなぁと調べたところ、下のを見つけました。hiroshiさん、ありがとうございます。

GitHub – hiroshi/simplenote-backup: Backup simplenote as text files

でもPython……、いやこのスクリプトを動かすのは問題ないのですが、PHPの方がお手軽かなぁと。

Simperiumのライブラリが使われてて、その元が下のだそうでリファレンス見ながらPHPにしてみました。

Simperium HTTP – Getting Started

 

下のプログラムは色々と手抜きです。適当に修正して、cronとかで動かしてください。

実行すると、全てのノートをひとつのテキストファイルとして出力します。出力内容はノートのID、タグ、本文、区切り線となっていて、ゴミ箱に入ったノートはタグにTrashを追加してます。

トークンの調べ方はGitHub – hiroshi/simplenote-backupのInstallation 3. Get your tokenを御覧ください。

 

<?php

echo date('Y-m-d H:i:s') . ' start<br />';

if (!function_exists('curl_reset')) {
    function curl_reset(&$ch){
        $ch = curl_init();
    }
}

$your_token = 'abcdefghijklmnopqrstuvwxyz123456'; // 32桁の英数字

$baseurl = 'https://api.simperium.com/1/chalk-bump-f49/note/index?data=1';
$header = array('X-Simperium-Token: ' . $your_token);

$mark = '';
$index = array();
$ch = curl_init();
do {
    $url = empty($mark) ? $baseurl : $baseurl . '&mark=' . $mark;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $dump = json_decode(curl_exec($ch), true); // 連想配列で
    $mark = isset($dump['mark']) ? $dump['mark'] : ''; 
    $index = array_merge($index, $dump['index']);
    curl_reset($ch);
} while ($mark != '');
curl_close($ch);

$text = '';
foreach ($index as $note) {
    // if ($note['d']['deleted']) continue; // ゴミ箱のを省略するなら
    $text .= $note['id'] . "\n";
    if ($note['d']['deleted']) $note['d']['tags'] = array_merge(array('Trash'), $note['d']['tags']);
    $text .= implode(', ', $note['d']['tags']) . "\n";
    $text .= $note['d']['content'] . "\n- - - - - - - - - - - - - - - - - - - - \n";
}

file_put_contents('simplenote.txt', $text);

echo date('Y-m-d H:i:s') . ' end';