新規投稿
フォローする

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

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

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のインストールが必要です。 まだの方はこちらを参考にしてください。

1

1件のコメント

Avatar
s_moriya

お世話になります。

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

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

0
サインインしてコメントを残してください。