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をより使いこなせると業務が捗りそうですね!

認定 Platform アプリケーションビルダー資格の更新 (Winter '22) モジュール で困っているあなたへ - Surveyオブジェクトの探し方

このエントリを読んでいるあなたは、おそらく2023年1月13日に期限を迎える認定 Platform アプリケーションビルダー資格の更新 (Winter '22) モジュール で困っているのでしょう。時間がない人はこのセクションは読み飛ばし、後述の[解決策]のセクションまで移動してください。時間がある人はこのセクションで事象を確認してみましょう。あなたはきっとオブジェクトマネージャで『サーベイ』と検索してもSurveyオブジェクトが表示されないのでしょうね。そうそう、日本でいうアンケートのことを英語では『Survey』というそうです。Surveyオブジェクトは日本語設定だと『アンケート』オブジェクトなのでしょうね。だからといってオブジェクトマネージャで『アンケート』と入力してもアンケートオブジェクトは表示されないでしょう。アンケートオブジェクトを表示させるためには、まずはアンケート機能を有効化する手続きが必要なのです。

解決策

散々じらしてしまいましたが、解決策を正しくは設定画面でアンケート機能を有効化してあげる必要があります。[設定] から、[クイック検索] ボックスに「アンケート」と入力すると以下のキャプチャ画面のように[アンケートの設定]メニューがリストアップされます。 。 この画面で[アンケート]を有効化すれば、権限セットの変更画面でアンケートが表示されるようになるのでご安心ください。オブジェクトマネージャーで「アンケート」と検索しても一覧には表示されないのでご注意ください。 最近は認定 Platform アプリケーションビルダーの試験も難易度が上がってきているそうですね。期日までにきちんと更新モジュールを終えるようにしましょう。ちなみにわたしは先ほど終えたばかりですが...!

マルチバースができていると思う

そんなにも苦手なのになぜブログに挑戦するのか。Twitterでは書き切れない文字数のエントリを書くことがあるならば、それはきっとあとから読み返したときにも味わい深い出来事だろうと信じているからです。現に今年は胸が震える程に感動した出来事が何度も何度もありました。

何はともあれ数年前に不惑を超えたことですし、いままで苦戦していたブログの継続という課題もそろそろ乗り越えることができるといいなと思っております。