本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流。

目录:

  • 概述

  • 环境准备及相关账号申请

  • 部署Python Flask应用到Bluemix

  • 通过Bluemix认证公众微信号

  • 识图作诗相关功能开发

  • 总结

概述

本文将从一个开发人员角度,介绍如何使用Bluemix平台开发和部署Python Flask应用,如何通过Bluemix进行微信公众号认证,最后结合相关Watson服务,实现用户向公众号发送图片,后台识别图片并返回诗文的功能。

Bluemix

BLuemix是IBM公司推出的一个云平台服务,通过它不仅可以部署本地应用到云端,还可以调用BLuemix本身自带的强大的一系列服务来实现很多功能。

Watson

Watson是IBM公司推出的一系列认知计算服务,包括自然语言分类,情感分析,图像识别等等,我在本系列的前几期已经完成了可用Python实现部分的文档翻译,详见

微信公众平台

作为一个程序员,使用微信公众号,关注点就不仅仅是发送推文消息了,通过自己开发,来实现一些有趣的功能,做不同于一般的公众号才是我想要的。

环境准备及相关账号申请

注册BLuemix账号

申请地址:http://www.bluemix.net 在页面右上角点击注册,填写相关信息提交申请,Bluemix 会发一封确认邮件到注册邮箱,需要手工进入注册邮箱点击确认,才能成功注册。第一次登陆 Bluemix 控制台的时候,会要求创建工作空间,建议创建在悉尼或英国(虽然访问都很慢)。

安装CloudFoundry工具

通过该工具,可以在命令行使用CF相关命令进行与BLuemix之间的交互,包括部署,更新,查询。详见:http://docs.cloudfoundry.org/...

注册微信公众号

这个很简单,而且网上一搜很多,我在这里就不说了。

部署Python Flask应用到Bluemix

Python Flask

Python Flask 是基于Python的一种轻量级网络框架,便捷易用。这个应用中Flask仅仅起到传递参数的作用,对于Flask本身的使用不是很多。这就是说,你同样可以仅仅使用Python,因为Python本身也可以提供网络服务。

创建应用

在Bluemix首页点击创建应用,新的页面中会显示很多可创建的应用案例,下拉菜单找到Flask,创建,根据提示填写域名等信息。创建后根据页面提示下载模板代码到本地。

要想在bluemix下成功运行应用,至少需要有manifest.yml,requirements.txt,runtime.txt和app.py这四个文件。

manifest.yml

这是应用程序的基本配置信息,包括域名和主机名。是下载源码后默认的,不需要更改。

requirements.txt

这个文件中包含应用所需要的第三方依赖,比如我的应用里是这样的:

Flask
watson_developer_cloud
lxml

flask是Python网络框架。watson_developer_cloud用于调用Watson服务。lxml包用来爬取网络信息。

runtime.txt

该文件用来指定需要的Python版本

app.py

Python应用的脚本或源代码文件,我会在“识图作诗相关功能开发”做详细说明

部署应用

在本地进行应用的开发,并且本地调试和运行成功后就可以部署代码了。在bluemix上点击应用程序,在应用程序菜单选择“入门”,根据提示在本地命令行使用cf命令就可以成功push到BLuemix上。如果过程中遇到问题,可以通过

cf logs 应用程序名 --recent

来查看错误

创建并绑定服务

在Bluemix应用程序界面找到创建新服务,同创建应用程序一样,新界面会有很多服务可供选择。这里,我选择的是Visual Recognition服务来进行图片识别。创建新服务后,点击连接到现有应用程序,就OK了。关于服务的创建,具体参见Watson使用指南(五)

通过Bluemix认证公众微信号

在微信公众号页面打开开发者页面,进行服务器配置。需要注意的是令牌自己随意填写就好。
新建auth.py,根据微信官方的文档,获取相关参数:

token = '微信页面填写的令牌'   signature = request.args.get('signature', '')  echostr = request.args.get('echostr', '')  timestamp = request.args.get('timestamp', '')  nonce = request.args.get('nonce', '')  tmp = [timestamp, nonce, token]  tmp.sort()  tmp = ''.join(tmp)  if ( hashlib.sha1(tmp).hexdigest() == signature ):    return make_response(echostr)

push代码到Bluemix,在微信页面点击提交,显示提交成功,就完了通过Bluemix认证微信号。

识图作诗相关功能开发

顾名思义,识图作诗,就包括识图和作诗两个部分。用到三个文件,visual.py,translate.py,poem.py

visual.py

调用Watson服务,返回的是嵌套字典信息,可以转换成JSON格式然后提取信息。这里直接操作字典提取:

def VisualContent(url):visualRecognition = VisualRecognitionV3('2016-05-20', api_key='创建服务后系统返回的api_key')content = visualRecognition.classify(images_url = url)images = content.get("images")classifiers = images[0].get("classifiers")classes = classifiers[0].get("classes")res = classes[0].get("class")return res

translate.py

Watson服务中有翻译服务,但是不支持英汉互译。而获取到的图片信息都是英文,显然不能直接去用英文来搜索相关诗文。于是我写了这个模块,直接在有道翻译的网页中获取翻译。

 def Translate(word):url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/'key = worddata = {}data['type'] = 'AUTO'data['i'] = keydata['doctype'] = 'json'data['xmlVersion'] = '1.6'data['keyfrom'] = 'fanyi.web'data['ue'] = 'UTF-8'data['typoResult'] = 'true'data = urllib.parse.urlencode(data).encode("utf-8")content = urllib.request.urlopen(url, data).read().decode("utf-8")json_content = json.loads(content)res = json_content["translateResult"][0][0]['tgt'][:2]return res

poem.py
最后一个部分,就是根据图片内容获得诗文信息了,简单的爬虫,用xpath直接
获得网页内容。

def MakePoem(word):url_base = "地址"key = wordurl = url_base+keyres = requests.get(url)res.encoding = 'utf-8'#print(res.text)root = etree.HTML(res.content)items = root.xpath('//div[@class="sons"][2]/p[@style="margin-bottom:0px;"]')[0]item = items.xpath('string(.)')content = item.replace('\n','').replace(' ','')length = len(content)answer = content[:length-1]return answer

其他
值得一提的是,微信公众号中的消息处理都是以xml格式封装的,所以在获取用户消息中,需要解析格式获取消息内容;同样,返回消息时,也要对内容封装后再返回用户。

总结

通过这几天微信后台的反馈来看,服务器不稳定,识别内容类别较少,爬取信息不稳定这三个因素经常导致用户会收到“暂时停止服务”的消息。
后期添加异常处理模块希望能使错误信息得到人性化反馈。

这是我的公众号,欢迎关注

Watson使用指南(六)在微信公众号中实现识图作诗功能相关推荐

  1. python获取藏头诗内容_Watson使用指南(六)在微信公众号中实现识图作诗功能

    本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流. 目录: 概述 环境准备及相关账号申请 部署Python Flask应用到Bluemi ...

  2. python微信公众号翻译功能怎么用_Watson使用指南(七)在微信公众号中实现识图作诗功能...

    本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流. 目录: 概述 环境准备及相关账号申请 部署Python Flask应用到Bluemi ...

  3. php 向公众号发送消息,微信公众号之主动给用户发送消息功能

    前一段时间项目中遇到一个稍微麻烦一点的问题. 即客户要求,他在后台编辑好文章后要主动给每个用户都发送消息,并可以让用户点击直接进入文章页面. 于是乎,当时脑子一热,想着没什么大的问题,so easy. ...

  4. 企业宣传片如何快速接入微信公众号中?

    原创文章:2019-8-6 文章内容:快速在微信公众号中接入自己公司的视频宣传片 大家好,我来说说企业视频宣传片.产品宣传片如何接入微信公众号,让关注公众号的用户,轻松点击观看,提升企业形象,提升产品 ...

  5. php怎么添加会员卡,怎么在微信公众号中添加一个会员卡领取功能

    怎么在微信公众号中添加一个会员卡领取功能 发布时间:2020-12-09 16:06:27 来源:亿速云 阅读:129 作者:Leah 这篇文章将为大家详细讲解有关怎么在微信公众号中添加一个会员卡领取 ...

  6. php 微信开发 菜单,微信公众号中个性化菜单的开发实例

    微信公众号中个性化菜单的开发实例 个性化菜单让公众号的不同用户群体看到不一样的自定义菜单.该接口开放给已认证订阅号和已认证服务号,个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Andro ...

  7. 微信公众号页面模版怎么添加文章推荐功能

    微信公众号中发布的文章可以添加推荐的文章,该怎么添加文章推荐功能呢?下面我们就来看看详细的教程. 微信公众号页面模版怎么添加文章推荐功能? 1.登录微信公众平台,选择"功能"--& ...

  8. 微信公众号php从0开发,包括功能(自定义菜单,分享)

    之前写的一篇微信公众号文章. 工作需要,进行此次调研,并记录开发过程. 开发目的,页面授权,页面获取用户头像,用户昵称 微信id, 分享页面. 微信订阅号 无法获取用户个人信息 写在记录前,公众号也是 ...

  9. 基于WeX5平台开发微信公众号中的在线问卷调查

    在线调查问卷在我们的生活中应用的非常广泛,能够非常方便快捷的获取到我们需要的信息,统计分析出相关核心的数据,方便我们的决策.在微信发展迅速的时代,覆盖面非常的大,那么基于微信公众号去推送我们的在线问卷 ...

最新文章

  1. pandas对dataframe的数据列进行随机抽样(Random Sample of Columns):使用sample函数进行数据列随机抽样(有放回的随机抽样,replacement)
  2. mysql servicebroker_阿里云Kubernetes服务 - Service Broker快速入门指南
  3. HashMap原理总结
  4. 全球及中国沼气发电行业现状及项目发展动态调研报告2021年版
  5. linux C语言如何获取进程号和线程号?getpid()、syscall(__NR_gettid)
  6. iphone 使用委托(delegate)在不同的窗口之间传递数据
  7. 坑 之 Tensorflow安装在导入模块时会出现ImportError: DLL load failed: 找不到指定的模块的问题
  8. sybase SET CHAINED OFF与SET CHAINED ON两种事务模式的区别
  9. Linux下查看CPU信息、机器型号等硬件信息命令
  10. UVA11413 Fill the Containers【二分搜索】
  11. [转载] Python input()函数
  12. 使用html的a标签,无法转跳到servlet页面中的解决办法,适用于servlet的初学者,不与框架相兼容
  13. 修改TIM的默认路径
  14. CentOS7 原生 yum 源修改为阿里 yum 源
  15. matlab 中继选择,全双工中继选择系统的蒙特卡洛仿真
  16. 如何在visio里将图形进行任意角度旋转
  17. Android-AhMyth Rat
  18. 分享虚拟机VirtualBox安装win7系统完整步骤。
  19. 海外跨境直播面临的难题及解决方案
  20. Intel Distiller工具包-量化实现1

热门文章

  1. solidity string类型容量大小
  2. Aes加/解密工具类 --Java
  3. 综合案例介绍——五人游戏
  4. Google公司十大彩色幽默
  5. Android Bluetooth蓝牙enable过程
  6. java pdf png_Java实现pdf转化为png图片
  7. 百度元宵晚会再发2亿现金红包
  8. 教你怎样解除电脑开机密码
  9. opencv中的copyTo函数在opencv-Python中的实现
  10. Linux驱动中delayed workqueue用法