2個聊天機器人

2014/06/28修改.

       修改小黃雞模塊, 小i就不改了, 沒什麼用。。。


新版小黃雞模塊(只寫了個ask函數, teach還沒寫, 後面應該會繼續修改。。)


#coding=utf-8

import json;
import urllib;
import urllib.request;
from urllib.parse import urlencode;

URL_SIMSIMI = "http://www.simsimi.com/talk.htm";
URL_ASKSIMSIMI = "http://www.simsimi.com/func/reqN?";
URL_TEACHSIMSIMI = "";

talkHeader = {
    "Cookie":"simsimi_uid=53294991; simsimi_uid=53294991; isFirst=1; isFirst=1; sid=s%3AXcqIfaDZ5P4biUHi4Xw8TdFE.CYYochQc23%2B%2BvPjDw5HH4yg5MTN%2FSnBtskGXJHEX8f4; AWSELB=150F676708F2639057F41EA6CD9115064C58E864E4D5FE3F62AF683EB3CA54C1A44837308BAB86F4F48D2BA2A2B01B0AEA34FBA3D92BA7AB89083051C189504CF5589F0BF7; teach_btn_url=talk; teach_btn_url=talk; Filtering=0.0; Filtering=0.0; popup_ad_InMobi=1; popup_ad_InMobi=1; menuType=web; menuType=web; selected_nc=ch; selected_nc=ch; __utma=119922954.2134471962.1398783865.1403874641.1403877970.3; __utmb=119922954.23.9.1403880508342; __utmc=119922954; __utmz=119922954.1403874641.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)",
    "Referer":"http://www.simsimi.com/talk.htm", 
    "User-Agent":"Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19",
}

class Simsimi:
    def __init__(self):
        self._opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor());
        
    def ask(self, q):
        data = {
            "lc":"ch",
            "ft":"0.0",
            "req":q,
            "fl":"http://www.simsimi.com/talk.htm",
        };
        request = urllib.request.Request(URL_ASKSIMSIMI + urlencode(data), headers = talkHeader);
        ret = json.loads(self._opener.open(request).read().decode("utf-8"));
        if(ret["result"] == 200 and ret["sentence_link_id"] != 1):
            return ret["sentence_resp"];
        return None;
        
    def teach(self, q, asw):
        pass;
        
def main():
    robot = Simsimi();
    print(robot.ask("sb"));
    
if(__name__ == "__main__"):
    main();





#----------------------------------------------------------------------------------(分割線, 以下內容已失效。。。)--------------------------------------------------------------------------------------------------


大笑找了2個接口,,,用來做聊天機器人(後面應該會寫一個貼吧自動回覆的機器人。所以先弄下這個),,,有需要就拿去用吧。


小i機器人的。。。。(已失效);

# coding=gbk

import urllib;
import urllib.request;
import hashlib;
import random;
from urllib.parse import urlencode;

realm = "xiaoi.com";
menthod = "POST";
uri = "/robot/ask.do";
string = "abcdefghijklmnopqrstuvwxyz0123456789";

#請求頭;
headers = {
        "User-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
        "Cache-Control": "no-cache",
        "Pragma":"no-cache",
        "Host":"nlp.xiaoi.com",
        "Connection":"Keep-Alive",
        "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With":"XMLHttpRequest",
        "X-Auth":"",
        };

#請求的問題;
data = {
        "question":"",
        "userId":"sen506",
        "type":"0",
        };

#生成指定位數的隨機數;
def createRand(length):  
    rndStr = ""
    for i in range(0, length):
        rndStr += random.choice(string);
    return rndStr;

#生成X-Auth請求頭;
def createXAuth(appKey, secretKey):
    nonce = createRand(40);

    sha1 = hashlib.sha1();
    sha1.update("{0}:{1}:{2}".format(appKey, realm, secretKey).encode("utf-8"))
    ha1 = sha1.hexdigest();

    sha2 = hashlib.sha1();
    sha2.update("{0}:{1}".format(menthod, uri).encode("utf-8"));
    ha2 = sha2.hexdigest();

    sha3 = hashlib.sha1();
    signature = sha3.update("{0}:{1}:{2}".format(ha1, nonce, ha2).encode("utf-8"));
    signature = sha3.hexdigest();

    return "app_key=\"{0}\",nonce=\"{1}\",signature=\"{2}\"".format(appKey, nonce, signature);


class xiaoi:
    def __init__(self, appKey = "", secretKey = ""):
        self.setAppKey(appKey);
        self.setSecretKey(secretKey);
        self._request = urllib.request.Request("http://nlp.xiaoi.com/robot/ask.do", headers);

    def ask(self, qs):
        self._request.headers["X-Auth"] = createXAuth(self._appKey, self._secretKey);

        data["question"] = qs;
        try:
            return urllib.request.urlopen(self._request, urlencode(data).encode("utf-8")).read().decode("utf-8");
        except:
            return "Error";

    def setAppKey(self, appKey):
        self._appKey = appKey;

    def setSecretKey(self, secretKey):
        self._secretKey = secretKey;

def main():
    robot = xiaoi("", "");
    for i in range(1, 100):
        print("問:", end = "");
        question = input();
        print("答:" + robot.ask(question));


if __name__ == "__main__":
    main();

main函數中的xiaoi("", "")引號裏面需要傳入2個參數,一個是appKey,另一個是secretKey,,這2個註冊一個帳號就有了。。地址 小i智能雲平臺



效果圖。。


個人感覺小i機器人有點弱。。。。。。。


小黃雞的。。。。(這個是網頁版的。。收費的api實在用不起。。。)(已失效)

# -*- coding: gbk -*-

import urllib;
import urllib.request;
import json;
from urllib.parse import urlencode;

# 請求頭
simsimiHeaders = {
                    "Connection":"keep-alive",
                    "Content-Type":"application/json; charset=utf-8",
                    "Host":"www.simsimi.com",
                    "Referer":"",
                    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
                    "X-Requested-With":"XMLHttpRequest",
                  };

# 調教內容
data = {
        "req":"",
        "resp":"",
        "lc":"ch"
        };

class simsimiWeb:
    def __init__(self):
        self.setOpener();

    def ask(self, qs):
        if(not qs.startswith("teach") and not qs.endswith("teach")):
            return self._ask(qs);
        else:
            return self._teach(qs);

    def _ask(self, qs):
        self._setType("ask");
        request = urllib.request.Request("http://www.simsimi.com/func/req?{0}&lc=ch&ft=0.0".format(urlencode({"msg":qs})), headers = simsimiHeaders);
        result = json.loads(urllib.request.urlopen(request).read().decode("utf-8"));
        if(result["result"] == 100):
            return result["response"];
        elif(result["result"] == 404):
            return """
            這是SimSimi不懂的話! 你可以教我哦.
            example:
                teach|問題|回答|teach
            """;
        else:
            print(result);
            return "Error";

    def _teach(self, word):
        string, qs, asw, string = word.split("|");
        if(string == "" or qs == "" or asw == ""):
            return "格式錯誤,或者問題、回答爲空!";
        self._setType("teach");
        request = urllib.request.Request("http://www.simsimi.com/func/teach", headers = simsimiHeaders);
        data["req"] = qs;
        data["resp"] = asw;
        result = json.loads(urllib.request.urlopen(request, json.dumps(data).encode("utf-8")).read().decode("utf-8"));
        if(result["result"] == 200):
            return result["msg"];
        else:
            print(result);
            return "教的過程中出現錯誤。。。";        

    def _setType(self, type):
        if(type == "ask"):
            simsimiHeaders["Referer"] = "http://www.simsimi.com/talk.htm";
        elif(type == "teach"):
            simsimiHeaders["Referer"] = "http://www.simsimi.com/teach.htm";

    def setOpener(self):
        opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor());
        urllib.request.install_opener(opener);

def main():
    simsimiRobot = simsimiWeb();
    for i in range(0, 1000):
        print("問:", end = "");
        question = input();
        print("答:" + simsimiRobot.ask(question));

if(__name__ == "__main__"):
    main();

效果圖。。(帶調教功能。。)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章