2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QiitaもしくはQiita:Teamからmdをダウンロードするコード

Posted at

前回のおさらい

Qiita:Teamを移行するかもしれない件について

Qiita:Teamから移行するかもしれないので、データを取れるようにしてみました。
今まではcurlを叩いてほうほう、とうなづいていたのですが、今度はコーディングです。
ベースはpython3でできております。
python2?マルチバイトの処理が面倒なので使わないですよ。

コードを書いた結果

なんか3時間近くコーディングして、httpライブラリってどうやって使うんだっけ、みたいなところをやってたわけですが、一応ダウンロードまでできました。
引数チェックしてないのは、用途が限られているからであって、他に利用価値がないからです。

#!/usr/bin/env python
# coding: utf-8

import sys
import json
import urllib.request
import urllib.parse

apiUrl = ''
apiKey = ''
teamName = ''
api = '/api/v2/items?per_page=100'

def argmentscheck():
    global apiUrl
    global apiKey
    global teamName

    if len(sys.argv) == 2:
        apiKey = sys.argv[1]
        apiUrl = 'https://qiita.com'
        print('Qiitaからデータを抜き出します')
    elif len(sys.argv) == 3:
        apiKey = sys.argv[1]
        teamName = sys.argv[2]
        apiUrl = 'https://' + teamName + '.qiita.com'
        print('Qiita:Teamの' + teamName + 'からデータを抜き出します')
    else :
        print('引数の数が何かおかしいです')

def main():
    headers = {"Authorization" : "Bearer " + apiKey}
    requestUrl = apiUrl + api
    request = urllib.request.Request(requestUrl, None, headers)
    response = urllib.request.urlopen(request)
    jsonRaw = response.read().decode('utf-8')
    json.dumps(jsonRaw, ensure_ascii=False)
    jsons = json.loads(jsonRaw)

    for oneWrote in jsons:
        print(oneWrote)

if __name__ == '__main__':
    argmentscheck()
    main()

parseいらないんですけど、なぜか毎回書いてしまう…。

使い方

事前準備として、python3の最新版を持ってきます。

brew install python3

pip3は使いません。使わなくて良いように標準ライブラリのみを利用しています。

python3 qiita-download.py {APIキー} {Qiita:TeamのID}

具体例はこんな感じでしょうかね

Qiitaから引っ張ってくる場合は、

python3 qiita-download.py abcdefghijklmn

という具合でいけるかと思います。

Qiita:Teamから引っ張ってくる場合は、

python3 qiita-download.py abcdefghijklmn zyx

jsonのデータが取れたまではいいけど、どう使うか

試しに以下の箇所を書き換えてみるといいでしょう。

        print(oneWrote)

例えばタイトルが欲しければ

        print(oneWrote['title'])

他に記事そのもののURLが欲しければ、

        print(oneWrote['url'])

こんな感じで取得できます。

あとはpython使える人なら楽勝なはず。
pythonが使えなくてもコーディングが複雑じゃない分理解しやすいと思います。

これからやること

残タスクはざっとこんな感じです。

  • 年ディレクトリ作成処理
  • 月ディレクトリの作成処理
  • urlに.mdを加えて素のMarkdownのダウンロード
  • Qiita:Teamからイメージを取得する処理
  • Qiita:Team内の画像パスを相対パスに書き換える対応

できたらまた記事投稿します。それでは。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?