微信開放平臺開發(1) 語義理解

關鍵字:微信公衆平臺 微信開放平臺 語義理解 semantic 
做者:方倍工做室 
原文: http://www.cnblogs.com/txw1958/p/weixin-semantic-analysis.html 

 

微信開放平臺語義理解接口調用(http請求)簡單方便,用戶無需掌握語義理解及相關技術,只需根據本身的產品特色,選擇相應的服務便可搭建一套智能語義服務。php

第一步:建立應用

請到「管理中心」建立應用,點擊「建立移動應用」或者「建立網站應用」,填寫相關資料,而後將該應用提交審覈,只有審覈經過的應用才能進行開發。html

註冊完畢,咱們會在 7 個工做日內完成審覈工做。審覈經過以後,開放平臺將分配給該移動應用全局惟一的AppID和AppSecret。html5

第二步:根據AppID和AppSecret得到access token

調用接口:

http請求方式: GET
git

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
參數說明:
參數 是否必須 說明
grant_type 獲取access_token填寫client_credential
appid 應用的appid
secret 應用的appsecret
返回說明:

正常狀況下,微信會返回下述JSON數據包。json

{
"access_token":"ACCESS_TOKEN",
"expires_in":7200
} 

 

參數 說明
access_token 獲取到的憑證
expires_in 憑證有效時間,單位:秒

錯誤時微信會返回錯誤碼等信息,JSON數據包示例以下(該示例爲AppID無效錯誤):api

{
"errcode":40013,
"errmsg":"invalid appid"
} 

 

第三步:使用access token調用語義理解接口

輸入說明:

http請求方式: POST(請使用https協議)
微信

https://api.weixin.qq.com/semantic/semproxy/search?access_token=YOUR_ACCESS_TOKEN

 

POST數據格式:JSON
POST數據例子:
app

{
"query":"查一下明天從北京到上海的南航機票",
"city":"北京",
"category": "flight,hotel",
"appid":"wxaaaaaaaaaaaaaaaa",
"uid":"123456"
}

輸入參數說明:微信公衆平臺

參數 是否必須 參數類型 說明
access_token String 根據appid和appsecret獲取到的token
query String 輸入文本串
category String 須要使用的服務類型,多個用「,」隔開,不能爲空
latitude 見接口協議文檔 Float 緯度座標,與經度同時傳入;與城市二選一傳入
longitude 見接口協議文檔 Float 經度座標,與緯度同時傳入;與城市二選一傳入
city 見接口協議文檔 String 城市名稱,與經緯度二選一傳入
region 見接口協議文檔 String 區域名稱,在城市存在的狀況下可省;與經緯度二選一傳入
appid String Appid,開發者的惟一標識
uid String 用戶惟一id(非開發者id),用戶區分應用下的不一樣用戶(建議填入用戶openid),若是爲空,則沒法使用上下文理解功能。appid和uid同時存在的狀況下,纔可使用上下文理解功能。
返回說明:

正常狀況下,微信會返回下述JSON數據包。curl

 

{
    "errcode": 0,
    "query": "查一下明天從北京到上海的南航機票",
    "type": "flight",
    "semantic": {
        "details": {
            "start_loc": {
                "type": "LOC_CITY",
                "city": "北京市",
                "city_simple": "北京",
                "loc_ori": "北京"
            },
            "end_loc": {
                "type": "LOC_CITY",
                "city": "上海市",
                "city_simple": "上海",
                "loc_ori": "上海"
            },
            "start_date": {
                "type": "DT_ORI",
                "date": "2014-03-05",
                "date_ori": "明天"
            },
            "airline": "中國南方航空公司"
        },
        "intent": "SEARCH"
    }
}

返回參數說明:

參數 是否必須 參數類型 說明
errcode Int 表示請求後的狀態
query String 用戶的輸入字符串
type String 服務的全局類型id,詳見協議文檔中垂直服務協議定義
semantic Object 語義理解後的結構化標識,各服務不一樣
result Array 部分類別的結果
answer String 部分類別的結果html5展現,目前不支持
text String 特殊回覆說明

更多詳細內容與協議說明,請查看:語義理解接口協議文檔

代碼實現 

<?php

/*
    方倍工做室 http://www.fangbei.org/
    CopyRight 2014 All Rights Reserved
    微信開放平臺接口SDK
*/

/*
    require_once('weixin.class.php');
    $weixin = new class_weixin();
*/

define('APPID',         "wxed782be999f86eab");
define('APPSECRET',        "72edec63779f7aa16a3a33447e2c7-fb");

class class_weixin
{
    var $appid = APPID;
    var $appsecret = APPSECRET;

    //構造函數,獲取Access Token
    public function __construct($appid = NULL, $appsecret = NULL)
    {
        if($appid && $appsecret){
            $this->appid = $appid;
            $this->appsecret = $appsecret;
        }

        //1. 本地寫入
        $res = file_get_contents('access_token.json');
        $result = json_decode($res, true);
        $this->expires_time = $result["expires_time"];
        $this->access_token = $result["access_token"];

        if (time() > ($this->expires_time + 3600)){
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
            $res = $this->http_request($url);
            $result = json_decode($res, true);
            $this->access_token = $result["access_token"];
            $this->expires_time = time();
            file_put_contents('access_token.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}');
        }
    }

    public function semantic_search($record)
    {
        $data = urldecode(json_encode($record));
        $url = "https://api.weixin.qq.com/semantic/semproxy/search?access_token=".$this->access_token;
        $res = $this->http_request($url, $data);
        return json_decode($res, true);
    }

    //HTTP請求(支持HTTP/HTTPS,支持GET/POST)
    protected function http_request($url, $data = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    //日誌記錄
    private function logger($log_content)
    {
        if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
            sae_set_display_errors(false);
            sae_debug($log_content);
            sae_set_display_errors(true);
        }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
            $max_size = 500000;
            $log_filename = "log.xml";
            if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
            file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
        }
    }
}

 

接口調用

    $weixin = new class_weixin();
    $record =  array('query' => "查一下明天從北京到深圳的深航機票",
                     'city' => "北京",
                     'category' => "flight,hotel",
                     'appid' => $weixin->appid,
                     'uid' => ""
                     );
    $result = $weixin->semantic_search($record);

結果返回

{
       "errcode" : 0,
       "query" : "查一下明天從北京到深圳的國航機票",
       "semantic" : {
          "details" : {
             "airline" : "中國國際航空公司",
             "answer" : "已幫您預約2015-12-19,從北京市出發,前往深圳市的航班。",
             "context_info" : {
                "isFinished" : "1",
                "null_times" : "0"
             },
             "end_loc" : {
                "city" : "深圳市",
                "city_simple" : "深圳",
                "loc_ori" : "深圳",
                "modify_times" : "0",
                "province" : "廣東省",
                "province_simple" : "廣東|粵",
                "slot_content_type" : "2",
                "type" : "LOC_CITY"
             },
             "hit_str" : "查 一下 明天 從 北京 到 深圳 國航 機票 ",
             "start_date" : {
                "date" : "2015-12-19",
                "date_lunar" : "2015-11-09",
                "date_ori" : "明天",
                "modify_times" : "0",
                "slot_content_type" : "2",
                "type" : "DT_ORI",
                "week" : "6"
             },
             "start_loc" : {
                "city" : "北京市",
                "city_simple" : "北京|京",
                "loc_ori" : "北京",
                "modify_times" : "0",
                "slot_content_type" : "2",
                "type" : "LOC_CITY"
             }
          },
          "intent" : "SEARCH"
       },
       "type" : "flight"
    }

 

原文:http://www.cnblogs.com/txw1958/p/weixin-semantic-analysis.html 

相關文章
相關標籤/搜索