摘要:詳見注冊微信公眾號這個很簡單,而且網上一搜很多,我在這里就不說了。關于服務的創建,具體參見使用指南五通過認證公眾微信號在微信公眾號頁面打開開發者頁面,進行服務器配置。
本文章主要是寫一下這個項目開發的過程及之間遇到的問題,作為記錄,也希望以此為契機認識志同道合的朋友,一起學習交流。
目錄:
概述
環境準備及相關賬號申請
部署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 FlaskPython 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 = 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
最后一個部分,就是根據圖片內容獲得詩文信息了,簡單的爬蟲,用xpath直接
獲得網頁內容。
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
其他
值得一提的是,微信公眾號中的消息處理都是以xml格式封裝的,所以在獲取用戶消息中,需要解析格式獲取消息內容;同樣,返回消息時,也要對內容封裝后再返回用戶。
通過這幾天微信后臺的反饋來看,服務器不穩定,識別內容類別較少,爬取信息不穩定這三個因素經常導致用戶會收到“暫時停止服務”的消息。
后期添加異常處理模塊希望能使錯誤信息得到人性化反饋。
這是我的公眾號,歡迎關注
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38456.html
摘要:架構識圖吟詩架構由以下層和關聯實現視圖一個響應相對靈敏但不夠美觀的前端用戶界面,只使用了原生。平臺本版本部署在阿里云上,采用的流行框架。 寫在前面 關于這個作品的設計理念和情懷,請看這里 初衷 隨著作品的不斷迭代和改進,我已經漸漸忘記初衷是什么了。是為了討某人歡心做的小demo或是為了熟悉使用watson的練手作品,都已不大記得。然而現在,是想利用零碎的時間,做一個完整的項目。來探究A...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
摘要:在微信開發者工具中調試和一定要正確域名一定是備案的綁定域名需要的放在服務器上的位置一定要正確參考微信公眾號開發文檔 node微信公眾號開發 概覽 key value 項目名稱 node微信公眾號開發 項目描述 使用node編寫接口,前后端分離獲取簽名數據 開發者 leinov 發布日期 2018-11-07 倉庫 github地址 安裝&使用 下載 gi...
摘要:微信支付方式付款碼支付適用于線下場所支付支付是指商戶通過調用微信支付提供的接口,在支付場景中調起微信支付模塊完成收款。主要用于觸屏版的手機瀏覽器請求微信支付的場景。可以方便的從外部瀏覽器喚起微信支付。 微信支付方式(https://pay.weixin.qq.com/sta...): 1、付款碼支付————————適用于線下場所 2、JSAPI支付————————JSAPI支付是指商戶...
閱讀 822·2021-11-25 09:43
閱讀 1690·2021-09-29 09:42
閱讀 1902·2019-08-30 15:55
閱讀 3424·2019-08-30 15:54
閱讀 2630·2019-08-30 13:20
閱讀 3514·2019-08-29 13:25
閱讀 927·2019-08-28 18:03
閱讀 1790·2019-08-26 13:44