marreta27のはてなブログ

仕事に関係ない話を書いていこうと思います

Airtable上のレコードをPythonで取得する ~ pyAirtableのススメ

皆さんはAirtableのレコードをどのように取得していますか?GUIからでしょうか?それとも Web APIからでしょうか?Web APIを利用している方はご存じだと思いますが、AirtableのWeb APIはページング処理が必要なため、直接利用するには若干の手間がかかります。そこで今回おすすめする対応策がpyAirtableです。

そもそもAirtableとは?

AirtableはいわばMS AccessのWeb版で、カジュアルにRDBを構築できるWebサービスです。そのカジュアルさとSaaS連携の容易性が評価されてか、シリーズF時点での評価額は$1.4Bを超え、ユニコーン企業となっています(最近大規模なレイオフをしていましたが)。わたしは業務でも非業務でも、Web APIを活用したデータ連携の検証をする場合に利用することが多いです。今回はpyAirtableを利用して、Airtableのデータを取得し、さらに更新するための使い方を紹介したいと思います。

そしてpyAirtableとは?

pyAirtableはAirtableのWeb APIを使いやすくしてくれるラッパーです。AirtableのWeb APIの使いにくい箇所をより直感的に利用できるようにしてくれます。もともとはAirtable Python Wrapperという名前だったのですが、2021年8月頃に大幅なリライト共に、pyAirtableという名前に変更されたようです。このエントリではpyAirtableを利用したレコードの取得と素のWeb APIを利用した場合の差分を紹介したいと思います。

pyAirtableを利用したレコードの取得

pyAirtableはものすごくシンプルにデータを取得できます。テーブルからレコードを取得し、表示するだけであれば以下のコードで済みます。

from pyairtable import Api, Base, Table

table = Table('apikey', 'base_id', 'table_name')
table.all()
for records in table.iterate(page_size=100, max_records=1000):
    print(records) 

一方、pyAirtableではなくRequestsを利用した場合は以下のようなコードになります。

def get_table_with_offset(offset: str = None) -> Response:
    params = {'page_size': 100, 'maxRecords': 1000}
    if offset is not None:
        params['offset'] = offset
    return requests.get(url=f"https://api.airtable.com/v0/{base_id}/{table_name}",
                        headers={'Authorization': f"Bearer {api_key}"}, params=params)


if __name__ == '__main__':
    response = get_table_with_offset()
    for record in response.json()['records']:
        print(record)

ただしこのコードでは取得するレコードの件数が100件を超えている場合にはページング処理をする必要があります。ページング処理を考慮したコードは以下のようになります。

if __name__ == '__main__':
    response = get_table_with_offset()
    while 'offset' in response.json():
        response = get_table_with_offset(response.json()['offset'])
        for record in response.json()['records']:
            print(record)

pyAirtableを利用した場合よりもoffsetの判定が必要な分、少し冗長な気がしますね。

おわりに

このようにpyAirtableを使うとより直感的にAirtableからデータセットを取得できます。実はこのpyAirtableですが、AirtableオフィシャルのAPI Referenceでも紹介されています。このようなライブラリを活用して、Airtableをより使いこなせると業務が捗りそうですね!