在服务器上配置运行(每天一则段子python程序)
之前的文章里有一个用python—SMTP发信的程序,利用爬虫随机爬下段子网站的一则段子然后发送给指定收件人。
在本地计算机上运行这个程序只有及时性的功能(一直挂着也不太现实),所以现在将它放置在服务器端上。
需要将源程序稍微修改加上定时语句,如下列的每小时一则黄段子,拓展收件人列表。
#coding:UTF-8
import sys
import re
import urllib
import smtplib
import random
from email.mime.text import MIMEText
#放置服务器上设置时间
import datetime
import time
to=['1@qq.com','2@qq.com','3@qq.com',4@qq.com','5@qq.com']
host="smtp.163.com" #smtp服务器
user="******" #用户名
password="*" #密码
postfix="163.com" #后缀
def gethtml(url):
page=urllib.urlopen(url)
html=page.read()
return html
def getmessage(html):
p=re.compile(r'<div class="content">(.*)</div><script type="text/javascript">')
#对段子内容进行正则匹配
message=re.findall(p,html)#返回正则匹配的结果
return message
def send_mail(to_list,sub,content):
me="Jokes Sending!"+"<"+user+"@"+postfix+">"
msg = MIMEText(content,_subtype='plain',_charset='utf-8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(host)
server.login(user,password)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
def task():
i=random.randint(1,500)
i=str(i)
web=gethtml('http://ishuo.cn/subject/'+i)
#该网站段子的链接特点
message=getmessage(web)
message2=''.join(message)#将结果转换为字符串类型
#message2=message2.decode('utf8')
message2=str(message2)
print message2
for m in range(0,5):#对收信人列表中的每个发邮件
if send_mail(to[m],"Laugh !guys!",message2):
print "Suceed!"
else:
print "Failed!"
def timer(n):
while True:
task()
time.sleep(n)
if __name__ == '__main__':
while(1):
timer(60*60) #延时一小时
接下来将它到服务器端,这里我们利用pscp.exe进行上传
pscp C:\Python27\smtp\smtp.py root@*****:/home/
两个分别是本地路径和服务器路径,接下来输入password后就传输完成。
在服务器端,用SSH连接后,我们有多种定时执行此任务的方法
如crontab指令(本程序不用,因为代码里已经自带延迟了,若使用crontab使用上篇文章(未更改前)的代码即可)
crontab -e
编辑cron文件,设置执行间隔时间(自行设定)和执行命令,可利用crontab -l 查看是否添加成功。
后
sudo service cron start
ps: service start命令需要root权限才可以执行。
ps2:若无python环境需要搭建,上述程序为python2.7版本,或缺少运行的库自行在服务器上安装配置pip。
ps3:在关掉session后Linux服务器上的命令会终端,这时候就需要保持服务器上的命令执行,下面提供两个方法:
1.nohup指令,(忽略挂断信号),如 root#nohup python smtp.py & (&号表示为后台执行)
2.screen 需要install,输入screen,键入space跳过,回到命令行
执行命令如 python smtp.py
ctrl+a+d 将session与screen断开即可
完成后,该程序就能全天24小时按指定的时间间隔给收信人列表发段子啦。
浙公网安备 33010602011771号