簡単!ファイル一括アップロード(pykintone利用)

Node.js版のファイル一括アップロードを作成しました.
本記事でうまく動作しない場合は,Node.js版をお試しください.

※account.ymlからのkintone認証情報の読み込みでエラーになる可能性があります。
https://developer.cybozu.io/hc/ja/community/posts/4408470300953

pykintoneを利用するとファイル一括アップロードが簡単に実装できます。 今回は、添付ファイルフィールドを含むアプリにCSVからレコードを一括登録するプログラムを紹介します。

実行例

CSVファイル

  • data.csv

    名前,年齢,好きな標識_filepath
    佐藤 一郎,69,hyousiki01/hyousiki01-001.png
    鈴木 二郎,35,hyousiki01/hyousiki01-002.png;hyousiki01/hyousiki01-063.png
    高橋 三郎,51,hyousiki01/hyousiki01-003.png
    :

CSVファイルの1行目にフィールドコードを記述します。 添付ファイルフィールドに関しては「{フィールドコード}_filepath」として、アップロードファイルへのパスで指定しています。 1レコードに複数ファイルを指定する場合は「;」で区切ります。

実行方法

  1. 上記の「data.csv」及び、後述の「post.py」、「account.yml」を同一フォルダに設置する。

  2. コマンドラインでそのフォルダに行き、下記を実行する。

    $ python post.py

実行結果

サンプルコード

  • post.py

    import pykintone
    from pykintone import model
    import pykintone.structure_field as sf
    import codecs
    import csv

    class Record(model.kintoneModel):
    def init (self, app, row):
    super(Record, self). init ()
    for cell_key, cell_val in row.items():
    if ‘_filepath’ in cell_key:
    setattr(self, cell_key.rstrip(‘_filepath’), [sf.File.upload(filepath, app) for filepath in cell_val.split(‘;’)])
    else:
    setattr(self, cell_key, cell_val)

    app = pykintone.load(‘account.yml’).app()
    with codecs.open(‘data.csv’, ‘r’, ‘utf-8’) as csvfile:
    data = csv.DictReader(csvfile)
    records = [Record(app, row) for row in data]
    for i in range(0, len(records), 100):
    app.batch_create(records[i:i+100])

  • account.yml (アプリ情報を記述)

    domain: {サブドメイン名(必須)}
    login:
    id: {ユーザ名(APIトークンとどちらか選択)}
    password: {ユーザパスワード(APIトークンとどちらか選択)}
    basic:
    id: {ベーシック認証ID(ある場合)}
    password: {ベーシック認証パスワード(ある場合)}
    apps:
    {アプリ名(必須)}:
    id: {アプリID(必須)}
    token: {APIトークン(loginとどちらか選択)}

動作にはpykintoneのインストールが必要です。 まだの方はこちらを参考にしてください。

お世話になります。

添付ファイルの一括アップロードについて、キー情報などで

ないものは更新、既存のものは更新(既存ファイルを削除して置き換え)といった動きは可能でしょうか?