Python实现WP博客文章更新提醒
1.导入
最近翻邮箱的时候,无意间看到了各种厂商发来的产品广告,突发奇想用Python做了一个Wordpress文章更新自动给所有用户发邮件的功能。
本篇文章部分内容涉及到数据库操作,请提前做好备份
2.制作
2.1.模块安装
这个功能需要以下模块:
import time
import pymysql
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import feedparser
可以在CMD内使用:
pip install time pymysql smtplib email feedparser
安装这些模块。
2.2.代码
2.2.1.从数据库获取用户列表方法
需要填入你Wordpress博客数据库的用户名,名称,还有用户名对应的密码
注意:如果这个Python脚本运行在本地,服务器ip就可以用127.0.0.1代替,如果运行在其他地方,需要填写服务器外网ip,并且数据库要改成对所有人开放
def sendmain(url):
db = pymysql.connect(host='你服务器的ip', user="数据库用户名", passwd="数据库密码", db='数据库名称', port=3306, charset='utf8')
cursor = db.cursor()
sql = """SELECT * FROM wp_users"""
cursor.execute(sql)
desc = cursor.description
data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
cursor.close()
db.close()
print(data_dict)
for i in range(len(data_dict)):
sendsmtpm(url,data_dict[i]['user_email'])
print('成功发送给:'+data_dict[i]['user_email'])
2.2.2.发送邮件方法
注:如果没有SMTP服务器可以用163邮箱代替,详见文末4.1
def sendsmtpm(url,to):
smtp = smtplib.SMTP()
smtp.connect("你的smtp服务器", port=25)
smtp.login(user="你的smtp用户名", password="smtp服务器用户名对应的密码")
message = MIMEText('xxxxx新文章更新了:'+url)# 发送的一段文字,url变量是更新的文章地址
message['From'] = Header("xxxxx",'utf-8') # 发件人的昵称
message['Subject'] = 'xxxxx有文章更新啦' # 定义主题内容
print(message)
smtp.sendmail(from_addr="smtp发送者邮箱,一般跟用户名相同", to_addrs=to, msg=str(message))
smtp.close()
2.2.3.获取rss并发送邮件
rss_oschina = feedparser.parse('你的RSS链接')
first=[rss_oschina['entries'][0]['links'][0]['href'],rss_oschina['entries'][1]['links'][0]['href'],rss_oschina['entries'][2]['links'][0]['href'],rss_oschina['entries'][3]['links'][0]['href'],rss_oschina['entries'][4]['links'][0]['href'],rss_oschina['entries'][5]['links'][0]['href']]
print('Start')
print(first)
while True:
rss_oschina = feedparser.parse('你的RSS链接')
send=True
for i in range(len(first)):
if first[i]==rss_oschina['entries'][0]['links'][0]['href']:
send=False
if send:
sendmain(rss_oschina['entries'][0]['links'][0]['href'])
print('stmpsend:'+rss_oschina['entries'][0]['links'][0]['href'])
first.append(rss_oschina['entries'][0]['links'][0]['href'])
time.sleep(5)
2.2.4.完整代码
import time
import pymysql
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import feedparser
def sendmain(url):
db = pymysql.connect(host='你服务器的ip', user="数据库用户名", passwd="数据库密码", db='数据库名称', port=3306, charset='utf8')
cursor = db.cursor()
sql = """SELECT * FROM wp_users"""
cursor.execute(sql)
desc = cursor.description
data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
cursor.close()
db.close()
print(data_dict)
for i in range(len(data_dict)):
sendsmtpm(url,data_dict[i]['user_email'])
print('成功发送给:'+data_dict[i]['user_email'])
def sendsmtpm(url,to):
smtp = smtplib.SMTP()
smtp.connect("你的smtp服务器", port=25)
smtp.login(user="你的smtp用户名", password="smtp服务器用户名对应的密码")
message = MIMEText('xxxxx新文章更新了:'+url)# 发送的一段文字,url变量是更新的文章地址
message['From'] = Header("xxxxx",'utf-8') # 发件人的昵称
message['Subject'] = 'xxxxx有文章更新啦' # 定义主题内容
print(message)
smtp.sendmail(from_addr="smtp发送者邮箱,一般跟用户名相同", to_addrs=to, msg=str(message))
smtp.close()
rss_oschina = feedparser.parse('你的RSS链接')
first=[rss_oschina['entries'][0]['links'][0]['href'],rss_oschina['entries'][1]['links'][0]['href'],rss_oschina['entries'][2]['links'][0]['href'],rss_oschina['entries'][3]['links'][0]['href'],rss_oschina['entries'][4]['links'][0]['href'],rss_oschina['entries'][5]['links'][0]['href']]
print('Start')
print(first)
while True:
rss_oschina = feedparser.parse('你的RSS链接')
send=True
for i in range(len(first)):
if first[i]==rss_oschina['entries'][0]['links'][0]['href']:
send=False
if send:
sendmain(rss_oschina['entries'][0]['links'][0]['href'])
print('stmpsend:'+rss_oschina['entries'][0]['links'][0]['href'])
first.append(rss_oschina['entries'][0]['links'][0]['href'])
time.sleep(5)
3.完成
可以将这些代码部署到你的服务器上,详见:将你的代码部署到服务器上
4.1.163邮箱启用SMTP
先注册并登录163邮箱,在后台顶栏找到“设置”菜单点击进入
选择 POP3/SMTP/IMAP
点击”开启“
按照步骤发送短信验证,就可以获取SMTP密码了
注:163邮箱的smtp服务器地址为:smtp.163.com
阅读剩余
THE END