這篇是用Django建立LineBot的範例 Line官網的範例是用Flask,我是喜歡Django自帶的管理後台 所以在學習LineBot時就使用Django
以下是實作流程:
先建立虛擬環境並安裝所需套件
pip install django=="2.2.7" line-bot-sdk=="1.8.0" dj-database-url dj-static gunicorn psycopg2 django-simple-captcha
建立django 專案 mysite
建立app 名稱叫 myapp
建立static templates 資料夾
python manage.py migrate
python manage.py createsuperuser
pip freeze > requirements.txt
#檔案 runtime 內容
python-3.7.5
#檔案 Procfile 內容 (mysite=專案名稱)
web: gunicorn --pythonpath mysite mysite.wsgi
#新增網站管理帳號
python manage.py createsuperuser
#===================================================
#setting.py (修改的部分)
DEBUG = False
ALLOWED_HOSTS = ['*']
#INSTALLED_APPS 添加
myapp
#TEMPLATES 添加
'DIRS': [os.path.join(BASE_DIR,'templates')],
#時區設定
LANGUAGE_CODE = 'zh-Hant'
TIME_ZONE = 'Asia/Taipei'
#靜態目錄
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
#Line 金鑰
LINE_CHANNEL_SECRET ='請自行填入'
LINE_CHANNEL_ACCESS_TOKEN ='請自行填入'
#===================================================
#mylinebot/urls.py 內容
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
url('^callback',views.callback),
]
#===================================================
#myapp/views.py 內容
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from linebot import LineBotApi, WebhookParser
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage
from module import func
line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)
parser = WebhookParser(settings.LINE_CHANNEL_SECRET)
#傳什麼回什麼範例
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature)
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
if isinstance(event, MessageEvent):
line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.message.text))
return HttpResponse()
else:
return HttpResponseBadRequest()
#===================================================
上傳到 Heroku
heroku login
heroku create 專案名稱(in heroku)
git init
heroku git:remote -a smilehsutestbot專案名稱(in heroku)
heroku config:set DISABLE_COLLECTSTATIC=1
git add .
git commit -am "init commit"
git push heroku master
#可省略
#heroku run python manage.py migrate
#可省略
#heroku run python manage.py createsuperuser
heroku ps:scale web=1
#heroku open
#取得網址
#https://專案名稱.herokuapp.com/
https://mylinebot1130.herokuapp.com/
在 LINE管理頁面
Webhook URL
填入:
https://mylinebot1130.herokuapp.com/callback
跟BOT說聲哈囉
打完收工
成果圖:

配合之前所寫的股市爬蟲:
這部分就以後補充...

備註:
1.新增範例的完成檔案:傳送門在此 下載&解壓縮後,理論上只要去修改setting.py 以下這兩行即可 LINE_CHANNEL_SECRET ='請自行填入' LINE_CHANNEL_ACCESS_TOKEN ='請自行填入'
要測試功能,就上傳到Heroku,如要本機測試就要用ngrok ...未完待續 (2019-12-01)