一、簡介
在前面的幾篇微信功能開發文件中,各個微信的功能都是獨立的,單一微信只能提供一種功能,這樣不符合大眾開發者和客戶的需求。所以在這一篇文章中,我們將對前面開發出來的微信功能進行簡單整合,以供讀者參考。
二、思路分析
一種簡單的做法是,擷取關鍵字,然後進行判斷,執行相應功能程式碼。這種做法比較適合功能不多,簡單的微信;另一種做法是,給各功能編號,然後記錄使用者選擇的功能狀態,使用者每次查詢的時候,首先判斷他的狀態,然後執行相應功能程式碼。這種做法適合功能整合比較多,複雜的微信;開發者可以根據自己的需要來進行選擇。在這篇文章中,我們將會講解天氣和翻譯功能的整合,更多功能的整合類似,大家可以參考著做一下。
三、關鍵字擷取做法
3.1 關鍵字擷取
我們定義使用者傳送過來的訊息格式是固定好的,查詢天氣格式為 “地區+天氣”,例如 “蘇州天氣”、“北京天氣”,所以首先擷取後兩個字,判斷是否為 “天氣” 關鍵字,然後再擷取前面的城市名,進行查詢。同理,翻譯也是擷取前面的兩個字,判斷是否為“翻譯”關鍵字,然後再擷取後面的文字進行查詢操作。
關於關鍵字擷取方法,請參考前面的文章介紹,地址是:http://www.cnblogs.com/mchina/p/3170551.html。
//擷取關鍵字 $weather_key = mb_substr($keyword,-2,2,"UTF-8"); $city_key = mb_substr($keyword,0,-2,"UTF-8"); $translate_key = mb_substr($keyword,0,2,"UTF-8"); $word_key = mb_substr($keyword,2,200,"UTF-8");
3.2 功能整合
if($weather_key == '天氣' && !empty($city_key) && $translate_key != '翻譯'){ $contentStr = _weather($city_key); }elseif($translate_key == '翻譯' && !empty($word_key)){ $contentStr = _baiduDic($word_key); }else{ $contentStr = "感謝您關注【卓錦蘇州】\n微訊號:zhuojinsz"; }
說明:在這裡,我們已經將查詢天氣和翻譯封裝成了函式 _weather() 和 _baiduDic(),然後引入這些檔案,在這裡直接呼叫即可,非常方便。
這樣,我們就完成了天氣和翻譯功能的整合。
3.3 測試
測試成功。
四、狀態記錄做法
4.1 說明
首先,我們需要將各功能進行編號,比如:
回覆序號:
1. 天氣查詢
2. 翻譯查詢
然後使用資料庫記錄使用者的查詢狀態,使用者每次輸入訊息,系統先從資料庫中查詢該使用者的狀態,然後進行相應操作。
4.2 在資料庫中建立使用者狀態表 user_flags.
-- -- 表的結構 `user_flags` -- CREATE TABLE IF NOT EXISTS `user_flags` ( `from_user` varchar(50) NOT NULL, `flag_id` int(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
4.3 引入資料庫函式檔案
運算元據庫,需要引入資料的操作檔案,這裡使用BAE 提供的MySQL 雲資料庫。
//引入資料庫檔案 require_once('includes/mysql_bae.func.php');
4.4 判斷使用者狀態
//判斷使用者狀態 $sql = "SELECT flag_id FROM user_flags WHERE from_user = '$fromUsername' LIMIT 0,1"; $result = _select_data($sql); while (!!$rows = mysql_fetch_array($result)) { $user_flag = $rows[flag_id]; }
說明:從user_flags 表中獲取flag_id 賦給$user_flag,用於下面的判斷操作。
4.5 判斷使用者存在的狀態和新輸入的狀態
if(trim($keyword) <> $user_flag && is_numeric($keyword)) { $user_flag = ''; $sql = "DELETE FROM user_flags WHERE from_user = '$fromUsername'"; _delete_data($sql); }
說明:判斷使用者存在的狀態和新輸入的狀態,如果狀態不一樣,而且輸入的keyword 是數字,則設定$user_flag 為空,資料庫中清除狀態,好像第一次查詢流程
4.6 使用者狀態判斷
A. 狀態為空,即第一次查詢
if (empty($user_flag)) { switch ($keyword) { case 1: //查詢天氣 $sql = "insert into user_flags(from_user,flag_id) values('$fromUsername','1')"; $contentStr = "請輸入要查詢天氣的城市:如北京、上海、蘇州"; break; case 2: //翻譯 $sql = "insert into user_flags(from_user,flag_id) values('$fromUsername','2')"; $contentStr = "請輸入要翻譯的內容:如:早上好、good morning、おはよう"; break; default: //其他 $sql = ""; $contentStr = "感謝您關注【卓錦蘇州】\n微訊號:zhuojinsz\n請回復序號:\n1. 天氣查詢\n2. 翻譯查詢\n輸入【幫助】檢視提示\n更多內容,敬請期待..."; break; } //判斷並執行上面的插入語句 if (!empty($sql)) { _insert_data($sql); }
}
說明:使用者狀態為空,即第一次查詢,如果使用者輸入的關鍵字是功能序號,即1或2,則將使用者狀態寫入資料庫,然後給出提示資訊;如果使用者輸入的關鍵字不是功能序號,則給出幫助資訊,提示使用者輸入。
B. 使用者狀態不為空
else{ if ($user_flag == '1') { $contentStr = _weather($keyword); //查詢天氣 }elseif ($user_flag == '2') { $contentStr = _baiduDic($keyword); //翻譯 } }
說明:使用者狀態不為空,使用者已經有查詢操作,只要使用者不切換功能,則一直保持在現有功能下,執行相應程式碼。
4.7 測試
五、完整程式碼獲取
請訪問 樂思樂享 官方論壇
URL:http://pan.baidu.com/s/1c0s3Jby
六、關注
請關注 卓錦蘇州 微信公眾帳號,卓錦蘇州 基於BAE 平臺開發,針對於主流的微信功能進行開發測試。
您可以關注 卓錦蘇州 公眾帳號進行功能測試,以及獲取新的應用開發。
1. 登入微信客戶端,通訊錄 -> 新增朋友 -> 查詢公眾號 -> zhuojinsz,查詢並關注。
2. 掃描二維碼:
卓錦蘇州 功能列表:
David Camp
我們永遠相信,分享是一種美德 | We Believe, Great People Share Knowledge...