10
9

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 APIを用いた Qiita:Teamへの一括投稿

Posted at

動機

自分の所属するグループは急遽,Qiita:team を導入することになり,
「元々テキストで共有していたTipやノウハウのファイルを,Qiita Teamに移行したい」
とのこと...まずやってみることにしました.

→「ウェブ経由でテキストがいつでもみれるじゃん」
→「タグ付けして,簡単に管理してみよう」
→「チーム内でメンションを飛ばして,読んでもらうことができる」
などなど良さそうなことが思いついたので...
Qiita APIで一括投稿を実装してみました.

つまずいた部分

軽い気持ちで,実装を初めたのですがいくつか問題にぶつかりました.

  1. "tags"の重複配列で不具合
  2. textファイルのエンコードがutf-8に統一
  3. ディレクトリごとにタグを追加

1. 'tags'の配列

Qiita API(http://qiita.com/docs/api#14) によると,
inputのtagsにはnameとversionを入れることができます.

before.json
{
    "title": "test",
    "body": "This is a test posting.",
    "tags": {
        "name": "tips"
    },
    "team_url_name": "ourteam"
}

という感じにしていましたが...

after.json
{
    "title": "test",
    "body": "This is a test posting.",
    "tags": [
        {
            "name": "tips"
        }
    ],
    "team_url_name": "ourteam"
}

こちらならいけました.初歩的なミスです.

2. textファイルのエンコードがutf-8に統一

Macにおいて,shift-jisをutf-8に変換してみるも,
なぜか読み込めないテキストファイルが複数あることに気付きました.
cotEditorで開いてみると...Windows DOS?

調べてみるとcp932という文字コードらしく,
Pythonで実装したコードでは,shift-jisとは別に認識されているようでした.

3. ディレクトリごとにタグを追加

任意のディレクトリ内におけるtextファイルを投稿する際,
そのディレクトリ名をタグに入れることにしようと考えました.
しかし,文字列を効率良く得る方法がわからず,

file_name, ext = os.path.splitext(file)
tag_line = files[len(path)+1:]
tag_list = tag_line.split('/')

ファイル名と拡張子を分けて,
path以下の文字列を'/'で切り取る
と,実装しながら「あぁ,もっと賢い方法があるのだろうな」
そう思いながらコーディングしていました.
(一応,この方法で問題なくタグとして文字列を配列で取得できました.)

実装後

よく考えてみたら,投稿したアカウントしか編集ができないため,
後に手動で「共同編集にする」と変更しました,トホホ.

この件について,Qiitaさんに問い合わせたところ,
開発中の Qiita API v2 にて対応だそうです.
楽しみです.

サンプル

10
9
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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?