使用python进行微信开发
2017-03-03 00:00
417 查看
摘要: 项目地址https://git.oschina.net/nanxun/python_weixin
1.view文件
2.models文件
3.cdb.py
1.view文件
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http.response import HttpResponse, HttpResponseBadRequest from django.views.decorators.csrf import csrf_exempt from weixin01.cdb import Cdata from wechat_sdk import WechatBasic from wechat_sdk.exceptions import ParseError from wechat_sdk.messages import TextMessage from .models import KeyWord as KeyWordModel WECHAT_TOKEN = "lifecb" WEIXIN_APPID = 'wx2392fc3aed016634' WEIXIN_APPSECRET = 'wx2392fc3aed016634' from wechat_sdk.messages import (TextMessage, VoiceMessage, ImageMessage, VideoMessage, LinkMessage, LocationMessage, EventMessage ) # 实例化 WechatBasic wechat_instance = WechatBasic( token=WECHAT_TOKEN, appid=WEIXIN_APPID, appsecret=WEIXIN_APPSECRET ) @csrf_exempt def index(request): if request.method == 'GET': # 检验合法性 # 从 request 中提取基本信息 (signature, timestamp, nonce, xml) signature = request.GET.get('signature') timestamp = request.GET.get('timestamp') nonce = request.GET.get('nonce') if not wechat_instance.check_signature( signature=signature, timestamp=timestamp, nonce=nonce): return HttpResponseBadRequest('Verify Failed') return HttpResponse( request.GET.get('echostr', ''), content_type="text/plain") # 解析本次请求的 XML 数据 try: wechat_instance.parse_data(data=request.body) except ParseError: return HttpResponseBadRequest('Invalid XML Data') # 获取解析好的微信请求信息 message = wechat_instance.get_message() # 利用本次请求中的用户OpenID来初始化上下文对话 context = Cdata() context.set(id=message.source) # 关注事件以及不匹配时的默认回复 response = None if isinstance(message, TextMessage): # 当前会话内容 step=context.get('step',1) content = message.content.strip() if message.content == '新闻': response = wechat_instance.response_news([ { 'title': '百度新闻', 'picurl': 'http://box.bdimg.com/static/fisp_static/common/img/searchbox/logo_news_276_88_1f9876a.png', 'description': '百度新闻是百度公司推出的中文新闻搜索平台,每天发布多条新闻,新闻源包括500多个权威网站,热点新闻由新闻源网站和媒体每天“民主投票”选出,不含任何人工编辑成分,真实反映每时每刻的新闻热点;百度新闻保留自建立以来所有日期的新闻,更助您掌握整个新闻事件的发展脉络。', 'url': 'http://news.baidu.com/', }, { 'title': '百度', 'picurl': 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png', 'url': 'http://www.baidu.com', }, { 'title': 'Django 教程', 'picurl': 'http://www.ziqiangxuetang.com/media/uploads/images/django_logo_20140508_061519_35.jpg', 'url': 'http://www.ziqiangxuetang.com/django/django-tutorial.html', } ]) return HttpResponse(response, content_type="application/xml") else: try: keyword_object = KeyWordModel.objects.get(keyword=content) reply_text = keyword_object.content except KeyWordModel.DoesNotExist: try: reply_text = KeyWordModel.objects.get(keyword='提示').content except KeyWordModel.DoesNotExist: reply_text = ('/:P-(好委屈,数据库翻个遍也没找到你输的关键词!\n' '试试下面这些关键词吧:\nKEYWORD_LIST\n' '<a href="https://my.oschina.net/u/3264690/blog">chen</a>' '感谢您的支持!/:rose' ) context.step= step + 1 context.last_text= content #context.save() if 'KEYWORD_LIST' in reply_text: keyword_objects = KeyWordModel.objects.exclude(keyword__in=[ '关注事件', '测试', 'test', '提示']).filter(published=True) keywords = ('{}. {}'.format(str(i), k.keyword) for i, k in enumerate(keyword_objects, 1)) reply_text = reply_text.replace( 'KEYWORD_LIST', '\n'.join(keywords)) elif isinstance(message, VoiceMessage): reply_text = '语音信息我听不懂/:P-(/:P-(/:P-(' elif isinstance(message, ImageMessage): reply_text = '图片信息我也看不懂/:P-(/:P-(/:P-(' elif isinstance(message, VideoMessage): reply_text = '视频我不会看/:P-(' elif isinstance(message, LinkMessage): reply_text = '链接信息' elif isinstance(message, LocationMessage): reply_text = '地理位置信息' elif isinstance(message, EventMessage): # 事件信息 if message.type == 'subscribe': # 关注事件(包括普通关注事件和扫描二维码造成的关注事件) #follow_event = KeyWordModel.objects.get(keyword='关注事件') reply_text = '欢迎您的关注,您可以发送任意指令和我聊天!例如:新闻' # 如果 key 和 ticket 均不为空,则是扫描二维码造成的关注事件 if message.key and message.ticket: reply_text += '\n来源:扫描二维码关注' else: reply_text += '\n来源:搜索名称关注' elif message.type == 'unsubscribe': reply_text = '取消关注事件' elif message.type == 'scan': reply_text = '已关注用户扫描二维码!' elif message.type == 'location': reply_text = '上报地理位置' elif message.type == 'click': reply_text = '自定义菜单点击' elif message.type == 'view': reply_text = '自定义菜单跳转链接' elif message.type == 'templatesendjobfinish': reply_text = '模板消息' response = wechat_instance.response_text(content=reply_text) return HttpResponse(response, content_type="application/xml")
2.models文件
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models class KeyWord(models.Model): keyword = models.CharField( '关键词', max_length=256, primary_key=True, help_text='用户发出的关键词') content = models.TextField( '内容', null=True, blank=True, help_text='回复给用户的内容') pub_date = models.DateTimeField('发表时间', auto_now_add=True) update_time = models.DateTimeField('更新时间', auto_now=True, null=True) published = models.BooleanField('发布状态', default=True) def __unicode__(self): return self.keyword class Meta: verbose_name = '关键词' verbose_name_plural = verbose_name class Cda(models.Model): openid=models.TextField(unique=True) step=models.IntegerField() content=models.TextField(max_length=256)
3.cdb.py
from weixin01 import models class Cdata(dict): def __init__(self): self.str=None self.step=0 self.openid=None self.last_text=None def set(self,id): self.openid=id def get(self, k, d=1): if self.step == 0: return d else: return self.step def save(self): d=models.Cda( openid=self.openid, step=self.step, content=self.last_text, ) # d.openid=self.openid # d.step=self.step # d.content=self.last_text d.save()
相关文章推荐
- 使用python进行桌面程序开发(二)
- 使用vim进行python开发
- Eclipse中使用PyDev进行Python开发 的配置
- window平台下使用eclipse进行python开发
- 使用Python和pyGame进行虚拟仪器开发
- 使用boost.python进行混合开发
- 使用Python下的XSLT API进行web开发的简单教程
- [Python开发] python使用nltk进行Chart Parsing
- Flask —— 使用Python和OpenShift进行即时Web开发
- 使用python进行新浪微博应用开发
- 使用Python开发环境Wing IDE进行调试功能
- 使用Flex 4、Django、Python和PyAMF进行开发
- vLang-基于模型的微信开发框架,使用Python
- 使用Eclipse和Ant进行python开发
- 使用vim进行python开发
- linux下使用python进行opencv开发
- 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类
- Day 3: Flask —— 使用Python和OpenShift进行即时Web开发
- 使用PyCharm进行python开发的简介
- 【转】在Eclipse中使用PyDev进行Python开发