名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

Connpass API を叩いてみた

モチベーションとしてはカレンダーで色々知りたい情報をもっとまとめて取ってきたかったから。 とりあえずテキストファイルに吐くだけできていて、これをテンプレートに落とし込んだりして、htmlページでブラウザで見れたら最高だなーみたいな気持ちがあるので、割と展望はある。

ついでにいうと、バッチ処理化して取ってくるみたいな事もできそうではある。で、どっかのWebページに配下したいが、どこに置くのが適切なのかわからない。適当にドメインを取ってAWSのS3に自動的に挙げる仕組みでも作る?

とりあえず雑に書いた何かはこんな感じ。とりあえず動くだけで改善の余地は無数にあるが、公開していかないことには始まらないので。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import time

def getMode(mode='s'):
    if mode.lower() == 'c':
        # connpass
        print('mode connpass')
        time.sleep(1)
        return { 
                'URL': 'https://connpass.com/api/v1/event/',
                'dir': 'connpass/',
                'etc': 'c',
                }
        # colab
    print('mode colab')
    time.sleep(1)
    return { 
            'URL': 'https://supporterzcolab.com/api/v1/event/',
            'dir': 'colab/',
            'etc': 's',
            }

def get_week_date(mode='s', **kward):
    from datetime import datetime as dt, timedelta

    settings = getMode(mode)    

    params = dict()
    params['order'] = kward.get('order', 1)
    params['count'] = kward.get('count', 10)
    start_date = dt.now()
    if kward.get('start_date'):
        sd = kward.get('start_date')
        if isinstance(str, sd):
            try:
                start_date = dt.strptime(sd, '%Y/%m/%d')
            except Exception as e:
                print('日付形式がおかしいです', sd)
                raise e
        elif isinstance(datetime, sd):
            start_date = sd
        else:
            print('start_dateはstring, datetimeのどちらかでお願いします。')
            raise TypeError
    
    for i in range(7):
        date_delta = timedelta(days=i)
        d = start_date + date_delta
        params['ymd'] = dt.strftime(d, '%Y%m%d')
        
        params_format = '&'.join([('{0}={1}').format(k, v) for k, v in params.items()])
        if not params_format:
            print('skip')
            continue
        print(settings, params_format)
        access_point = '{0}?{1}'.format(settings['URL'], params_format)

        if kward.get('debug'):
            print(access_point)
            print('####################################################')
            print('####################################################')
            print()
            continue
        
        responce = requests.get(access_point).json()
        stack = []
        for elem in responce['events']:
            elem['description'] = elem['description'][:100]
            print('\n'.join(['{0}={1}'.format(k, v) for k, v in elem.items()]))
            stack.append('\n'.join(['{0}={1}'.format(k, v) for k, v in elem.items()]) + '\n')
        
        with open(settings['dir'] + params['ymd'] + settings['etc'] + '.txt', 'w') as f:
            f.write('\n'.join(stack))
        
        print()
        time.sleep(3)

if __name__== '__main__':
    mode = input('C: connpass, S:Colab -> ')
    get_week_date(mode=mode, count=80)