サポーターズCoLab勉強会の全勉強会情報をAPI経由で取得する

背景

先日、このような記事を書きました。この続報としては、サポーターズCoLabサイト自体も4/16(木)にサイト自体もクローズとなるとのことです。

タイトル未設定supporterzcolab.com

サポーターズCoLab勉強会にはよく参加していたのですが、サイト自体が消滅してしまうとどんな勉強会があったのかわからなくなってしまいます。そこで今回は用意されているAPIを利用して、公開されている勉強会の全取得に挑戦します。

できたコード

import requests
from pathlib import Path
import json
import traceback
import time

OUTPUT_DIR = Path('output')
URL_BASE = 'https://supporterzcolab.com/api/v1/event/'
LIMIT = 20

def run(url_: str, **kwargs) -> None:
   if 'event_id' not in kwargs:
       print('skip: %s' % kwargs)
   start_event_id = int(kwargs.get('event_id'))

   OUTPUT_DIR.mkdir(mode=0o777, exist_ok=True)
   try:
       event_ids = [i for i in range(start_event_id, start_event_id + LIMIT)]
       params = kwargs
       params.update({'event_id': event_ids, 'count': LIMIT})
       r = requests.get(url_, params=params).json()

       for event_info in r.get('events', []):
           event_id = event_info['event_id']
           with open(OUTPUT_DIR / Path('event_%s.json' % event_id), 'w') as f:
               json.dump(event_info, fp=f, ensure_ascii=False, indent=4,
                         sort_keys=True, separators=(',', ': '))
           print('success event_id: %s' % event_id)
   except:
       print('skip start_event_id: %s' % start_event_id)
       print(traceback.format_exc())


if __name__ == '__main__':
   for event_id_ in range(1, 1100, LIMIT):
       run(URL_BASE, event_id=event_id_)
       time.sleep(2)

サクッとPythonで書きました。イベント情報だけ狙って取り出して、jsonに保存します。なお、実行にはrequestsが必要です。

下調べとか

サポーターズCoLabのAPIドキュメントをまず読みました(大体 connpass のものと一緒のはずです)。

これらより下記のことがわかりました。
・event_id を指定すれば狙った勉強会の情報だけ取得できる
・event_id は複数指定できる
・count の値を返れば取得件数が変更できる

ただ100件取得できるとはいえ、それなりにデータ重くなるかなーと思ってとりあえず20件ずつにしました。(最初1件ずつやってましたが、よく読んだらリクエスト数減らせそうだったのでそうしました)

あとは勉強会の最後何番くらいかなと思って調べてましたが、1000は超えるけど1100には届かなさそうだったので、その範囲でループを回しました。

自分が参加した勉強会の記録はどうする?

勉強会情報が全て取れたのはいいのですが、自分が参加した勉強会情報はまた別でマップし直さなければいけません。数十件程度なのでスクショ撮って頑張ってマップするかーって気になっています。(スクレイピングでなんとかなりそうな気もしていますが…)

最後に

自分が参加してきた勉強会の情報が全部消えるっていうのが間近に迫っている状況自体が不思議な感じ。今回は運良くAPIがあったので勉強会情報を全部取得することができました。APIなかったら多分地獄だったな… というのはちょっと思ってます。

権利的なところに引っかかりそうなので、取得した勉強会データは自分自身で楽しむためだけに使おうかなと思います。ビューアーでも作って改めてタグとかつけてみて、どんな勉強会があったのか眺めてみようかな… とか色々考えています。



いいなと思ったら応援しよう!