在服務器上配置運行(每天一則段子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小時按指定的時間間隔給收信人列表發段子啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM