Skip to content
Qiitaの記事を画像とコメントも含めて全部DLする
JavaScript Dockerfile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci feat(ci): add circleci config Mar 6, 2020
.github/workflows fix(ci): run npm test Mar 6, 2020
.vscode feat(test): add test Mar 6, 2020
bin 1.5.0 Mar 8, 2020
test feat(test): add comment test Mar 6, 2020
.dockerignore feat: add Docker Mar 7, 2020
.editorconfig chore: CRLF to LF Mar 6, 2020
.eslintignore fix(eslint): more strict rules Mar 5, 2020
.eslintrc.json chore(prettier): "arrowParens": "avoid" Mar 22, 2020
.gitignore
.npmignore feat(npm): add .npmignore Mar 6, 2020
Dockerfile fix(docker): use npm ci Mar 8, 2020
LICENSE feat: add license file Dec 25, 2017
README.md 1.5.0 Mar 8, 2020
package-lock.json chore(npm): update dependency Mar 22, 2020
package.json chore(npm): update dependency Mar 22, 2020

README.md

qiita_export_all

Node CI CircleCI Greenkeeper badge

NPM

Qiita v2 API を使って自身の投稿記事全てをエクスポートするツール。

Motivation

stakiran/qiita_exporterが類似ツールとしてすでにある。しかし

  • Python 2である
  • 画像のダウンロードをやってくれない
  • 投稿数が100を超えて取得できない
  • HTMLデータやコメントなどのMarkdown以外のデータを保存してくれない
  • Pythonわからない

という不満があった。自分がよくわかってるのはC++かJavaScriptだ。しかしC++でHTTPS通信とか地獄すぎる。JavaScriptしかないやろ。しかもasync/awaitがある。これはいい。

Requirement

  • Node.js 10.x以降
  • npm

Installation

Node.js & npm

nvm もしくは nodist を使ってNode.jsとnpmをインストールすることを推奨します。

nvm

nvm install 12.x
nvm use 12.x

nodist

nodist + 12.x
nodist 12.x
nodist npm match

Qiita API Access Token

Qiita API Access Tokenを手に入れます。

  1. Qiitaにログインする
  2. 設定画面から個人用アクセストークンを発行する

説明のため、得たtokenが9226168a5ef65f8e81153b460e7c78f8b8e53394とします。各自読み替えてください。

cmd.exe

set QIITA_ACCESS_TOKEN=9226168a5ef65f8e81153b460e7c78f8b8e53394

sh

export QIITA_ACCESS_TOKEN=9226168a5ef65f8e81153b460e7c78f8b8e53394

Use

npx qiita_export_all

Docker

Node.js環境がない場合でもDockerが利用可能な場合は、DockerでQiita記事のバックアップができます。

$ # リポジトリのクローンと移動
$ git clone https://github.com/yumetodo/qiita_export_all.git
$ cd qiita_export_all
$ # コンテナの作成
$ docker build -t qiita_export_all:local .
$ # コンテナの起動とアプリの実行。./export に出力されます(token は要置き換え)
$ docker run \
    --rm \
    --env QIITA_ACCESS_TOKEN=9226168a5ef65f8e81153b460e7c78f8b8e53394 \
    -v $(pwd)/export:/home/node/export \
    qiita_export_all:local
...
$ # 出力されたファイルの確認
$ tree ./export
...
  • 確認済み Docker version v19.03.5 (Intel, x86_64, AMD64)

Command Line options

Usage: qiita_export_all [options]

Options:
  -V, --version        output the version number
  -u, --user-id <id>   Qiita user id you want to download(default: the user who get QIITA_ACCESS_TOKEN).
  -o, --output <path>  Write output to <path> instead of current directory.
  --no-debug           disable print api limit per request
  -h, --help           output usage information

Note

  • md ファイルは UTF-8 でエクスポートします
  • 投稿数が100を超えていても取得できます
  • WindowsではMAX_PATHを超えるとエラーになる気がします
  • カレントディレクトリにRead/Writeの権限がないとエラーになります
  • directory名の一部にQiita記事のタイトルを使用しますが、パスとして無効な文字は削除されます。これはsanitize-filenameに丸投げしています。

Output

カレントディレクトリに出力します。生成されるdirectory treeは

.
├── img
│   ├── 0_7.png
│   ├── 1_7.png
┊   ┊
├── items
│   ├── [ネタ]私のTLのみんながpure HTMLが何かを理解してくれない件
│   │   ├── comments
│   │   │   ├── 2017-02-02T145121+0900
│   │   │   │   ├── index.html
│   │   │   │   ├── info.json
│   │   │   │   └── README.md
│   │   │   ├── 2017-02-02T153542+0900
│   │   │   │   ├── index.html
│   │   │   │   ├── info.json
│   │   │   │   └── README.md
│   │   │   ├── 2017-02-02T160946+0900
│   │   │   │   ├── index.html
│   │   │   │   ├── info.json
│   │   │   │   └── README.md
│   │   │   ├── 2017-02-02T173054+0900
│   │   │   │   ├── index.html
│   │   │   │   ├── info.json
│   │   │   │   └── README.md
│   │   │   └── 2017-02-02T181039+0900
│   │   │       ├── index.html
│   │   │       ├── info.json
│   │   │       └── README.md
│   │   ├── index.html
│   │   ├── info.json
│   │   └── README.md
┊   ┊

のようなものです。

Development

Download

gitなりzipでDLしてあげればよいです。

git clone https://github.com/yumetodo/qiita_export_all.git
cd qiita_export_all
npm ci

Use

npm start

でとりあえずの実行はできます。

Example

$ npm start

> qiita_export_all@1.2.0 start /home/yumetodo/qiita_export_all
> node bin/index.js

info: Requesting items...
request limit remain: 995/1000
request limit remain: 994/1000
info: 110 items found.
info: creating image save directory...
info: created.
info: Requesting comments/images...
request limit remain: 993/1000
request limit remain: 992/1000
request limit remain: 991/1000
request limit remain: 990/1000
request limit remain: 989/1000
request limit remain: 988/1000
request limit remain: 987/1000
When fetch https://scan.coverity.com/projects/1316/badge.svg (5886b2c0c421c24c909b/item), FetchError: request to https://scan.coverity.com/projects/1316/badge.svg failed, reason: Parse Error: Invalid header value char
request limit remain: 986/1000
request limit remain: 985/1000
request limit remain: 984/1000
request limit remain: 983/1000
request limit remain: 982/1000
request limit remain: 981/1000
request limit remain: 980/1000
request limit remain: 979/1000
request limit remain: 978/1000
request limit remain: 977/1000
request limit remain: 976/1000
request limit remain: 975/1000
request limit remain: 974/1000
request limit remain: 973/1000
request limit remain: 972/1000
request limit remain: 971/1000
request limit remain: 970/1000
request limit remain: 969/1000
request limit remain: 968/1000
request limit remain: 967/1000
request limit remain: 966/1000
request limit remain: 965/1000
When fetch https://pbs.twimg.com/media/C3kcEbkUcAAsbkn.jpg (34adcaeddaab8b58ab47/item), Error: Request failed with status code 404
request limit remain: 964/1000
request limit remain: 963/1000
request limit remain: 962/1000
request limit remain: 961/1000
request limit remain: 960/1000
request limit remain: 959/1000
request limit remain: 958/1000
request limit remain: 957/1000
request limit remain: 956/1000
request limit remain: 955/1000
request limit remain: 954/1000
request limit remain: 953/1000
request limit remain: 952/1000
request limit remain: 951/1000
request limit remain: 950/1000
request limit remain: 949/1000
request limit remain: 948/1000
request limit remain: 947/1000
request limit remain: 946/1000
request limit remain: 945/1000
request limit remain: 944/1000
request limit remain: 943/1000
request limit remain: 942/1000
request limit remain: 941/1000
request limit remain: 940/1000
request limit remain: 939/1000
request limit remain: 938/1000
request limit remain: 937/1000
request limit remain: 936/1000
request limit remain: 935/1000
info: Request finidhed.
info: Replacing Image path...
info: Replace finished.
info: Writing items/comments...
write finished.

License

Watch LICENSE.

Special thanks

You can’t perform that action at this time.