定时给Ta讲笑话
定時給Ta講笑話
大四的生活就是這么無聊,我琢磨著也學了這么多東西了,為啥不能用自己的知識來給生活找點樂子呢?我想反正每天都要給Ta問候一聲早安,為何不同時講個笑話呢?如果能寫個程序每天早上定時給Ta發一條問候早安同時講一個笑話的短信該多好。說干就干,走起~
笑話準備
笑話從哪里來?自己寫肯定是不現實的。在這個“云”的時代,各種云都有,自然是不缺開放API的(大部分都是免費的)。隨意一搜,果然被我找到一個接口:易源_笑話大全
根據它給的API可以獲取它所有的笑話,關鍵代碼如下:
appkey = "你自己申請的appkey" url = 'http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1'#API地址 req = urllib2.Request(url) #初始化請求 req.add_header("apikey", appkey) #添加 http請求的header resp = urllib2.urlopen(req) #發起請求 content = resp.read()#獲得返回內容,json格式字符串 if(content):json_result = json.loads(content) #轉換為字典對象# 下面從這個字典中獲得笑話的標題和正文content_list = json_result['showapi_res_body']['contentlist']# 只取第一條笑話的標題和正文first_title = content_list[0]['title'].encode('utf8')first_text = content_list[0]['text'].encode('utf8')print '標題:'+first_titleprint '內容:'+first_text else:print "error"這里簡單做一下介紹:urllib2是Python的一個獲取URL的組件。他以urlopen函數的形式提供了一個非常簡單的接口,具有利用不同協議獲取URL的能力,同樣提供了一個比較復雜的接口來處理一般情況。urllib2可用來完成以下功能:
1.獲取Web頁面2.在遠程http服務器上驗證3.額外數據請求,如表單提交(GET和POST)4.異常處理5.非http協議通信(如FTP)它的詳細操作可以查看官方文檔
發短信
笑話準備好了,那么怎么發短信到手機呢?類似上面小節,我想著肯定也有開放的API,但是這次就沒那么幸運了,短信API都是要付費的~, 對于一個學生黨來說有點不現實。怎么辦??苦思冥想不得其解,這個時候突然收到移動服務號的短信如圖:
這提醒了我,移動的139郵箱要給用戶收到的郵件發送短信提醒!!這就妙了,因為發郵件是不需要錢的,我只需要發郵件到Ta的139郵箱就可以了,哈哈。關鍵代碼如下:
import smtplib,sys from email.mime.text import MIMETextmail_host="smtp.qq.com" #設置服務器 mail_user="你的qq郵箱 " #用戶名 mail_pass="你的qq郵箱密碼" #密碼def send_mail(to_list,sub,content): #to_list:收件人;sub:主題;content:郵件內容; me="笑話來了"+"<"+mail_user+">" #這里的hello可以任意設置,收到信后,將按照設置顯示msg = MIMEText(content,_subtype='html',_charset='utf-8') #創建一個郵件消息實例,這里設置為html格式郵件msg['Subject'] = sub #設置主題msg['From'] = me msg['To'] = ";".join(to_list) try: s = smtplib.SMTP #實例化python郵件的smtp類s.connect(mail_host) #連接smtp服務器s.login(mail_user,mail_pass) #登陸服務器s.sendmail(me, to_list, msg.as_string()) #發送郵件s.close() return True except Exception, e: print str(e) return False我是用的是qq郵箱,一般的郵件服務器都會開放smtp,pop3,imap服務的端口給用戶,讓用戶可以查詢郵件或者發送郵件。我們這里發送郵件,所以使用smtp服務。Python 的smtplib庫可以實現這一功能。
整合代碼嘗試,效果如下圖:
可見不能完全顯示,這是因為139郵箱免費版具有140字限制如圖:
有兩種辦法解決,一是付費5塊錢(還是不愿意!),二是把一個笑話分成三部分,分別放在發件人,主題和正文中,如下圖:
還是不行,字數限制是個硬傷。那就從原來的從笑話列表里選擇第一個笑話改為選擇字數最少的一個。代碼如下:
如下圖:
基本可行了,不過發多了過后騰訊會認為是垃圾郵件(汗),主要是發件人名字太奇怪了,大家有什么好主意可以告訴我一下啊,多多交流。
完整代碼(joke.py)如下:
定時任務
現在準備工作齊全了,就差最后一步定時發送了。Linux 提供了一個定時任務工具crontab,windows提供了一個定時任務工具叫做任務計劃,不過我的筆記本又不是隨時連上網的,所以把這個腳本放在實驗室的虛擬機上了(debian)。一般linux都預裝有python環境所以只需以下命令:
Vi /etc/crontab在文件最后一行添加
30 7 * * * root python /root/joke.py這樣就能達到每天早上7:30 發送給Ta發短信的目的啦!
總結
總覺得程序員是一個很好的職業,雖然會比較累,不過只要有一雙發現的眼睛和對生活的熱情就能夠用自己的知識給生活帶來一些閃光點,比如你可以為不會上網的長輩爬取天氣預報信息發送到手機短信順便問候一聲,我相信長輩們都會很開心的。
更新-2016/3/4
最近發現 有好多發短信的服務 比如網易云信,leancloud等等,一條短信花不了1毛錢,就幾分,所以一個月不到3塊,還是可以買一下,畢竟這樣就不需要考慮字數限制了,三塊錢能讓Ta開心一下還是非常不錯的。
總結
- 上一篇: 新经理人所要具备的平衡术
- 下一篇: [社工dos]饭客大型职业教程社工及do