摘要:詳見(jiàn)注冊(cè)微信公眾號(hào)這個(gè)很簡(jiǎn)單,而且網(wǎng)上一搜很多,我在這里就不說(shuō)了。關(guān)于服務(wù)的創(chuàng)建,具體參見(jiàn)使用指南五通過(guò)認(rèn)證公眾微信號(hào)在微信公眾號(hào)頁(yè)面打開(kāi)開(kāi)發(fā)者頁(yè)面,進(jìn)行服務(wù)器配置。
本文章主要是寫(xiě)一下這個(gè)項(xiàng)目開(kāi)發(fā)的過(guò)程及之間遇到的問(wèn)題,作為記錄,也希望以此為契機(jī)認(rèn)識(shí)志同道合的朋友,一起學(xué)習(xí)交流。
目錄:
概述
環(huán)境準(zhǔn)備及相關(guān)賬號(hào)申請(qǐng)
部署Python Flask應(yīng)用到Bluemix
通過(guò)Bluemix認(rèn)證公眾微信號(hào)
識(shí)圖作詩(shī)相關(guān)功能開(kāi)發(fā)
總結(jié)
概述本文將從一個(gè)開(kāi)發(fā)人員角度,介紹如何使用Bluemix平臺(tái)開(kāi)發(fā)和部署Python Flask應(yīng)用,如何通過(guò)Bluemix進(jìn)行微信公眾號(hào)認(rèn)證,最后結(jié)合相關(guān)Watson服務(wù),實(shí)現(xiàn)用戶向公眾號(hào)發(fā)送圖片,后臺(tái)識(shí)別圖片并返回詩(shī)文的功能。
Bluemix
BLuemix是IBM公司推出的一個(gè)云平臺(tái)服務(wù),通過(guò)它不僅可以部署本地應(yīng)用到云端,還可以調(diào)用BLuemix本身自帶的強(qiáng)大的一系列服務(wù)來(lái)實(shí)現(xiàn)很多功能。
Watson
Watson是IBM公司推出的一系列認(rèn)知計(jì)算服務(wù),包括自然語(yǔ)言分類,情感分析,圖像識(shí)別等等,我在本系列的前幾期已經(jīng)完成了可用Python實(shí)現(xiàn)部分的文檔翻譯,詳見(jiàn)
微信公眾平臺(tái)
作為一個(gè)程序員,使用微信公眾號(hào),關(guān)注點(diǎn)就不僅僅是發(fā)送推文消息了,通過(guò)自己開(kāi)發(fā),來(lái)實(shí)現(xiàn)一些有趣的功能,做不同于一般的公眾號(hào)才是我想要的。
環(huán)境準(zhǔn)備及相關(guān)賬號(hào)申請(qǐng) 注冊(cè)BLuemix賬號(hào)申請(qǐng)地址:http://www.bluemix.net 在頁(yè)面右上角點(diǎn)擊注冊(cè),填寫(xiě)相關(guān)信息提交申請(qǐng),Bluemix 會(huì)發(fā)一封確認(rèn)郵件到注冊(cè)郵箱,需要手工進(jìn)入注冊(cè)郵箱點(diǎn)擊確認(rèn),才能成功注冊(cè)。第一次登陸 Bluemix 控制臺(tái)的時(shí)候,會(huì)要求創(chuàng)建工作空間,建議創(chuàng)建在悉尼或英國(guó)(雖然訪問(wèn)都很慢)。
安裝CloudFoundry工具通過(guò)該工具,可以在命令行使用CF相關(guān)命令進(jìn)行與BLuemix之間的交互,包括部署,更新,查詢。詳見(jiàn):http://docs.cloudfoundry.org/...
注冊(cè)微信公眾號(hào)這個(gè)很簡(jiǎn)單,而且網(wǎng)上一搜很多,我在這里就不說(shuō)了。
部署Python Flask應(yīng)用到Bluemix Python FlaskPython Flask 是基于Python的一種輕量級(jí)網(wǎng)絡(luò)框架,便捷易用。這個(gè)應(yīng)用中Flask僅僅起到傳遞參數(shù)的作用,對(duì)于Flask本身的使用不是很多。這就是說(shuō),你同樣可以僅僅使用Python,因?yàn)镻ython本身也可以提供網(wǎng)絡(luò)服務(wù)。
創(chuàng)建應(yīng)用在Bluemix首頁(yè)點(diǎn)擊創(chuàng)建應(yīng)用,新的頁(yè)面中會(huì)顯示很多可創(chuàng)建的應(yīng)用案例,下拉菜單找到Flask,創(chuàng)建,根據(jù)提示填寫(xiě)域名等信息。創(chuàng)建后根據(jù)頁(yè)面提示下載模板代碼到本地。
要想在bluemix下成功運(yùn)行應(yīng)用,至少需要有manifest.yml,requirements.txt,runtime.txt和app.py這四個(gè)文件。
manifest.yml
這是應(yīng)用程序的基本配置信息,包括域名和主機(jī)名。是下載源碼后默認(rèn)的,不需要更改。
requirements.txt
這個(gè)文件中包含應(yīng)用所需要的第三方依賴,比如我的應(yīng)用里是這樣的:
Flask watson_developer_cloud lxml
flask是Python網(wǎng)絡(luò)框架。watson_developer_cloud用于調(diào)用Watson服務(wù)。lxml包用來(lái)爬取網(wǎng)絡(luò)信息。
runtime.txt
該文件用來(lái)指定需要的Python版本
app.py
Python應(yīng)用的腳本或源代碼文件,我會(huì)在“識(shí)圖作詩(shī)相關(guān)功能開(kāi)發(fā)”做詳細(xì)說(shuō)明
部署應(yīng)用在本地進(jìn)行應(yīng)用的開(kāi)發(fā),并且本地調(diào)試和運(yùn)行成功后就可以部署代碼了。在bluemix上點(diǎn)擊應(yīng)用程序,在應(yīng)用程序菜單選擇“入門”,根據(jù)提示在本地命令行使用cf命令就可以成功push到BLuemix上。如果過(guò)程中遇到問(wèn)題,可以通過(guò)
cf logs 應(yīng)用程序名 --recent
來(lái)查看錯(cuò)誤
創(chuàng)建并綁定服務(wù)在Bluemix應(yīng)用程序界面找到創(chuàng)建新服務(wù),同創(chuàng)建應(yīng)用程序一樣,新界面會(huì)有很多服務(wù)可供選擇。這里,我選擇的是Visual Recognition服務(wù)來(lái)進(jìn)行圖片識(shí)別。創(chuàng)建新服務(wù)后,點(diǎn)擊連接到現(xiàn)有應(yīng)用程序,就OK了。關(guān)于服務(wù)的創(chuàng)建,具體參見(jiàn)Watson使用指南(五)
通過(guò)Bluemix認(rèn)證公眾微信號(hào)在微信公眾號(hào)頁(yè)面打開(kāi)開(kāi)發(fā)者頁(yè)面,進(jìn)行服務(wù)器配置。需要注意的是令牌自己隨意填寫(xiě)就好。
新建auth.py,根據(jù)微信官方的文檔,獲取相關(guān)參數(shù):
token = "微信頁(yè)面填寫(xiě)的令牌" 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,在微信頁(yè)面點(diǎn)擊提交,顯示提交成功,就完了通過(guò)Bluemix認(rèn)證微信號(hào)。
識(shí)圖作詩(shī)相關(guān)功能開(kāi)發(fā)顧名思義,識(shí)圖作詩(shī),就包括識(shí)圖和作詩(shī)兩個(gè)部分。用到三個(gè)文件,visual.py,translate.py,poem.py
visual.py
調(diào)用Watson服務(wù),返回的是嵌套字典信息,可以轉(zhuǎn)換成JSON格式然后提取信息。這里直接操作字典提取:
def VisualContent(url): visualRecognition = VisualRecognitionV3("2016-05-20", api_key="創(chuàng)建服務(wù)后系統(tǒng)返回的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服務(wù)中有翻譯服務(wù),但是不支持英漢互譯。而獲取到的圖片信息都是英文,顯然不能直接去用英文來(lái)搜索相關(guān)詩(shī)文。于是我寫(xiě)了這個(gè)模塊,直接在有道翻譯的網(wǎng)頁(yè)中獲取翻譯。
def Translate(word): url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/" key = word data = {} data["type"] = "AUTO" data["i"] = key data["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
最后一個(gè)部分,就是根據(jù)圖片內(nèi)容獲得詩(shī)文信息了,簡(jiǎn)單的爬蟲(chóng),用xpath直接
獲得網(wǎng)頁(yè)內(nèi)容。
def MakePoem(word): url_base = "地址" key = word url = url_base+key res = requests.get(url) res.encoding = "utf-8" #print(res.text) root = etree.HTML(res.content) items = root.xpath("http://div[@class="sons"][2]/p[@style="margin-bottom:0px;"]")[0] item = items.xpath("string(.)") content = item.replace(" ","").replace(" ","") length = len(content) answer = content[:length-1] return answer
其他
值得一提的是,微信公眾號(hào)中的消息處理都是以xml格式封裝的,所以在獲取用戶消息中,需要解析格式獲取消息內(nèi)容;同樣,返回消息時(shí),也要對(duì)內(nèi)容封裝后再返回用戶。
通過(guò)這幾天微信后臺(tái)的反饋來(lái)看,服務(wù)器不穩(wěn)定,識(shí)別內(nèi)容類別較少,爬取信息不穩(wěn)定這三個(gè)因素經(jīng)常導(dǎo)致用戶會(huì)收到“暫時(shí)停止服務(wù)”的消息。
后期添加異常處理模塊希望能使錯(cuò)誤信息得到人性化反饋。
這是我的公眾號(hào),歡迎關(guān)注
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38456.html
摘要:架構(gòu)識(shí)圖吟詩(shī)架構(gòu)由以下層和關(guān)聯(lián)實(shí)現(xiàn)視圖一個(gè)響應(yīng)相對(duì)靈敏但不夠美觀的前端用戶界面,只使用了原生。平臺(tái)本版本部署在阿里云上,采用的流行框架。 寫(xiě)在前面 關(guān)于這個(gè)作品的設(shè)計(jì)理念和情懷,請(qǐng)看這里 初衷 隨著作品的不斷迭代和改進(jìn),我已經(jīng)漸漸忘記初衷是什么了。是為了討某人歡心做的小demo或是為了熟悉使用watson的練手作品,都已不大記得。然而現(xiàn)在,是想利用零碎的時(shí)間,做一個(gè)完整的項(xiàng)目。來(lái)探究A...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過(guò)手機(jī)完成快速的支付流程。目前微信支付支持手機(jī)系統(tǒng)有蘋(píng)果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支...
摘要:在微信開(kāi)發(fā)者工具中調(diào)試和一定要正確域名一定是備案的綁定域名需要的放在服務(wù)器上的位置一定要正確參考微信公眾號(hào)開(kāi)發(fā)文檔 node微信公眾號(hào)開(kāi)發(fā) 概覽 key value 項(xiàng)目名稱 node微信公眾號(hào)開(kāi)發(fā) 項(xiàng)目描述 使用node編寫(xiě)接口,前后端分離獲取簽名數(shù)據(jù) 開(kāi)發(fā)者 leinov 發(fā)布日期 2018-11-07 倉(cāng)庫(kù) github地址 安裝&使用 下載 gi...
摘要:微信支付方式付款碼支付適用于線下場(chǎng)所支付支付是指商戶通過(guò)調(diào)用微信支付提供的接口,在支付場(chǎng)景中調(diào)起微信支付模塊完成收款。主要用于觸屏版的手機(jī)瀏覽器請(qǐng)求微信支付的場(chǎng)景??梢苑奖愕膹耐獠繛g覽器喚起微信支付。 微信支付方式(https://pay.weixin.qq.com/sta...): 1、付款碼支付————————適用于線下場(chǎng)所 2、JSAPI支付————————JSAPI支付是指商戶...
閱讀 821·2021-11-25 09:43
閱讀 1690·2021-09-29 09:42
閱讀 1902·2019-08-30 15:55
閱讀 3423·2019-08-30 15:54
閱讀 2629·2019-08-30 13:20
閱讀 3514·2019-08-29 13:25
閱讀 925·2019-08-28 18:03
閱讀 1787·2019-08-26 13:44