分享

Python

 爱吐泡泡的泡泡 2020-09-08

原理:通过微信公众号提供的开发者模式,利用Python搭建环境,实现自动回复,回复内容通过调用图灵机器人的API

配置:服务器(这里是阿里云主机,Ubuntu),公众号,图灵机器人

一,公众平台上进行开发配置

三种加密方式,按需选择。第一种最简单,最不安全(我这里选择的第一种)。一般选第二种进行开发调试,第三种显然是最安全的。

二,服务器配置

1,安装Apache

  1. apt-get update
  2. apt-get upgrade
  3. apt-get install apache2

检验是否安装成功

apache2 -v

出现如下版本信息,说明安装成功:

启动apache:

apachectl start 0.0.0.0:80

启动成功的话从浏览器能成功访问服务器外网IP

2,安装Django

pip install django

3,安装werobot

pip install werobot

4,建立Django项目

在/var/www/目录下新建一个Django项目(这样是为了以后方便部署到Apache)

django-admin.py startproject WXGZH

WXGZH是项目名字

5,在WXGZH这个项目下面新建一个robot.py

robot.py的代码内容如下:

apt-get install libapache2-mod-wsgi
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import requests
  4. import traceback
  5. from werobot import WeRoBot
  6. class TulingAutoReply:
  7. def __init__(self, tuling_key, tuling_url):
  8. self.key = tuling_key
  9. self.url = tuling_url
  10. def reply(self, unicode_str):
  11. body = {'key': self.key, 'info': unicode_str.encode('utf-8')}
  12. r = requests.post(self.url, data=body)
  13. r.encoding = 'utf-8'
  14. resp = r.text
  15. if resp is None or len(resp) == 0:
  16. return None
  17. try:
  18. js = json.loads(resp)
  19. if js['code'] == 100000:
  20. return js['text'].replace('', 'n')
  21. elif js['code'] == 200000:
  22. return js['url']
  23. else:
  24. return None
  25. except Exception:
  26. traceback.print_exc()
  27. return None
  28. auto_reply = TulingAutoReply('这里填图灵APIkey', '这里填API地址') # key和url从图灵机器人网站上申请得到
  29. robot = WeRoBot(enable_session=False,
  30. token = '这里填你的token',
  31. APP_ID = 'wx2bfd78f13bf8b42f',
  32. APP_SECRET = 'be5dd452c950b98893b842d72df2614f')
  33. @robot.handler
  34. def hell(message):
  35. rep = auto_reply.reply(message)
  36. return rep

修改项目目录下的urls.py文件,修改后代码内容如下:

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from django.conf import settings
  4. from werobot.contrib.django import make_view
  5. from robot import robot
  6. urlpatterns = [
  7. url(r'^robot/',make_view(robot)),
  8. ]

修改项目目录下的settings.py文件,将ALLOWED_HOSTS 一行改为:
ALLOWED_HOSTS = ['这里填你的外网IP']


(其实Django本身就可以启动运行,但是Apache才是真正的生产环境,不部署到Apache上的话,会出现一些问题,例如我遇到的:给公众号发送消息,能够正常回复,但是
会提示该公众号障碍,请稍后再试)


7,将Django部署到Apache

sudo apt-get install libapache2-mod-wsgi

新建一个配置文件

sudo vi /etc/apache2/sites-available/sitename.conf

内容如下:

  1. <VirtualHost *:80>
  2. ServerName www.yourdomain.com
  3. ServerAlias otherdomain.com
  4. ServerAdmin tuweizhong@163.com
  5. Alias /media/ /var/www/WXGZH/media/
  6. Alias /static/ /var/www/WXGZH/static/
  7. <Directory /var/www/WXGZH/media>
  8. Require all granted
  9. </Directory>
  10. <Directory /var/www/WXGZH/static>
  11. Require all granted
  12. </Directory>
  13. WSGIScriptAlias / /var/www/WXGZH/WXGZH/wsgi.py
  14. # 注意,这里两层目录都为项目名
  15. <Directory /var/www/WXGZH/WXGZH>
  16. <Files wsgi.py>
  17. Require all granted
  18. </Files>
  19. </Directory>
  20. </VirtualHost>

执行如下指令:

  1. a2ensite sitename.conf
  2. service apache2 restart

修改/var/www/ProjectName/ProjectName/wsgi.py为如下格式:

  1. import os
  2. from os.path import join,dirname,abspath
  3. PROJECT_DIR = dirname(dirname(abspath(__file__)))
  4. import sys
  5. sys.path.insert(0,PROJECT_DIR)
  6. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'WXGZH.settings')
  7. from django.core.wsgi import get_wsgi_application
  8. #os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'WXGZH.settings')
  9. application = get_wsgi_application()

后重启Apache:

service apache2 restart

三,完成

效果如下:

欢迎关注我的公众号“数据分析BigDog”测试实现效果哦!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多