Line Notification with python

Reading time ~2 minutes


Line에서 Http 호출을 이용하여 라인 메시지를 보낼 수 있는 기능을 제공한다. Command line 과 python 을 이용하여 Line Notify를 이용하는 방법에 대해서 알아보았다.


Access Token Generate

먼저 Line Notify에 로그인을 한 후,

하단의 Generate token 버튼을 클릭한다.

line notify


첫번째 빈 칸에는 Line 대화창에서 notification을 제공하는 주체의 이름을 지정한다.

두번째 빈 칸에는 notifications을 보낼 대화창을 선택한다. 그룹이 존재하면 해당 그룹을 선택할 수 있고, 자신에게 보내고 싶을 때는 1-on-1 chat with LINE Notify를 선택하면 된다.

line notify group

지정한 이름은 메시지를 받을 때 아래와 같이 보여진다.

line notify name


Generate toekn 버튼을 누르면 token이 생성된다. Close 버튼을 누르면 token 값을 다시 볼 수 없으므로 token 값을 복사하여 따로 저장해두도록 하자.

line notify token


Line Notify with Command line

$ curl -X POST -H 'Authorization: Bearer <access_token>' -F 'message=foobar' https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}   

<access_token> 자리에 조금 전에 생성한 token 값을 넣어준다.

‘message=foobar’ 부분에 notify 하고싶은 내용을 작성한다.


Line Notification with python

import sys
import requests


if len(sys.argv) != 3:
    print('error: wrong arguments')
    print('usage: python line-notify.py [ACCESS_TOKEN] [MESSAGE]')
    sys.exit()

ACCESS_TOKEN = sys.argv[1]
MESSAGE = sys.argv[2]

URL = 'https://notify-api.line.me/api/notify'
MESSAGE_FIELD = {'message' : MESSAGE}
LINE_HEADERS = {
    'Authorization': 'Bearer ' + ACCESS_TOKEN
}

try:
    response = requests.post(
        url=URL,
        headers=LINE_HEADERS,
        data=MESSAGE_FIELD
    )
    print('Response HTTP Status Code: {status_code}'.format(
        status_code=response.status_code))
except requests.exceptions.RequestException:
    print('HTTP Request failed')


How to use

https://github.com/cjh5414/line-notify.git 을 clone 한다.

command line에 아래의 형태로 실행한다.

[ACCESS_TOKEN]에는 저장해둔 token 값을, [MESSAGE]에는 원하는 메세지를 ‘ ‘를 붙여서 넣어주면 된다.

$ python3 line-notify.py [ACCESS_TOKEN] [MESSAGE]  


Result

line notify result


참고자료

LINE Notify API Document를 보면 더 자세한 내용을 확인 할 수 있다.

Python decorator에 @wraps를 사용해야 하는 이유

python decorator를 구현하기 위해 구글링을 해보는 중에 decorator함수에 @wraps를 사용하는 것을 자주 볼 수 있었다. @wraps를 사용 하는 것과 사용 하지 않는 것의 결과는 차이가 없었는데 왜 사용하는지 이유가 궁금...… Continue reading