[토이 프로젝트] 카카오톡 MT 참가신청 API

2019. 9. 14. 21:10Projects

개요

프로젝트 명 : 카카오톡 MT 참가신청 API

프로젝트 목적 : 카카오톡 플러스친구 자동응답 API를 활용

프로젝트 구분 : 토이 프로젝트

프로젝트 기간 : 2017년 03월

프로젝트 인원 : 1명

소스코드 (Python 2)

# coding:utf-8

# Korean Language Broken Defencer
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

from flask import Flask, request
from flaskext.mysql import MySQL
import json

app = Flask(__name__)
mysql = MySQL()

#MySql config
app.config['MYSQL_DATABASE_USER'] = 'USER_ID'
app.config['MYSQL_DATABASE_PASSWORD'] = 'USER_PW'
app.config['MYSQL_DATABASE_DB'] = 'DATABASE_NAME'

mysql.init_app(app)

@app.route("/")
def hello():
	return 'hello'
# Chat Initialize
@app.route("/keyboard")
def keyboard():
	data = {'type' : 'buttons', 'buttons' : ['MT 참가 신청', 'MT 참가 신청 조회']}

	result = json.dumps(data)
	return result
# get User Message
@app.route("/message", methods=['POST'])
def message():
	data = {}

	# get Post JSON Data
	json_data = request.get_json()

	# Content Type
	content_type = json_data['type']
	# User Message
	content = json_data['content']
	# User Primary Key
	user_key = json_data['user_key']
	# u is for korean equal check
	if content_type == "text":
		if content == u"MT 참가 신청":
			message = "[2017 연합 MT]\n장소 : 가평 ~~~\n일시 : 2017년 n월 n일 ~ 2017년 n월 n일\n회비 : 30,000원\n\n신청 양식 : 이름/학번/전화번호/주민등록번호\n예시 : 홍길동/1700001/010-1234-5678/980101-1234567"
			data = {'message' : {'text' : message}}

			saveAction(user_key, "applyMT")
		elif content == u"MT 참가 신청 조회":
			data = {'message' : {'text' : '[MT 참가 신청 조회]\n학번을 입력 해 주세요.'}}

			saveAction(user_key, "checkMT")
		else:
			# Check MT Apply
			if (checkAction(user_key, "checkMT") == 1):
				deleteAction(user_key)
				if checkMT(content):
					message = "정상적으로 MT 참가 신청이 되었습니다."
				else:
					message = "조회 된 신청내역이 없습니다."
				data = {'message' : {'text' : message}}
			# MT Apply
			elif (checkAction(user_key, "applyMT") == 1):
				# split user Data
				temp_data = content.split("/")

				if len(temp_data) == 4:
					# delete Action
					deleteAction(user_key)

					applyMT(user_key, temp_data[0], temp_data[1], temp_data[2], temp_data[3])

					data = {'message' : {'text' : '아래와 같은 정보로 MT신청이 완료되었습니다.\n이름 : '+temp_data[0]+'\n학번 : '+temp_data[1]+'\n전화번호 : '+temp_data[2]+'\n주민등록번호 : '+temp_data[3]}}

	if (len(data) == 0):
		deleteAction(user_key)
		#data = {'message' : {'text' : 'type : '+content_type+'\ncontent : '+content+'\nuser_key : '+user_key}}
		data = {'message' : {'text' : '올바르지 않은 입력입니다.'}}

	# Add Keyboard When Event Done
	if (hasAction(user_key) == 0):
		data['keyboard'] = {'type' : 'buttons', 'buttons' : ['MT 참가 신청', 'MT 참가 신청 조회']}

	# print Result
	result = json.dumps(data)
	return result

if __name__ == "__main__":
	app.run()

# DB Insert function
def applyMT(user_key, name, student_id, phone, private):
	connection = mysql.get_db()
	cursor = connection.cursor()

	cursor.execute("INSERT INTO mt_members SET user_key = '"+user_key+"', student_name = '"+name+"', student_id = '"+student_id+"', student_phone = '"+phone+"', student_private = '"+private+"'")
	connection.commit()

# Save User Action
def saveAction(user_key, action):
	connection = mysql.get_db()
	cursor = connection.cursor()
	# delete User last action
	cursor.execute("DELETE FROM kakao_tmp WHERE user_key = '"+user_key+"'")
	connection.commit()
	# insert User new action
	cursor.execute("INSERT INTO kakao_tmp SET user_key = '"+user_key+"', action = '"+action+"', regist_date = now()")
	connection.commit()

# check User Action
def checkAction(user_key, action):
	connection = mysql.get_db()
	cursor = connection.cursor()

	cursor.execute("SELECT * FROM kakao_tmp WHERE user_key = '"+user_key+"' and action = '"+action+"'")
	rows = cursor.fetchall()

	return len(rows)

# check User Action
def hasAction(user_key):
	connection = mysql.get_db()
	cursor = connection.cursor()

	cursor.execute("SELECT * FROM kakao_tmp WHERE user_key = '"+user_key+"'")
	rows = cursor.fetchall()

	return len(rows)

# delete User Action => Action Done
def deleteAction(user_key):
	connection = mysql.get_db()
	cursor = connection.cursor()
	# delete User last action
	cursor.execute("DELETE FROM kakao_tmp WHERE user_key = '"+user_key+"'")
	connection.commit()

# checkMT
def checkMT(user_id):
	connection = mysql.get_db()
	cursor = connection.cursor()
	# delete User last Action
	cursor.execute("SELECT * FROM mt_members WHERE student_id = '"+user_id+"'")
	rows = cursor.fetchall()

	return len(rows)

느낀 점

카카오톡 플러스친구의 자동응답 API를 잘 활용하면 더욱 많은 일을 간편하게 처리할 수 있을 것 같습니다.