Open4

Airtableを使ってデータの登録処理を構築する

nabetsunabetsu

やりたいこと

Airtableをデータ登録の作業場として利用したい。
具体的にはスクレイピングやAPIでデータを自動でAirtableに登録し、項目の補正等を行なった上でDoneにチェックを入れたら本登録処理を走らせたい(AWS Lambda等で)。

選択肢の検討

1. Automations

Airtableが提供するAutomationsという機能で特定の条件を満たした時にアクションを実施することができる。

Doneにチェックが入ったらというトリガーの設定は問題ないが、問題なのがアクションの実施。
以下のように多様な選択肢があるが、Integrating with AWS Lambda & DynamoDB – Airtable Support に記載されているスクリプトを実行して直接外部のAPIなどを叩くのはFreeプランでは実行できない。

そのため、GitHubにIssueを起票→GitHub Actionsを起動などワンステップ余計に踏まないといけないっぽい。

幸い、Airtable側でのアクション実行時に対象レコードのIDなどを連携可能なので、これで処理自体は行えそう。

2. Zapier等の自動連携ツール

ZapierでもAirtableとの連携ができそう。

Connect your Airtable to AWS Lambda integration in 2 minutes | Zapier

ただし、Lambdaの起動はFreeプランではできないみたい。

nabetsunabetsu

AirtableとGitHub Issuesの連携



ここでOnにしないと有効にならないので注意。

GitHubとの連携の確認

nabetsunabetsu

pyAirtable — pyAirtable documentation を使うと簡単。

全件抽出

# テーブルの定義
table = Table(api_key, 'base_id', 'table_name')
# テーブルのレコードを全件取得
table.all()

条件指定

単純な条件指定であれば、'match'でキーバーリューのペアをDictionaryで渡せばOK。

table = Table("apikey", "base_id", "Contact")
formula = match({"First Name": "John", "Age": 21})

Reference先の指定

Reference先の項目を指定してのセレクトもできる。

formula = match({'URL (from Shop)': 'https://sample.stores.jp/'})
table.all(formula=formula)

複雑な条件指定

複雑な条件を表現する場合にはmuchではなく、Airtable APIで標準的に使える検索条件を文字列で指定する。

table = Table(AIRTABLE_API_KEY, 'WORKSPACE_ID', 'TABLE_NAME)
formula = "AND(NOT(OR({Status}='SoldOut', {Status}='PreOrder', {Status}='ComingSoon')), IsInvalid=0 )"
products = table.all(formula=formula)
nabetsunabetsu

Update

以下2種類の方法がある。

  • update
    • 1レコードを指定してアップデートを実行
  • batch_update
    • 複数レコードを指定してまとめてアップデート

batch_updateの実行

以下のように更新対象のIDと更新するフィールドと更新する値を配列で渡すことで、まとめて既存のレコードを更新することができる。

invalidated_params = [{"id": item["id"], "fields": {"IsInvalid": True}} for item in invalid_items]
table.batch_update(invalidated_params)

Airtable Api — pyAirtable documentation