LINE에서 Messaging API가 새로 출시된 것 같아서 여전히 형태소 해석을 할 만큼의 BOT을 만들었다

소개



이전에 Trial 계정으로 똑같은 것을 만들었는데, "계정 일제히 삭제하자!!"라는 위협 메일이 왔으므로 이행했습니다.

리포지토리



내가 만든 것



LINE 공식 SDK



BOT





SDK의 Wiki 페이지을 타면 좋겠다 ...

환경


  • Python3.5.2
  • Virtualenv
  • Flask
  • 밤의 장력
  • Kichigai의 장력
  • 밤밥 먹지 않지만 개발 의욕이 절반 없다

  • 소스 코드



    bot.py
    # coding: utf-8
    
    from __future__ import unicode_literals
    
    from flask import Flask, request, abort
    
    from linebot import LineBotApi, WebhookHandler
    from linebot.exceptions import InvalidSignatureError
    from linebot.models import MessageEvent, TextMessage, TextSendMessage
    
    from janome.tokenizer import Tokenizer
    
    import os, re, json
    
    def load_env():
        try:
            with open('.env') as f:
                content = f.read()
        except IOError:
            content = ''
    
        for line in content.splitlines():
            m1 = re.match(r'\A([A-Za-z_0-9]+)=(.*)\Z', line)
            if m1:
                key, val = m1.group(1), m1.group(2)
                m2 = re.match(r"\A'(.*)'\Z", val)
                if m2:
                    val = m2.group(1)
                m3 = re.match(r'\A"(.*)"\Z', val)
                if m3:
                    val = re.sub(r'\\(.)', r'\1', m3.group(1))
                os.environ.setdefault(key, val)
    
    load_env()
    
    app = Flask(__name__)
    
    line_bot_api = LineBotApi(os.environ.get('CHANNEL_ACCESS_TOKEN'))
    handler = WebhookHandler(os.environ.get('CHANNEL_SECRET'))
    
    @app.route("/callback", methods=['POST'])
    def callback():
        signature = request.headers['X-LINE-Signature']
    
        body = request.get_data(as_text=True)
        receive_json = json.loads(body)
        message = receive_json['events'][0]['message']['text']
    
        response_arrays = []
        t = Tokenizer()
        for token in t.tokenize(message):
            response_arrays.append(str(token))
    
        response = ''
        for item in range(len(response_arrays)):
            if len(response_arrays) == item + 1:
                response += str(response_arrays[item])
            else:
                response += str(response_arrays[item] + '\n')
    
        try:
            line_bot_api.reply_message(receive_json['events'][0]['replyToken'], TextSendMessage(text = response))
        except InvalidSignatureError:
            abort(400)
    
        return 'OK'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port = 8003, threaded = True, debug = True)
    

    .env
    CHANNEL_ACCESS_TOKEN='hogehoge' # めっちゃ長いやつ
    CHANNEL_SECRET=''                   # 今まで通り隠れてるやつ
    

    LINE 관리 화면 측 설정



    안의 정, HTTPS가 아니면 안되기 때문에 노력합시다!



    LINE@의 관리 화면에 열심히 도착해 「계정 설정」 > 「Bot 설정」 으로 자신이 생각하는 설정을 합시다!

    실제 응답





    매우보기 힘들다 ...

    마지막으로



    뭔가 있으면 PullRequest 등 동돈 내고 싶습니다!
    그리고 LINE 씨 Wiki 페이지 부탁드립니다.

    구 API와 이번 신 API에서는 request.headers['X-LINE-Signature'] 가 있는 것과 없는 것으로 처음 초조했습니다. 덧붙여서 구 API에서는 request.headers['X-Line-Channelsignature'] 에 상당합니다.

    좋은 웹페이지 즐겨찾기