• 使用Python实现微信群发每日一句


    我在自己教学的四个班里建了三个微信群,每个群大约有50-90人。我计划每天给学生双送双语每日一句,既让学生坚持学习英语,也传递给他们正能量,在后疫情时代保持积极向上、奋发有为的状态。然而,从拷贝金山词霸或者海词的每日一句,再到打开微信,找到三个群,把信息逐一复制进去,过程相当的费时费力。于时,我就想借助于强大的Python实现每日一句的在线抓取,在微信中找到发送的对象,然后逐个发送。

    一、编程原理介绍

    功能:微信群发金山或者海词上的每日一句到指定微信群或者个人

    1. tkinter 来设计程序界面
    2. 用requests和BeautifulSoup来获取金山词霸和海词的每日一句
    3. 用控制微信的专属包:wxauto 来操作群发

    二、软件界面说明

    每日一句群发软件

    1. 把发送对象的名称存在当前目录下的names.txt中,每行一个,前后不要有空格,这个对象名可能是群的自定义名称。
    2. 设置金山词霸和海词的复选框,选中一个后,点击获取句子,可以得到每日一句。如果二者都选中,就会得到两个平台的每日一句,显示在文本框中。
    3. 点击发送,可以把文本框里的内容批量发送到names.txt中的对象中。

    需要注意时,运行程序时,微信需要打开,并最小化,不然可能无法自动打开界面。

    三、实现代码

    1. from tkinter import Entry,Button,END,Label,Text,Checkbutton,Tk,StringVar,IntVar
    2. from tkinter import messagebox
    3. from wxauto import WxUtils,WeChat
    4. from tkinter.filedialog import askopenfilename
    5. import requests
    6. from bs4 import BeautifulSoup
    7. root = Tk()
    8. # 设置窗口前段显示
    9. root.wm_attributes('-topmost',1)
    10. #设置居中显示
    11. screenwidth = root.winfo_screenwidth()
    12. screenheight = root.winfo_screenheight()
    13. width = 730
    14. height = 420
    15. #size = "%dx%d+%d+%d" % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
    16. size = "%dx%d+%d+%d" % (width, height, 350, 230)
    17. root.geometry(size)
    18. # 设置窗口标题及大小
    19. root.title('每日一句发送器1.0|By Gordon')
    20. #设置接受UI界面中Label和它的位置
    21. var = StringVar()
    22. var.set('Tip:请先选择要发送的微信对象')
    23. url_input=Label(root,textvariable=var,width=32,height=1,font=("微软雅黑",12))
    24. url_input.grid(row=0,column=0,columnspan=5)
    25. # 设置搜索框
    26. t_url = Entry(root,width=50,font=("微软雅黑",12))
    27. t_url.insert(0,"请把发送对象微信名称输入到names.txt, 然后点击打开文件..")
    28. t_url.grid(row=1,column=0,columnspan=4,padx=5)
    29. t_read = Text(root,width=50,height=10,font=("微软雅黑",12))
    30. t_read.grid(row=3,column=0,columnspan=4,padx=5)
    31. checkVar1 = IntVar()
    32. checkVar2 = IntVar()
    33. c1 = Checkbutton(root, text = "金山词霸", font=("微软雅黑",11), variable = checkVar1, onvalue = 1, offvalue = 0, height=1,width = 8)
    34. c1.grid(row=2,column=0)
    35. c2 = Checkbutton(root, text = "海词", font=("微软雅黑",11), variable = checkVar2, onvalue = 1, offvalue = 0, height=1,width = 8)
    36. c2.grid(row=2,column=1)
    37. def main():
    38. def get_txt(filepath): #获取发送对象
    39. ls=[]
    40. try:
    41. with open(filepath,"r",encoding="utf-8") as f:
    42. ls=[line.strip() for line in f.readlines() if line.strip()!=""]
    43. except Exception as exc:
    44. messagebox.showwarning('Warning', f'{exc}')
    45. t_url.delete(0,END)
    46. return ls
    47. def b1_prog(event=None): #打开names.txt文件,并显示在Text文本框中
    48. t_url.delete(0,END)
    49. t_read.delete("1.0", "end")
    50. file_path=askopenfilename(title='选择文件',filetypes=[('TXT文件','*.txt')])
    51. text_list=get_txt(file_path)
    52. t_url.insert("insert",file_path)
    53. for i in text_list:
    54. t_read.insert("insert",i+"\n")
    55. var.set("以下是您要发送的对象,请核对信息!")
    56. return file_path
    57. b1 = Button(root,text="选择对象",width=8,height=1,font=("微软雅黑",12),command=b1_prog)
    58. b1.grid(row=1,column=4)
    59. def jinshan():#获取金山词霸每日一句
    60. url = 'http://open.iciba.com/dsapi/'
    61. res = requests.get(url)
    62. content = res.json()['content'] + res.json()['note']
    63. return content
    64. def haici():#获取海词每日一句
    65. url2=r"http://dict.cn"
    66. resp = requests.get(url2)
    67. soup = BeautifulSoup(resp.text,"html.parser")
    68. htm=soup.find("div",class_="daily_sentence")
    69. sen=htm.text.strip().split("\t\t\t")[2] #split("\n\t")[2].strip()
    70. return sen
    71. def get_sentence():# 获取每日一句信息
    72. msg="每日一句:"
    73. if checkVar1.get() ==1 and checkVar2.get() ==1:
    74. t_read.delete("1.0", "end")
    75. msg=msg+jinshan()+"\n"+haici()
    76. elif checkVar1.get() ==1 and checkVar2.get() ==0:
    77. t_read.delete("1.0", "end")
    78. msg=msg+jinshan()
    79. elif checkVar1.get() ==0 and checkVar2.get() ==1:
    80. t_read.delete("1.0", "end")
    81. msg=msg+haici()
    82. else:
    83. messagebox.showwarning("错误信息","请选中金山词霸或者海词")
    84. return msg
    85. def b2_prog():# 显示每日一句信息,校对并准备发送。
    86. msgs=get_sentence()
    87. for m in msgs:
    88. t_read.insert('insert',m)
    89. var.set("以下是您要发送的每日一句,请核对信息!")
    90. b2 = Button(root,text="获取句子",width=8,height=1,font=("微软雅黑",12),command=b2_prog)
    91. b2.grid(row=2,column=4)
    92. def wechat(who,msg):#查询发送对象
    93. wx = WeChat()
    94. # 获取会话列表
    95. wx.GetSessionList()
    96. for w in who:
    97. wx.ChatWith(w) # 打开`文件传输助手`聊天窗口
    98. wx.SendMsg(msg) # 向`文件传输助手`发送消息:你好~
    99. def send_txt(): # 发送信息
    100. filepath=t_url.get()
    101. if not filepath.endswith(".txt"):
    102. messagebox.showwarning("错误信息","请先打开文件!")
    103. else:
    104. who=get_txt(filepath)
    105. msgs=get_sentence()
    106. t_read.delete("1.0", "end")
    107. wechat(who,msgs)
    108. messagebox.showwarning("成功信息","您的信息已经发送成功!")
    109. b3 = Button(root,text="开始发送",width=8,height=1,font=("微软雅黑",12),command=send_txt)
    110. b3.grid(row=3,column=4,pady=20)
    111. root.mainloop()
    112. main()

    四、演示视频

    Python操作微信实现信息群发

    Python实现英语每日一句微信群发

    五、未来努力方向

    未来实现文本信息、文件、视频、音频等多个文件的批量微信群发功能,进一步优化流量,提升工作效率。

    大家如果有什么好的建议也欢迎提出来。

    关注我,一个喜欢Python编程和英语翻译的文科生,带给你不一样的学习体验。

     

  • 相关阅读:
    Offer 经验分享 - 蚂蚁金服、字节跳动、PDD,蚂蚁金服面试 Java 后端经历
    Python 在windows环境下加密文件成.pyd格式
    基于开源ERDDAP的海洋学科数据分发技术简介
    vue点击按钮收缩菜单
    【爬虫笔记】Python爬虫简单运用爬取代理IP
    【机器学习】欠拟合及过拟合与学习曲线、误差来源
    在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件
    String类_Java(一)
    Java Math.toRadians()具有什么功能呢?
    修复版知宇发卡企业级发卡平台完整源码/多商户入驻+对接微信公众号+对接免签支付
  • 原文地址:https://blog.csdn.net/henanlion/article/details/122462740