Node.js
PDF
TypeScript
DocBase

DocBaseから記事をAPIで取得してPDFに変換できるライブラリを作ってみた。

概要

node-docbase-sdk使って、DocBaseから記事をAPIで取得してPDFに変換できるライブラリdocbase-pdfを作成し、オープンソースとして公開したので記事にしました。

node-docbase-sdkについてはこちらを参照してください。

出力したPDFのサンプル

以下、DocBase記事のMarkdown出力したPDFのサンプルです。

公開したライブラリ(npm)

https://www.npmjs.com/package/docbase-pdf

インストール方法

$ npm install docbase-pdf --save

実装について(TypeScript)

DocBasePdfオブジェクト

  • DocBasePdfオブジェクトを使ってをDocBaseから記事を取得し、PDFを出力します
  • const docBasePdf: DocBasePdf = new DocBasePdf(DOC_BASE_API_TOKEN, TEAM_NAME);DocBasePdfオブジェクトを準備してください。
  • DOC_BASE_API_TOKENには、DocBaseのアクセストークンを設定してください。アクセスートークンの取得方法は、以下、公式マニュアルを参照してください。
  • process.env.DOC_BASE_API_TOKENを取得するには、コマンド実行時に環境変数としてDOC_BASE_API_TOKENを設定してください。
    • コマンド実行例: $ DOC_BASE_API_TOKEN=*** node .
  • TEAM_NAMEは、domainを指定してください
    • 例えば、https://hoge.docbase.ioというURLでDocBaseを利用している場合、const TEAM_NAME='hoge'です。
DocBasePdfオブジェクト
// An access token
const DOC_BASE_API_TOKEN = process.env.DOC_BASE_API_TOKEN;
const TEAM_NAME = 'TEAM_NAME';

const docBasePdf: DocBasePdf = new DocBasePdf(DOC_BASE_API_TOKEN, TEAM_NAME);

サンプルコード(TypeScript)

下記、サンプルコードを実行すると、指定した記事IDのPDF検索キーワードに合致したPDFdocsディレクトリに出力されます。

import { DocBasePdf } from './DocBasePdf';
import { MemoCondition } from 'node-docbase-sdk/lib/conditions/MemoCondition';

// Get DocBaseAPI Token from cli.
// ex.
//   $ DOC_BASE_API_TOKEN=<DOC_BASE_API_TOKEN> node .
const DOC_BASE_API_TOKEN = process.env.DOC_BASE_API_TOKEN;
const TEAM_NAME = 'TEAM_NAME';

// クライアント生成
const docBasePdf: DocBasePdf = new DocBasePdf(DOC_BASE_API_TOKEN, TEAM_NAME);

// メモの検索キーワード
const KEYWORD = 'DOCBASE_API_TEST';

// PDF出力先ディレクトリ
const outputPath = 'docs';

// 取得するメモID
// https://${TEAM_NAME}.docbase.io/posts/${memoId}
const memoId = 347796;

async function main() {

  // メモIDを指定してPDFを取得します。
  await docBasePdf.getByMemoId(memoId, outputPath);

  // 検索条件を指定してPDFを取得します。
  const condition: MemoCondition = <MemoCondition>{};
  condition.q = KEYWORD;
  await docBasePdf.getByCondition(condition, outputPath);
}

// == Main ==
main().catch((error) => {
  console.log(error);
});

サンプルプロジェクト

GitHubにサンプルプロジェクト作成しておきました。上記コードをすぐに検証できるかと思うので、よければご利用ください。

https://github.com/YukiFujisawa/docbase-pdf-sample

参考記事