『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

Python + FlaskでLINE botを作った

追記

この記事の情報は既に古くなっているので以下の記事を参照ください。

nnsnodnb.hatenablog.jp

はじめに

5/1に渋谷にて行われたLINE/Facebookボットもくもく会に参加してきました

connpass.com

そこで私はLINEボットで形態素解析器を作りました.

形態素解析器ボット

まずは,ボットのQRコードを貼っておきます.もしよかったら使ってみてください

f:id:nanashinodonbee:20160502224537j:plain

形態素解析とは

文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。

形態素解析 - Wikipedia

ソースコード

https://github.com/nnsnodnb/LINE_bot-MorphologicalAnalysisgithub.com

from flask import Flask
from flask import request

from janome.tokenizer import Tokenizer

import requests
import json
import re

import settings

LINEBOT_API_EVENT ='https://trialbot-api.line.me/v1/events'
LINE_HEADERS = {
    'Content-type': 'application/json; charset=UTF-8',
    'X-Line-ChannelID':settings.CHANNEL_ID,
    'X-Line-ChannelSecret':settings.CHANNEL_SECRET,
    'X-Line-Trusted-User-With-ACL':settings.MID
}

def post_event(to, content):
    msg = {
        'to': [to],
        'toChannel': 1383378250,
        'eventType': "138311608800106203",
        'content': content
    }
    r = requests.post(LINEBOT_API_EVENT, headers = LINE_HEADERS, data = json.dumps(msg))

def post_text(to, text):
    content = {
        'contentType':1,
        'toType':1,
        'text':text,
    }
    post_event(to, content)


commands = (
    (re.compile('作者', 0), lambda x: 'https://nnsnodnb.moe'),
)

app = Flask(__name__)

@app.route("/callback", methods=['POST'])
def callback():
    messages = request.json['result']

    for message in messages:
        text = message['content']['text']
        for matcher, action in commands:
            if matcher.search(text):
                response = action(text)
                break
        else:
            post_text(message['content']['from'], '解析中...')
            # 形態素解析
            response = ''
            t = Tokenizer()
            for token in t.tokenize(message['content']['text']):
                response += str(token) + '\n'
        post_text(message['content']['from'], response)
    return ''

if __name__ == "__main__":
    app.run(host = '0.0.0.0', port = 8001, threaded = True, debug = True)

こんな感じ.

LINE botの登録は以下

https://business.line.me/ja/products/4/introductionbusiness.line.me

callback URLは「https」でないとダメなのでHeroku等で運用するといいかもしれません
私は,自宅サーバhttpsにしているの証明書を再発行してなんとかサーバ設定を終え開発しました.

現在,管理者募集は考えていませんが,もし興味があるようでしたら
コメントなりなんなりしていただけたら対応いたします!

最後に

一応デモ動画を貼っておきます

この機会になにかボットでサービス作れれば良いなぁって思います.