pythonqq消息
Ⅰ [python練手]使用WordCloud模塊將qq聊天記錄生成炫酷的關鍵詞雲
這個項目的github地址。 https://github.com/susususuhanmo/QQChatLogWordCloud
最近准備開始學習python,寫一個綜合一點的小demo練練手~
讀取文件
編寫清洗函數,清洗聊天數據。主要是需要清洗掉一些無用的關鍵詞:
分詞,分詞結果如果出現一些特有的詞語截了一半或者截多了幾個字元的情況,可以手動添加分詞詞庫。
根據關鍵詞數據,建立pandas的DataFrame,通過停詞詞庫過濾掉一些中文中不適合做關鍵詞的詞語,進行關鍵詞數統計並根據次數排序。
詞雲屬性解釋
調整成120之後就好看很多,有很明顯的差別。
設置圖片為可愛的莫古力
根據這個莫古力的顏色分布,生成的詞雲如下,我這個不是特別好看,大家可以選擇輪廓明顯一點的圖片來生成。
相比默認的模式,
關於更詳細的詞雲配置可以看這篇文章,這個作者對wordcloud的配置講解的十分詳細。
https://blog.csdn.net/heyuexianzi/article/details/76851377
在你想導出的人或群處右鍵,點導出消息記錄,
然後選擇txt格式
Ⅱ 利用python + qqbot + 聚合數據api 實現qq智能聊天機器人
from qqbot import QQBotSlot as qqbotslot,RunBot
from random import randint
@qqbotslot
def onQQMessage(bot, contact, member, content):
#在這里過濾過來的輸入, content的內容是監聽qq上所有的輸入
# 當群里有人@你的時候 傳入過來的會被轉化為[@ME]
# 所以使用 @ME 來過濾其他人在群裡面at你
if '@ME' in content:
#四個參數的詳細
#bot : QQBot 對象,提供 List/SendTo/Stop/Restart 四個介面,詳見本文檔第五節
#contact : QContact 對象,消息的發送者,具有 ctype/qq/uin/nick/mark/card/name 屬性,這些屬性都是 str 對象
#member : QContact 對象,僅當本消息為 群或討論組 消息時有效,代表實際發消息的成員
#content : str 對象,消息內容
bot.SendTo(contact,'@'+ member.name+ " 哈哈 ")
#這里是因為部分群裡面的at無法轉化為[@ME]所以自己過濾at自己的內容
elif '@' in content and '光' in content:
bot.SendTo(contact,'@'+ member.name+ " 哈哈 ")
RunBot()```
Ⅲ 如何用python登陸qq讀取信息
一次偶然的機會我看見了一個群里的一個QQ號總是根據你所發的消息自動回復,當時很感覺到神奇,我知道可以模擬登錄網站,沒想到竟然也能模擬登錄QQ,首先自己想到的就是如何實現模擬登錄PC端的QQ, 開始研究了下,發現QQ所發送的包都很難理解。
於是就轉到了網頁版的QQ,因為在網頁里可以捕獲所有的請求從而更好的實現模擬功能!
首先第一步就是打開網頁版的qq,打開瀏覽器的開發者模式 這里可以監控所有的請求!
打開登錄界面的的時候
會捕捉到一個GET請求
其中uin是你的QQ號
返回值是 ptui_checkVC('1','','x00x00x00x00x00xa1x92x12');
其中1表示需要驗證碼 還有一種返回值 ptui_checkVC('0','!LJV','x00x00x00x00x00xa1x92x12') 這種表示是不需要的驗證碼的
[python]view plain
defCheckVerify(self,uin):
check="h"
check=check.replace('{uin}',uin)
pattern=re.compile("ptui_checkVC′(.∗)′,′(.∗)′,′(.∗)′;")
result=self.Get(check)
checked=pattern.search(result).groups()
print'Step1:CheckVerify'
returnchecked
- [python]view plain
defGetVerify(self):
#url='hage?&uin='+str(self.QQ)+'&aid=1002101&0.45644426648505'+str(random.randint(10,99))
verify="htqq.com/getimage?aid=1003903&r=0.6472875226754695&uin={QQ}&cap_cd=aSD-ZVcNEcozlZUurhNYhp-MBHf4hjbJ"
verify=verify.replace('{QQ}',self.QQ)
path=r"c:/verify/1.jpg"
#data=urllib.urlretrieve(url,path)
data=urllib2.urlopen(verify)
localPic=open(r"c:/verify/1.jpg",'wb')
localPic.write(data.read())
localPic.close()
data.close()
- [python]view plain
defPasswordSecret(self,password,v1,v2,md5=True):
ifmd5==True:
password=self.PCMd5(password).upper()
length=len(password)
temp=''
foriinrange(0,length,2):
temp+=r'x'+password[i:i+2]
returnself.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()
#md5加密函數
defPCMd5(self,s):
h=hashlib.md5()
h.update(s)
returnh.hexdigest()
#16進制轉字元
defhex2asc(self,s):
_str="".join(s.split(r'x'))
length=len(_str)
data=''
foriinrange(0,length,2):
data+=chr(int(_str[i:i+2],16))
returndata
- [python]view plain
defLogin(self,uin,pwd):
#獲取參數
cheked=self.CheckVerify(uin)
#加密密碼
#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
#pwd=self.PasswordSecret(pwd,r'AAST',r'x00x00x00x00x00xa1x92x12')
loginurl="h&t=1&g=1&js_type=0&js_ver=10080&login_sig=YPD0P*&pt_uistyle=5"
loginurl=loginurl.replace('{uin}',uin)
#loginurl=loginurl.replace('{pwd}',pwd)
#loginurl=loginurl.replace('{verify}',cheked[1])
#result=Get(loginurl)
if(cheked[0]=="1"):
#下載驗證碼
self.GetVerify()
image=Image.open(r"c:/verify/1.jpg")
image.show()
code=raw_input("verifycode:").strip()
loginurl=loginurl.replace('{verify}',code.upper())
pwd=self.PasswordSecret(pwd,r''+code.upper(),cheked[2])
#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
else:
loginurl=loginurl.replace('{verify}',cheked[1])
pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])
loginurl=loginurl.replace('{pwd}',pwd)
result=self.Get(loginurl,'ssl.ptlogin2.qq.com','hin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_urlm%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20140514001',None)
print'Step2:Login'
pattern=re.compile("ptuiCB′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,s′(.∗)′;")
ret=pattern.search(result).groups()
#獲取必要的cookie否則第二次登陸會出錯
self.Get(ret[2])
print'Step3:GetCookie'
forcinself.cj:
ifc.name=="ptwebqq":
self.ptwebqq=c.value
returnresult
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:244
Content-Type:application/x-www-form-urlencoded
Cookie:o_cookie=455910092; RK=fMEaWEZ0Qc; ts_last=web2.qq.com/; ts_refer=www..com/; ts_uid=4588821804; pgv_pvid=914251705; pgv_info=ssid=s3525422600&pgvReferrer=; verifysession=h02LeYrtarkWBZeSu_czkiczeNSNlDm7V1mCm-**; ptui_loginuin=10588690; ptisp=cnc; ptcz=; ptwebqq=; pt2gguin=o0010588690; uin=o0010588690; skey=@gmEO6N2JD; p_uin=o0010588690; p_skey=cZ5*kS-_; pt4_token=1SyuJ39Eq6oKEwEhGIizeg__
Host:d.web2.qq.com
Origin:h
Referer:htttml?v=20110331002&callback=1&id=2
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Form Dataview sourceview URL encoded
r:{"status":"online","ptwebqq":"","passwd_sig":"","clientid":"7963288","psessionid":null}
clientid:7963288
psessionid:null
- [python]view plain
defLogin2(self):
try:
url="htel/login2"
postdata="r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{$ptwebqq}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3Anull%7D&clientid={$clientid}&psessionid=null"
postdata=postdata.replace("{$ptwebqq}",self.ptwebqq)
postdata=postdata.replace("{$clientid}",str(self.clientid))
print'Step4:Login2'
result=self.Post(url,postdata,QQRobot.HOST[0],QQRobot.REFERER[0],QQRobot.ORIGIN[0])
retjson=json.loads(result)
retjson=retjson["result"]
returnretjson
exceptException,e:
print"Login2error"+str(e)
- [python]view plain
#獲取群列表信息
defGetGroupNameList(self,vfwebqq):
try:
url="h/get_group_name_list_mask2"
postdata="r=%7B%22vfwebqq%22%3A%22{$vfwebqq}%22%7D"
postdata=postdata.replace("{$vfwebqq}",vfwebqq)
ret=self.Post(url,postdata,QQRobot.HOST[1],QQRobot.REFERER[1],QQRobot.ORIGIN[1])
print'Step5:GetGroupList'
retjson=json.loads(ret)
retjson=retjson["result"]
self.grouplist=retjson
forgroupinself.grouplist['gnamelist']:
printgroup["code"],group["name"]
exceptException,e:
獲取驗證碼的方法
輸入用戶名和密碼 還有驗證碼後發送一個GET請求
這裡面u代表賬號 p代表密碼 密碼是經過一定演算法加密的 verify是驗證碼
加密演算法如下
然後是登錄部分代碼
登錄成功後伺服器會返回一串json數據
ptuiCB('0','0','ebqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0®master=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0','0','登錄成功!', '小竹');
第一個為0 就表示登錄成功了 ,但是這並沒有真正的登錄成功
上面的返回值中的url是用來獲取一個關鍵cookie的 那就是ptwebqq
然後進行第二次登錄,這次才是真正的登錄
請求如下
其中的ptwebqq就是剛才我們從cookie中獲取的
這部分代碼是
第二次登陸成功後會返回一個
'''{"retcode":0,
"result":{
"uin":10588690,
"cip":1707901841,
"index":1075,
"port":59571,
"status":"online",
"vfwebqq":"85c31018d2",
"psessionid":"85c31018d2",
"user_state":0,
"f":0
}
}'''
這樣的數據結構 其中0表示登陸成功
需要把這寫數據保存下來 後面進行操作需要
登陸成功後我們就可以拉去群列表了
Ⅳ Python如何實現定時發送qq消息
因為生活中老是忘記各種事情,剛好又在學python,便突發奇想通過python實現提醒任務的功能(盡管TIM有定時功能),也可定時給好友、群、討論組發送qq消息。其工作流程是:訪問資料庫提取最近計劃——>根據數據內容(提醒時間、提醒對象、提醒內容)設置定時任務——>給特定qq好友發送消息。
1.軟體版本:
2.安裝依賴環境
pymysql安裝:pip install pymysql
qqbot安裝:pip install qqbot
3.資料庫操作
資料庫操作非常簡單,跟Java類似,自己去菜鳥教程看一下基礎語法就好了。
4.配置qqbot登陸信息
也可以不配置,不配置的話就是每次掃碼登陸,但這在linux系統下不好用,我按說明將配置改成了每次將登陸二維碼發到固定qq郵箱。qqbot模塊在GitHub上,大家可以去看一下模塊說明:qqbot
配置文件默認在用戶目錄下的.qqbot-tmp/v2.3.conf,linux下類似
相關推薦:《Python視頻教程》
5. 自定義功能
6.入口主程序
7.其它
資料庫結構:
dropdatabaseif exists info_db;
createdatabaseinfo_db defaultcharactersetutf8;
use info_db;
createtabletyschele_tb(
id int(11) auto_increment primarykey,
worktime timestampnotnull,
namevarchar(10) notnull,
content varchar(100) notnull
)engine=InnoDB auto_increment=1 defaultcharset=utf8;
以上就是循環發送qq消息的代碼,以下是項目目錄結構,其中一些沒有出現的文件是自己測試所用,可以不用關心:
效果圖:
Ⅳ Python模擬發送QQ圖片變黑色
因為圖片的通透度設置錯誤。
mask在A上的中央是255全通透,他破壞了我們的150不通透,得到了全黑的顯示。這里的通透應該與原圖A通道相同,否則會破壞A通道通透度。
python在生活中可以實現提醒任務的功能,也可定時給好友、群、討論組發送qq消息。
Ⅵ python qq撤回消息怎麼撤回
首先你的QQ版本支持撤回,然後點住發出去的消息大約兩秒,然後就彈出來選擇項,裡面有撤回
Ⅶ python 在qq消息中下載文件
主要使用selenium+chrome,加了Tkinter的簡單GUI,代碼比較簡單,就不細說了,請自行品味:
獲取qq好友列表
這個是從QQ充值獲取的,可得"原始數據",「分組」,「顯示名」,「QQ號」:
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import tkinter as tk
from tkinter.filedialog import asksaveasfilename
from bs4 import BeautifulSoup
import lxml
import openpyxl
from openpyxl import Workbook
def callback():
driver.switch_to_frame('webpay-iframe')
iframe =driver.find_element_by_xpath('//*[@id="midas-webpay-main-1450000186"]/div[2]/div[1]/iframe')
driver.switch_to_frame(iframe)
html=driver.page_source
soup=BeautifulSoup(html,"lxml")
a=soup.find_all(attrs={'class':'icon-friend-s'})
wb = Workbook()
ws = wb.active
ws.append(["原始數據","分組","顯示名","QQ號"])
for i in a:
if i.next_sibling !=' {undefined{el.name}}({undefined{el.qq}})':
#re,qq匹配:
#pattern = re.compile(r'[1-9][0-9]{4,}')
#re,括弧匹配:
#pattern = re.compile(r'(?<=).∗?(?=).∗?(?=)')
#m = pattern.search(i.next_sibling)
k=0
for x in i.next_sibling:
if x == '(':
f=k
if x == ')':
l=k
k=k+1
ws.append([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])
print([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])
wb.save(asksaveasfilename(defaultextension ='.xlsx',filetypes = [('Excel 工作簿', '*.xlsx')]))