本文共 4177 字,大约阅读时间需要 13 分钟。
这里是 的后续,主要记录其它功能的开发。
原理:爬取优美诗句,存入数据库,封装接口,调用接口
作用:在公众号里回复“来个优美的句子”或者“来句诗”,它便会回复给你一条优美的诗句。
过程:
实现过程和“讲个笑话”功能类似。
作用:在数据库(mysql)中创建用于存储诗句的表
create table `poetrys` ( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `content` varchar(1024) NOT NULL) DEFAULT CHARSET=utf8;
作用:抓取 中“句集:小明”中的句子,存储在数据库中(只存储之前没出现过的诗句,避免重复)。
#coding=utf-8import urllibimport urllib2import reimport MySQLdbtimeout=5 # 超时时间host = 'http://www.juzimi.com' # 句子迷主页面target = 'album/1572107' # 句子迷“句集:小明”栏目def get_html(url,timeout=None): # 获取指定url的html源码 try: headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request,timeout=timeout) except Exception,e: raise '[Error] get_html()获取源码失败\n' + e return response.read()def connectMySQL(): # 连接mysql数据库 conn = MySQLdb.connect( host='localhost', port=3306, user='YOUR_USERNAME', passwd='YOUR_PASSWORD', db='blog', charset='utf8', ) return conndef getPoetry(): # 抓取诗句 # 获取总页数 try: pagesum = 7 except Exception,e: print e return [] poetry_list = [] # 开始爬取 for page in range(0,pagesum): print '当前页数:',page url = '%s/%s?page=%d'%(host,target,page) try: html = get_html(url,timeout).decode('utf8') except Exception,e: print e print '抓取出错,跳过第%s页'%page continue print '正在匹配……' pattern = re.compile("
作用:每次调用,从数据库中随机取出一条诗句,以json的格式返回。
前言:代码集成在django中,不想在django中使用的可以适当修改代码。
代码:
from django.http import HttpResponseimport MySQLdbimport randomimport json# 公共部分# 数据库设置username = 'YOUR_USERNAME' # 你的数据库用户名password = 'YOUR_PASSWORD' # 你的数据库密码dbname = 'YOUR_DB' # 你创建的表所在的数据库dbport = 3306# 数据库连接函数def connectMySQL(): # 连接mysql数据库 conn = MySQLdb.connect( host='localhost', port=dbport, user=username, passwd=password, db=dbname, charset='utf8', ) return conn# 接口部分# 返回一条诗句def get_poetry(request): response = '' try: # 连接数据库 conn = connectMySQL() cur = conn.cursor() # 生成随机抓取id sql = 'select count(*) from poetrys' cur.execute(sql) poetry_sum = cur.fetchone()[0] poetry_idx = random.randint(1,poetry_sum) # 抓取该id的段子数据 sql = 'select * from poetrys where id=%d'%poetry_idx cur.execute(sql) poetry = {} poetry['id'],poetry['content'] = cur.fetchone() response = json.dumps(poetry,ensure_ascii=False) # 关闭数据库连接 cur.close() conn.close() except Exception as e: print e logger.error(e) return HttpResponse(response)
前端接口封装好之后,可以在浏览器中输入以下url测试这个接口:
每次刷新都会返回不同的诗句。
作用:将“优美诗句”功能集成到微信机器人的聊天功能中,用户在聊天窗口发送“来个句子”类似的消息时,随机回复一条诗句。
代码:
@robot.textdef echo(message): if re.compile(".*?诗.*?").match(msg) or\ re.compile(".*?句.*?").match(msg): apiurl = "http://www.yangyingming.com/api/get_poetry" response = get_html(apiurl,timeout=timeout) joke = json.loads(response) return joke['content'].encode('utf8')
运行效果:
转载地址:http://jzwsi.baihongyu.com/