見出し画像

Qiita:Teamの記事をCrowiに移行する作業log

note開発チームで使っていたQiita:Teamの記事をCrowiに移行する作業を去年行いました。
その時の作業手順をCrowiにまとめていたので、それをnoteで公開します。
社内のCrowiに書かれている内容をほぼそのまま公開してるので、若干読みづらい部分もあるかもしれません。
もし「移行してみたいけど、なんか大変そうだなー」と思っている方の参考になればと。

注意書き

そのまま出すとまずい部分は、xxxとかにしてます。
もし同じ作業を行う場合には、xxxを自身の環境のものに変更してください。
それでもうまくいかない等あればコメントでご相談などしていただければと。

以下から本題です。

----- 🍰 -----

Qiita:Teamの記事をCrowiに移行する作業log

1. Qiita:Teamの記事をQiita APIを使ってJSONで取得する

- Qiita APIのドキュメントをざっと読む
- 記事の取得をしたいので、/api/v2/itemsのAPIを使う
   - https://qiita.com/api/v2/docs#get-apiv2items
- QiitaのAPI叩くならqiita-rbが便利
- 以下実行して、どれだけページネーションすればいいのかチェックする
   - Qiita:Team xxxのpage 1で100記事取得するって感じ

qiita -a <qiita access-token> -t xxx list_items page=1 per_page=100 --header

- last確認する
- 以下の場合は https://xxx.qiita.com/api/v2/items?page=10&per_page=100 がlastなので、ページネーションは10

Link: <https://xxx.qiita.com/api/v2/items?page=1&per_page=100>; rel="first",
<https://xxx.qiita.com/api/v2/items?page=2&per_page=100>; rel="next",
<https://xxx.qiita.com/api/v2/items?page=10&per_page=100>; rel="last"

- ページネーション分 APIを叩くスクリプトを作る
- 10くらいなら雑に以下でもいい

qiita -a <qiita access-token> -t xxx list_items page=1 per_page=100 > qiita.json
qiita -a <qiita access-token> -t xxx list_items page=2 per_page=100 > qiita2.json
qiita -a <qiita access-token> -t xxx list_items page=3 per_page=100 > qiita3.json
qiita -a <qiita access-token> -t xxx list_items page=4 per_page=100 > qiita4.json
qiita -a <qiita access-token> -t xxx list_items page=5 per_page=100 > qiita5.json
qiita -a <qiita access-token> -t xxx list_items page=6 per_page=100 > qiita6.json
qiita -a <qiita access-token> -t xxx list_items page=7 per_page=100 > qiita7.json
qiita -a <qiita access-token> -t xxx list_items page=8 per_page=100 > qiita8.json
qiita -a <qiita access-token> -t xxx list_items page=9 per_page=100 > qiita9.json
qiita -a <qiita access-token> -t xxx list_items page=10 per_page=100 > qiita10.json

- 取得したバラバラのJSONを適当に一つのJSONファイルにまとめる
- まとめる際に記事は articles の中身含めるように編集する

{
  "articles": [
       {
           "rendered_body": "<p>hogehoge</p>\n....",
           "coediting": false,
           "comments_count": 0,
           "created_at": "2013-08-30T19:55:32+09:00",
           "group": null,
           "id": "hogehoge",
           "likes_count": 0,
           "private": false,
           "reactions_count": 0,
           "tags": [
               {
                   "name": "twitter",
                   "versions": []
               }
           ],
           "title": "hogehoge",
           "updated_at": "2015-02-19T14:52:19+09:00",
           "url": "https://xx.qiita.com/hogehoge/items/hogehoge",
           "user": {
               "description": "hogehoge",
               "facebook_id": "hogehoge",
               "followees_count": 153,
               "followers_count": 96,
               "github_login_name": "hogehoge",
               "id": "hogehoge",
               "items_count": 21,
               "linkedin_id": "hogehoge",
               "location": "Shibuya, Tokyo",
               "name": "hogehoge hogehoge",
               "permanent_id": 0
           },
           "page_views_count": null
       },                
       .......
  ]
}


2. qiita2crowiでQiita Teamの記事をCrowiに移行する

- メルカリで同じ移行作業する時にb4b4r07さんが作ってたものをforkして、それなりに動くようにした
   - https://github.com/operando/qiita2crowi
- 適当にgo getとかしてきて、qiita2crowi を実行できるようにする
- Qiita APIを使って一つにまとめたJSONを、qiita2crowiに流し込む
- 以下のような感じで実行する

cat qiita.json \
  | ./qiita2crowi \
  -access-token="<crowi access-token>=" \
  -crowi-url="https://xxx.xxx.com/" \
  -page-path="/Qiita Teamから移行したWiki" \
  -qiita-access-token="<qiita access-token>"

- 記事数が多いと数分かかるので、完了するまで待てば終了

サポートしてもらうことで、キンパツは大好物のミスドが食べられます!よろしくお願いします!