※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レコードに複数ファイルを指定する場合は「;」で区切ります。
実行方法
-
上記の「
data.csv」
及び、後述の「post.py」
、「account.yml」
を同一フォルダに設置する。 -
コマンドラインでそのフォルダに行き、下記を実行する。
$ python post.py
実行結果
サンプルコード
-
post.py
import pykintone
from pykintone import model
import pykintone.structure_field as sf
import codecs
import csvclass 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のインストールが必要です。 まだの方はこちらを参考にしてください。