Python可以通过调用第三方库实现自动发送微信文件的功能。具体实现的步骤主要分为以下几步:
- 安装itchat和requests库
itchat是一个扫码登录微信网页版,并提供基础接口的第三方库,它可以实现在Python中自动登录微信;requests是Python中用于发送http/https请求的第三方库,我们可以使用它来发送图片。
这两个库可以通过pip安装:
pip install itchat requests
- 登录微信并获取好友列表
使用itchat库,可通过以下代码登录微信:
import itchat
itchat.auto_login(hotReload=True)
调用auto_login函数时可以添加参数hotReload=True,表示是否开启登录状态的保持,即下次运行程序时是否可以直接使用上次登录的状态。
登录成功后,可以使用get_friends()函数获取自己的好友列表:
friends = itchat.get_friends()
该函数返回的是一个列表,每个元素为一个字典对象,包含好友的详细信息。
- 发送图片
使用requests库发送图片,需要先使用itchat获取好友的UserName,然后再使用requests发送http请求将图片发送给好友。
首先,需要通过好友的昵称或备注名获取好友的UserName:
friend_name = "Tom"
friend = itchat.search_friends(name=friend_name)[0]
to_user_name = friend["UserName"]
然后,需要使用requests库发送图片:
import requests
image_path = "test_img.jpg"
with open(image_path, "rb") as f:
files = {"file": f}
response = requests.post(
url=f"https://file.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json&pass_ticket={pass_ticket}",
files=files,
headers=headers
)
media_id = response.json().get("MediaId")
其中,image_path为图片路径,files参数为要上传的文件,response为http请求的响应,headers指定了请求头部分的信息。
- 发送消息
微信中发送图片需要分成两步:发送给微信服务器后,微信服务器会返回一个媒体ID,然后再将媒体ID作为参数发送给好友。因此,发送图片需要调用两次itchat库中的send()函数。
先调用send()函数发送一个临时语音消息,这样可以获取到发送消息所需的发送图片的url和参数信息:
msg = {
"FromUserName": my_user_name,
"ToUserName": to_user_name,
"MediaId": media_id,
"Type": "3"
}
result = itchat.send(msg, "filehelper")
发送成功后,会将服务器返回的url和参数信息保存在结果中,可以从结果中解析出来:
upload_url = result["Msg"].split("<br/>")[1].split("\"")[1]
upload_dict = result["Msg"].split("<br/>")[1].split("\"")[3]
然后再调用send()函数发送一个图片消息,将图片发送给好友:
msg = {
"FromUserName": my_user_name,
"ToUserName": to_user_name,
"LocalID": upload_dict,
"MediaId": media_id,
"Type": "3"
}
itchat.send(msg)
这样就完成了自动发送微信文件的过程。
完整示例代码如下:
import itchat
import requests
itchat.auto_login(hotReload=True)
my_user_name = itchat.get_friends()[0]["UserName"] # 获取自己的UserName
friend_name = "Tom"
friend = itchat.search_friends(name=friend_name)[0]
to_user_name = friend["UserName"]
image_path = "test_img.jpg"
with open(image_path, "rb") as f:
files = {"file": f}
response = requests.post(
url=f"https://file.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json&pass_ticket={pass_ticket}",
files=files,
headers=headers
)
media_id = response.json().get("MediaId")
# 发送图片
msg = {
"FromUserName": my_user_name,
"ToUserName": to_user_name,
"MediaId": media_id,
"Type": "3"
}
result = itchat.send(msg, "filehelper")
# 获取上传图片的url和参数信息
upload_url = result["Msg"].split("<br/>")[1].split("\"")[1]
upload_dict = result["Msg"].split("<br/>")[1].split("\"")[3]
# 发送图片给好友
msg = {
"FromUserName": my_user_name,
"ToUserName": to_user_name,
"LocalID": upload_dict,
"MediaId": media_id,
"Type": "3"
}
itchat.send(msg)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python能否自动发送微信文件 - Python技术站