LoginSignup
15
16

More than 5 years have passed since last update.

Kobito.appで書いた記事をまるごとMarkdownファイルに書き出すPHP

Posted at

Kobito.appのストレージはSQLiteなので、PDOを使うと読み込みができます。
下のPHPを実行したディレクトリに、YYYYMMDD_記事名.md というファイル名でエクスポートされます。

KobitoExport.php
<?php

$dbPath = $_ENV['HOME'].'/Library/Kobito/Kobito.db';

$pdo = new PDO('sqlite:'.$dbPath);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$rows = $pdo->query("SELECT * FROM ZITEM");

foreach ( $rows as $row )
{
    $created = new DateTime('now', new DateTimeZone('GMT'));
    $created->setTimestamp($row['ZCREATED_AT']);
    $created->add(new DateInterval('P31Y')); // Objective-Cのタイムスタンプは2001-01-01 GMT始まり
    $created->setTimezone(new DateTimeZone('Asia/Tokyo'));

    $prefix   = $created->format('Ymd').'_';
    $filename = $prefix.$row['ZTITLE'].'.md';
    $filename = convertFileName($filename);

    if ( file_exists($filename) === true )
    {
        throw new RuntimeException(sprintf('File already exists: %s', $filename));
    }

    file_put_contents($filename, $row['ZRAW_BODY']);

    echo $filename, PHP_EOL;
}

function convertFileName($value)
{
    $value = str_replace(" ", "_", $value);
    $value = str_replace("\\", "¥", $value);
    $value = str_replace("/", "/", $value);
    $value = str_replace(":", ":", $value);
    $value = str_replace("*", "*", $value);
    $value = str_replace("?", "?", $value);
    $value = str_replace("\"", "”", $value);
    $value = str_replace("<", "<", $value);
    $value = str_replace(">", ">", $value);
    $value = str_replace("|", "|", $value);

    return $value;
}
15
16
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
15
16