Python으로 스크래핑한 정보를 LINE Notify를 사용하여 알림

개요



스크래핑에 대해 조금 공부했기 때문에 그것을 이용한 간단한 앱을 작성했을 때의 메모입니다.
이번은 예로서 Yahoo! 날씨로부터 얻은 정보를 LINE에 통지하는 방법입니다.
  • 사용 언어 : Python3

  • 절차



    스크래핑 준비



    이번에는 BeautifulSoup을 사용했습니다. 스크레이핑의 기사는 당 사이트내에서도 다수 있으므로 그쪽을 참고해 주시면 좋겠습니다.

    일기 예보 취득


  • 웹 사이트 방문
  • import requests
    from bs4 import BeautifulSoup
    
    r = requests.get('https://example.html')
    
  • 원하는 정보 얻기
  • 
    soup = BeautifulSoup(r.content, "html.parser")
    
    hoge = soup.find_all("p")
    date = soup.find_all("p", class_ = "date")
    

    쉽게 특정 태그에 대한 정보를 얻을 수 있습니다. 이번에는 예로 P 태그를 얻고 있습니다.
    또 3행째와 같이 속성등을 한층 더 짜내는 것으로 취득하는 정보를 지정하기 쉬워집니다.
    취득한 정보는 list로서 취급할 수 있고, 아래와 같이 하는 것으로 문자를 취득하는 것도 가능합니다.
    today = date.getTest()
    

    날짜와 같은 요령으로 날씨 정보도 취득 가능합니다.

    LINE Notify를 이용하여 획득한 메시지 알림



  • LINE Notify 의 이용 방법에 대해서는 이쪽의 기사 [초간단] LINE notify 사용해보기 를 참고로 했습니다.

  • 이하, python을 이용한 LINE의 통지 방법입니다.
    
    LINE_TOKEN =  "取得したトークンを記述する"
    LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
    
    def send_weather_info(msg):
        method = "POST"
        headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
        payload = {"message": msg}
        try:
            payload = urllib.parse.urlencode(payload).encode("utf-8")
            req = urllib.request.Request(
                url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
            urllib.request.urlopen(req)
        except Exception as e:
            print ("Exception Error: ", e)
            sys.exit(1)
    

    최종 코드


    
    r = requests.get('https://example.html')
    soup = BeautifulSoup(r.content, "html.parser")
    
    w_date = soup.find_all("x", class_ = "xxxx")
    weather = soup.find_all("x", class_ = "xxxx") # "x", "xxxx"はサイトに合わせて適宜変更してください。
    
    today = w_date[0].getText()
    tomorrow = w_date[1].getText()
    
    td_weather = weather[0].getText()
    tm_weather = weather[1].getText()
    
    msg = "天気予報\n%s : %s\n%s : %s" % (today, td_weather, tomorrow, tm_weather)
    
    LINE_TOKEN =  "取得したトークンを記述する"
    LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
    
    def send_weather_information(msg):
        method = "POST"
        headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
        payload = {"message": msg}
        try:
            payload = urllib.parse.urlencode(payload).encode("utf-8")
            req = urllib.request.Request(
                url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
            urllib.request.urlopen(req)
        except Exception as e:
            print ("Exception Error: ", e)
            sys.exit(1)
    
    def main():
        send_weather_information(msg)
    
    
    if __name__ == '__main__':
        main()
    

    이런 식으로 LINE에 알림이 왔습니다.



    감상



    날씨 등 ​​조사하는 것이 번거롭다고 생각해 작성해 보았습니다.
    하지만 파일을 실행하는 것도 번거롭기 때문에 AmazonDashButton 등을 이용하여 더욱 쉽게 할 수 있다고 생각합니다.
    날씨만이라면 LINE의 통지로서 더 좋은 방법이 있는 것 같기 때문에 그쪽도 참고로 다시 공부하고 싶습니다.

    좋은 웹페이지 즐겨찾기