pukiwikiの記事を流し込む のバックアップ(No.1)

更新


プログラミング/svelte

本格的に移行するかどうかは分からないけど

このサイトは pukiwiki を使って作られていて、 どうやら全部で 500 ページくらいあるみたい(え?!

これをデータとして流し込んでみるとブログっぽい雰囲気を醸し出せそう。

  • 個々のページが pukiwiki 文法なのか markdown 文法なのかを表すフラグを用意する
  • pukiwiki 文法の場合、表示の際に pukiwiki → markdown → html の変換を行う

sqlite では enum は使えないらしいので該当項目は Int で我慢する。

prisma/schema.prisma

  model Article {
    id Int @id @default(autoincrement())
    author User @relation(fields: [authorId], references: [id]) 
    authorId String @map("author_id")
    title String
    body String
    newRevisionId Int? @unique @map("new_revision_id")
    oldRevision Article? @relation("ArticleRevision", fields: [newRevisionId], references: [id])
    newRevision Article? @relation("ArticleRevision")
    createdAt DateTime @default(now()) @map("created_at")
    deletedAt DateTime? @map("deleted_at")
    attachments Attachment[]
+   syntax Int @default(0) // 0:MARKDOWN, 1:PUKIWIKI
 
    @@index([deletedAt, title, createdAt])
    @@index([newRevisionId, deletedAt, title])
    @@index([newRevisionId, deletedAt, createdAt])
  }
LANG: console
$ pnpm prisma migrate dev --name "add syntax column to Article"

データの取り込み

pukiwiki/wiki に E38398E383ABE38397.txt みたいな訳の分からない名前のファイルがずら~っとあって、 これらが記事の本文

ファイル名は記事タイトルを英文字も全部含めて encodeURIComponent 的な変換をして % を取り除いたもの

日付はファイルの最終編集日時から取れる

このほかに backup に E38182E38184E38195E381A4.gz みたいなファイルがたくさんあって、ここに編集履歴が入っている。

>>>>>>>>>> 1100902204

のように10個の ">" に続けてスペース、10桁の数値が続く行がセパレータになっていて、 間に昔の記事が挟まる。

https://www.yoheim.net/blog.php?q=20141002

によれば zlib を使うと .gz ファイルを node だけで解凍できる。

数値は unix timestamp なので、1000 を掛けると javascript で Date にできる
https://qiita.com/shirokurotaitsu/items/5efd855900ec6135bbab

これだけの情報があれば取り込みは簡単そう。


Counter: 335 (from 2010/06/03), today: 2, yesterday: 1