懶人總是想方設法使自己更懶,特別是學計算機的孩紙。
問題來源很簡單,OJ評測程序有點問題,有時候不知到怎么回事就waiting了,一但waiting后面所有提交的代碼就都waiting了, OJ就不能正常評測了,這時候就需要去服務器端解決問題。怎么解決評測問題不是本次討論的重點,這里我們更關心的是如何及時發現問題。我們怎么發現問題呢?一般情況下,我們要打開OJ,找到狀態頁面,然后看看評判結果有沒有waiting的,這樣做的話,你就要過一段時間就打開頁面一次,查看有沒有出問題,麻煩!想過沒有,一但OJ開始waiting了,你就收到一個短信,告訴你OJ出問題了,你就可以馬上解決,這樣多好啊。什么?不可能?一切都有可能!這兩天學的可愛又強大的python就輕松解決了這個難題!
上面說的有點繞,不知到什么是OJ的孩子更是一頭霧水,簡單點描述這個問題:一旦互聯網上某個網站的頁面上出現了某些文字,比如360的官網主頁上出現了“金山好“三個字(開個玩笑),360肯定不想讓那三個字出現在那里,但是,假如360網站被黑了(可能新幾乎為0),360就要及時發現頁面上的”金山好“三個字,怎么能及時發現呢?找個人一天不停的刷?不太現實。懶人們會去寫一個程序,每隔一段時間(比如三分鍾)就去檢查一下頁面上出沒出現那三個字,如果出現了或者網站登不上了就可以立即收到通知。
再或者說,如果你很關注某個網站,比如成績查詢網站,但你不知到什么時候可以開始查,你就可以寫一個程序去檢查,一旦網站有變動或者出現了某些關鍵字眼,如“學號”,“姓名”等,就意味着可以查了,第一時間獲得通知是你最想要的,我們就可以寫個程序實現。
對於做ACM的孩紙,可能比較關注一些比賽,比如Codefroce,TopCoder,航電,浙大的比賽等,也可以用這種方式及時獲取比賽信息,以免錯過比賽!
我寫的程序是發送電子郵件,如果想第一時間收到通知的話,可以將電子郵件發送到你的移動139郵箱。139郵箱的最大亮點就是無限量免費短信提醒!
這個功能說起來也並不復雜,以我現在的能力,用C,C++肯定做不出來,java和C#也不會,剛學了一點python,感覺用python實現起來還是比較簡單的。
用python,一切都變得那么簡單!越來越喜歡python了
下面是我的代碼,總共60多行,我也是初學python,這是我的第一個python實用程序,也是第一次接觸網絡方面的編程,歡迎大牛拍
# 在某個網站上搜索指定字符串
def count_string(weburl,string_tobe_find):
import urllib
try:
web = urllib.urlopen(weburl).read()
except:
return -1
string = str(web)
return string.count(string_tobe_find)
# 發送郵件提醒管理員
def send_mail(sub,content):
import smtplib
from email.mime.text import MIMEText
to_list=[ ' XXXXX@XXX.com ']
mail_host= " smtp.163.com " # 設置服務器
mail_user= " XXXXXXX " # 用戶名
mail_pass= " XXXXXXX " # 口令
mail_postfix= " 163.com " # 發件箱的后綴
me= " 提醒 "+ " < "+mail_user+ " @ "+mail_postfix+ " > "
msg = MIMEText(content,_subtype= ' plain ',_charset= ' gb2312 ')
msg[ ' Subject '] = sub
msg[ ' From '] = me
msg[ ' To '] = " ; ".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
# 檢查函數,調用上面的函數
def check():
import time
status = count_string( ' http://acm.sdut.edu.cn/web/status.php ', " waiting ")
if status == -1:
print time.ctime(time.time()), " OJ頁面無法打開 ", " 請檢查問題 "
if send_mail( " OJ頁面無法打開 ", " 請檢查問題!\n\tfrom ma6174 ") == False:
print ' 郵件發送失敗 '
return False
time.sleep(600)
elif status > 1 :
print time.ctime(time.time()), " OJ又waiting了 ", " 請盡快修復 "
if send_mail( " OJ又waiting了 ", " 請盡快修復!\n\tfrom ma6174 ") == False:
print ' 郵件發送失敗 '
return False
time.sleep(600)
else:
print time.ctime(time.time()), " \tOJ運行正常! "
# 主函數
if __name__== ' __main__ ':
print " \tOJ運行檢查程序 --- BY ma6174 "
from time import sleep
while True:
check()
sleep(60)