名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

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)