【Python × Zapier】 경보 정보를 취득하고 Slack으로 통지

하고 싶은 일(BEFORE)



기상청의 경보 정보를 취득하여 지정하는 지역에 경보가 나오면 Slack으로 통지한다

이 기사 하고 싶은 것 돈피샤다!
라고 생각 기사대로 진행하고 있었습니다만, 기상청의 데이터가 갱신될 때마다 Zapier (작업을 자동화할 수 있는 툴)의 태스크를 움직이고 있으면 자신의 계획 .



그래서 하고 싶은 것의 범위를 좁혔습니다.

하고 싶은 것(AFTER)



기상청의 경보 정보를 「매일 7시」에 취득하여 지정하는 지역에 경보가 나오면 Slack으로 통지한다
▼이런 느낌(이동했을 때에 경보가 나오지 않았기 때문에 대신에 주의보를 취득한 모습)

매일 아침 7시에 1회만 정보를 취득해 태스크 실행 횟수를 1회/일로 했습니다.

Zap 전체도


  • Every Day : 여기서 매일 아침 7시에 작업을 실행하도록 설정
  • Run Python : 기상청의 정보 취득/추출 (아래 코드 기재)
  • Only continue if... : 2로 출력이 있으면 (경보가 나오면) 다음으로 진행한다
  • Send Channel Message in Slack : Slack에서 지정한 채널로 알림



  • 파이썬 코드



    하고 싶은 것이 약간 바뀌었기 때문에 공부하지 않으면...라고 생각 스크레이핑의 방법을 조사해 썼습니다. 첫 파이썬!
    조사하고 있으면 아무래도 BeautifulSoup라고 하는 것을 사용하는지~라고 하는 것을 알았습니다만 Zapier 도움말 에 이런 것이 써 있었습니다.

    오 "오오오온 BeautifulSoup을 사용할 수 없다!
    라고 하는 것으로 무리 화살감 있습니다만 BeautifulSoup 사용하지 않고 원하는 부분(경보 부분)만 추출합니다.
    import re
    import requests
    import time
    
    code_list = [['札幌市', '0110000'], ['仙台市東部', '0410001'], ['さいたま市', '1110000']]
    output = {'text': ''}
    
    for code in code_list:
        html = requests.get('https://www.jma.go.jp/jp/warn/f_' + code[1] + '.html').text
        data_list = re.findall('<span style="color:#FF2800">(.*?)</span>', html)
    
        if len(data_list) == 0:
            continue
    
        text = '【' + code[0] + '】'
        i = 1
        for data in data_list:
            if i == len(data_list):
                text += data
            else:
                data = re.sub('警報', '', data)
                text  += data + ','
            i += 1
        output['text'] += text + '\n'
        time.sleep(1)
    

    각 지역의 페이지에서 경보 부분의 폰트 칼라는 #FF2800이므로, <span style="color:#FF2800">〜</span> 로 둘러싸인 부분을 모두 추출하고 있습니다.
    또, 복수 페이지를 스크래핑 하므로 time.sleep(1) 로 1초 쉬게 합니다.

    참고



    기상청으로부터 정보를 취득하여 도쿄 23구의 기상 경보를 Slack에 통지
    Zapier의 사용법도 포함해 매우 참고로 했습니다.

    좋은 웹페이지 즐겨찾기