教你使用python搭建一個(gè)QQ機(jī)器人實(shí)現(xiàn)叫起床服務(wù)
前言
上一篇文章介紹了怎么配置機(jī)器人框架,并且實(shí)現(xiàn)了一些簡(jiǎn)單的功能。
(發(fā)送私聊或者群聊信息、接收上報(bào)的事件、簡(jiǎn)單的自動(dòng)回復(fù)等等)
這次為了讓QQ機(jī)器人更加智能,調(diào)用了一些實(shí)用的接口。
通過(guò)自己搭建的機(jī)器人實(shí)現(xiàn)定時(shí)叫女朋友起床、和女朋友聊天等功能。
如上圖所示,我的機(jī)器人每天都會(huì)準(zhǔn)時(shí)叫女朋友起床;并且在我忙的時(shí)候然而女朋友無(wú)聊的時(shí)候可以陪她聊一會(huì)天。
具體實(shí)現(xiàn)
以下實(shí)現(xiàn)的功能都需要機(jī)器人已經(jīng)配置完成,并且已經(jīng)寫(xiě)好了我上一篇文章的一些函數(shù)。
上一篇文章地址—>>>QQ機(jī)器人制作教程,超詳細(xì)!
1、定時(shí)發(fā)送信息
要實(shí)現(xiàn)這個(gè)功能是不難的,只需要引入時(shí)間這個(gè)變量就可以了,具體代碼如下(QQ號(hào)、里面的時(shí)間和msg自己改):
import datetime import time while True: qq=女朋友qq號(hào) now = datetime.datetime.now() if(now.hour==0 and now.minute==0): send_msg({'msg_type': 'private', 'number': qq, 'msg': '晚安!'}) send_msg({'msg_type': 'private', 'number': qq, 'msg':'[CQ:poke,qq={}]'.format(qq)}) time.sleep(60) continue if (now.hour == 9 and now.minute == 30): send_msg({'msg_type': 'private', 'number': qq, 'msg': '起床了'}) send_msg({'msg_type': 'private', 'number': qq, 'msg': '[CQ:poke,qq={}]'.format(qq)}) time.sleep(60) continue else: continue
上述代碼實(shí)現(xiàn)的是:每天零點(diǎn)給女朋友發(fā)晚安并戳她一下;每天早上九點(diǎn)半發(fā)起床了并戳她一下。
這些你自己可以改進(jìn),可以發(fā)表情包,甚至可以把代碼里的'time.sleep(60)'刪除,
那樣就會(huì)在一分鐘之內(nèi)連續(xù)發(fā)信息轟炸她,強(qiáng)烈建議使用!
2、讓機(jī)器人陪女朋友聊天
要實(shí)現(xiàn)這個(gè)功能需要借助API接口了,目前我找到的實(shí)用智能回復(fù)API接口地址:http://api.qingyunke.com/
這個(gè)接口不僅僅可以聊天,還有一些實(shí)用的功能,如下圖所示:
要實(shí)現(xiàn)以上功能都需要獲取女朋友給你發(fā)的信息,這個(gè)在上一篇文章已經(jīng)寫(xiě)了,
獲取到后直接調(diào)用接口返回結(jié)果,再發(fā)送給她即可。
下面直接上代碼:
from receive import rev_msg import requests import json import urllib.request from urllib.parse import quote import string while True: try: rev = rev_msg() print(rev) if rev == None: continue except: continue if rev["post_type"] == "message": if rev["message_type"] == "private": #私聊 message=rev['raw_message'] if 'face' in message: qq = rev['sender']['user_id'] img = rev['raw_message'] send_msg({'msg_type': 'private', 'number': qq, 'msg': img}) elif 'image' in message: qq = rev['sender']['user_id'] img=rev['raw_message'] send_msg({'msg_type': 'private', 'number': qq, 'msg': img}) elif '戳一戳' in message: qq = rev['sender']['user_id'] send_msg({'msg_type': 'private', 'number': qq, 'msg': '別戳了'}) else: url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg=' + message s = quote(url, safe=string.printable) try: with urllib.request.urlopen(s) as response: html = response.read() # 將獲取到的響應(yīng)內(nèi)容進(jìn)行解碼,并將json字符串內(nèi)容轉(zhuǎn)換為python字典格式 # 通過(guò)下標(biāo)取到機(jī)器人回復(fù)的內(nèi)容 qq = rev['sender']['user_id'] # print(eval(html.decode("utf-8"))["content"]) send_msg({'msg_type': 'private', 'number': qq, 'msg': eval(html.decode("utf-8"))["content"].replace('{br}', '\n')}) # print(eval(html.decode("utf-8"))["content"]) except: qq = rev['sender']['user_id'] send_msg({'msg_type': 'private', 'number': qq, 'msg': '重新連接中。。。'}) else: # rev["post_type"]=="meta_event": continue
上述代碼中,先判斷"post_type
"的類(lèi)型,如果為message表明有人給機(jī)器人發(fā)消息了;
再看"message_type
",如果為private
表明這是私聊信息,當(dāng)然如果為group
表明這是群聊信息;
然后我們獲取信息message=rev[‘raw_message']
,拿到這個(gè)信息之后就可以設(shè)置關(guān)鍵詞進(jìn)行自己回復(fù)了。
我在代碼中設(shè)置的'face' in message
和'image' in message
是為了獲取表情和圖片,
對(duì)方發(fā)送什么就返回什么,因?yàn)槟莻€(gè)智能回復(fù)接口識(shí)別不了表情和圖片。
3、調(diào)用一些有趣的接口
在聚合數(shù)據(jù)找了一些好玩的接口,有很多都是免費(fèi)的。
本文以星座運(yùn)勢(shì)為例子教大家怎么實(shí)現(xiàn)。
申請(qǐng)使用一個(gè)api會(huì)給你請(qǐng)求key,需要先實(shí)名認(rèn)證。
申請(qǐng)一個(gè)接口后點(diǎn)擊測(cè)試,輸入兩個(gè)請(qǐng)求參數(shù)即可返回結(jié)果。
python代碼如下(需要使用自己的api請(qǐng)求key):
def horoscope(constellation): # 請(qǐng)求地址 url = "http://web.juhe.cn/constellation/getAll?" + 'consName={}&type=today&key=自己的請(qǐng)求key'.format(constellation) # 發(fā)送get請(qǐng)求 r = requests.get(url) # 獲取返回的json數(shù)據(jù) result = r.json()['summary'] print(result) return result horoscope('摩羯座')
再把它整合到機(jī)器人程序里面:
if '星座運(yùn)勢(shì)' in message: try: constellation = message.split(' ')[1] text = horoscope(constellation) qq = rev['sender']['user_id'] send_msg({'msg_type': 'private', 'number': qq, 'msg': text}) except: qq = rev['sender']['user_id'] send_msg({'msg_type': 'private', 'number': qq, 'msg': '請(qǐng)?jiān)谛亲懊婕由峡崭瘛?})
健康填報(bào)小助手開(kāi)發(fā)中。。。
前幾天一個(gè)輔導(dǎo)員朋友看了我的文章問(wèn)我能不能制作一個(gè)qq機(jī)器人,關(guān)于健康填報(bào)小助手的。
他每天都要提醒學(xué)生健康填報(bào),而且每次查看誰(shuí)沒(méi)填報(bào)的時(shí)候都需要登錄網(wǎng)站統(tǒng)計(jì)數(shù)據(jù)才能獲得,
這就難免會(huì)忘記或者說(shuō)每天做這些事情太煩人了,于是想讓我給他開(kāi)發(fā)一個(gè)QQ機(jī)器人。
簡(jiǎn)單交流了一下,了解了這個(gè)QQ機(jī)器人需要有的功能:
- 1、每天定時(shí)發(fā)送所有未進(jìn)行健康報(bào)送的學(xué)生姓名
- 2、輔導(dǎo)員戳一戳QQ機(jī)器人或者艾特它也會(huì)發(fā)送所有未進(jìn)行健康報(bào)送的學(xué)生姓名
- 3、設(shè)定一個(gè)特定的時(shí)間t,如果在t時(shí)間之后還未進(jìn)行報(bào)送的將會(huì)被QQ機(jī)器人私聊
以上就是教你使用python搭建一個(gè)QQ機(jī)器人實(shí)現(xiàn)叫起床服務(wù)的詳細(xì)內(nèi)容,更多關(guān)于python搭建QQ機(jī)器人的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python圖形用戶(hù)界面tkinter之標(biāo)簽Label的使用說(shuō)明
這篇文章主要介紹了python圖形用戶(hù)界面tkinter之標(biāo)簽Label的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Python實(shí)戰(zhàn)之天氣預(yù)報(bào)系統(tǒng)的實(shí)現(xiàn)
本文主要和大家介紹了如何用代碼寫(xiě)一款Python版天氣預(yù)報(bào)系統(tǒng),是Tkinter界面化的,還會(huì)制作溫度折線圖跟氣溫餅圖哦!感興趣的小伙伴可以嘗試一下2022-12-12python中用Scrapy實(shí)現(xiàn)定時(shí)爬蟲(chóng)的實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于python中用Scrapy實(shí)現(xiàn)定時(shí)爬蟲(chóng)的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01Django使用Mysql數(shù)據(jù)庫(kù)已經(jīng)存在的數(shù)據(jù)表方法
今天小編就為大家分享一篇Django使用Mysql數(shù)據(jù)庫(kù)已經(jīng)存在的數(shù)據(jù)表方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python對(duì)象及面向?qū)ο蠹夹g(shù)詳解
這篇文章主要介紹了python對(duì)象及面向?qū)ο蠹夹g(shù),結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο笏婕暗念?lèi)、對(duì)象、方法、屬性等概念與使用技巧,需要的朋友可以參考下2016-07-077個(gè)關(guān)于Python的經(jīng)典基礎(chǔ)案例
這篇文章主要給大家分享 7個(gè)關(guān)于Python的經(jīng)典基礎(chǔ)案例,列表排序、調(diào)換字典鍵值、刪除列表中的重復(fù)元素、輸出質(zhì)數(shù)、判斷是一年中第幾天、猜數(shù)字、進(jìn)制轉(zhuǎn)換;,需要的朋友可以參考一下2021-11-11