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

  • 2
    Like
  • 0
    Comment

前回のおさらい

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内の画像パスを相対パスに書き換える対応

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