日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定时给Ta讲笑话

發(fā)布時間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定时给Ta讲笑话 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定時給Ta講笑話

大四的生活就是這么無聊,我琢磨著也學了這么多東西了,為啥不能用自己的知識來給生活找點樂子呢?我想反正每天都要給Ta問候一聲早安,為何不同時講個笑話呢?如果能寫個程序每天早上定時給Ta發(fā)一條問候早安同時講一個笑話的短信該多好。說干就干,走起~

笑話準備

笑話從哪里來?自己寫肯定是不現(xiàn)實的。在這個“云”的時代,各種云都有,自然是不缺開放API的(大部分都是免費的)。隨意一搜,果然被我找到一個接口:易源_笑話大全

根據(jù)它給的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) #發(fā)起請求 content = resp.read()#獲得返回內(nèi)容,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 '內(nèi)容:'+first_text else:print "error"

這里簡單做一下介紹:urllib2是Python的一個獲取URL的組件。他以urlopen函數(shù)的形式提供了一個非常簡單的接口,具有利用不同協(xié)議獲取URL的能力,同樣提供了一個比較復雜的接口來處理一般情況。urllib2可用來完成以下功能:

1.獲取Web頁面2.在遠程http服務器上驗證3.額外數(shù)據(jù)請求,如表單提交(GET和POST)4.異常處理5.非http協(xié)議通信(如FTP)

它的詳細操作可以查看官方文檔

發(fā)短信

笑話準備好了,那么怎么發(fā)短信到手機呢?類似上面小節(jié),我想著肯定也有開放的API,但是這次就沒那么幸運了,短信API都是要付費的~, 對于一個學生黨來說有點不現(xiàn)實。怎么辦??苦思冥想不得其解,這個時候突然收到移動服務號的短信如圖:

這提醒了我,移動的139郵箱要給用戶收到的郵件發(fā)送短信提醒!!這就妙了,因為發(fā)郵件是不需要錢的,我只需要發(fā)郵件到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:郵件內(nèi)容; me="笑話來了"+"<"+mail_user+">" #這里的hello可以任意設置,收到信后,將按照設置顯示msg = MIMEText(content,_subtype='html',_charset='utf-8') #創(chuàng)建一個郵件消息實例,這里設置為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()) #發(fā)送郵件s.close() return True except Exception, e: print str(e) return False

我是用的是qq郵箱,一般的郵件服務器都會開放smtp,pop3,imap服務的端口給用戶,讓用戶可以查詢郵件或者發(fā)送郵件。我們這里發(fā)送郵件,所以使用smtp服務。Python 的smtplib庫可以實現(xiàn)這一功能。

整合代碼嘗試,效果如下圖:

可見不能完全顯示,這是因為139郵箱免費版具有140字限制如圖:


有兩種辦法解決,一是付費5塊錢(還是不愿意!),二是把一個笑話分成三部分,分別放在發(fā)件人,主題和正文中,如下圖:


還是不行,字數(shù)限制是個硬傷。那就從原來的從笑話列表里選擇第一個笑話改為選擇字數(shù)最少的一個。代碼如下:

json_result = json.loads(content) content_list = json_result['showapi_res_body']['contentlist'] minlen = 10000 for item in content_list:if len(item['text'])<minlen:title = item['title']text = item['text']minlen = len(item['text'])

如下圖:


基本可行了,不過發(fā)多了過后騰訊會認為是垃圾郵件(汗),主要是發(fā)件人名字太奇怪了,大家有什么好主意可以告訴我一下啊,多多交流。
完整代碼(joke.py)如下:

# -*- coding: utf-8 -*- ''' Created on 2016年1月22日 @author: 邱康 ''' import urllib2, json,sys,smtplib from email.mime.text import MIMETextreload(sys) sys.setdefaultencoding('utf-8')#避免中文編碼問題mail_host="smtp.qq.com" #設置服務器 mail_user="************" #用戶名 mail_pass="*********" #口令 mailto_list=['*******'] #郵件接受者def send_mail(to_list,part1,sub,content): #to_list:收件人;sub:主題;content:郵件內(nèi)容;me=part1+"<"+mail_user+">" #hellomsg = MIMEText(content,_subtype='plain',_charset='utf-8')#創(chuàng)建一個實例,這里設置為純文字格式郵件編碼utf8msg['Subject'] = sub #設置主題msg['From'] = me #設置發(fā)件人msg['To'] = ";".join(to_list) try: s = smtplib.SMTP() #實例化 s.connect(mail_host) #連接smtp服務器s.login(mail_user,mail_pass) #登陸服務器s.sendmail(me, to_list, msg.as_string()) #發(fā)送郵件s.close() return True except Exception, e: print str(e) return False if __name__ == '__main__': appkey = "你自己的appkey"url = 'http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1'req = urllib2.Request(url)req.add_header("apikey", appkey)resp = urllib2.urlopen(req)content = resp.read()if(content):json_result = json.loads(content)content_list = json_result['showapi_res_body']['contentlist']minlen = 10000for item in content_list:if len(item['text'])<minlen:first_title = item['title']first_text = item['text']minlen = len(item['text'])print 'title:'+first_titleprint 'content:'+first_textlength = len(first_text)part1 = first_text[0:10]part2 = first_text[10:22]part3 = first_text[22:length]print part1,"+",part2,"+",part3if send_mail(mailto_list,part1,part2,part3): print "send msg succeed"else: print "send msg failed" else:print "get joke error"

定時任務

現(xiàn)在準備工作齊全了,就差最后一步定時發(fā)送了。Linux 提供了一個定時任務工具crontab,windows提供了一個定時任務工具叫做任務計劃,不過我的筆記本又不是隨時連上網(wǎng)的,所以把這個腳本放在實驗室的虛擬機上了(debian)。一般linux都預裝有python環(huán)境所以只需以下命令:

Vi /etc/crontab

在文件最后一行添加

30 7 * * * root python /root/joke.py

這樣就能達到每天早上7:30 發(fā)送給Ta發(fā)短信的目的啦!

總結

總覺得程序員是一個很好的職業(yè),雖然會比較累,不過只要有一雙發(fā)現(xiàn)的眼睛和對生活的熱情就能夠用自己的知識給生活帶來一些閃光點,比如你可以為不會上網(wǎng)的長輩爬取天氣預報信息發(fā)送到手機短信順便問候一聲,我相信長輩們都會很開心的。

更新-2016/3/4

最近發(fā)現(xiàn) 有好多發(fā)短信的服務 比如網(wǎng)易云信,leancloud等等,一條短信花不了1毛錢,就幾分,所以一個月不到3塊,還是可以買一下,畢竟這樣就不需要考慮字數(shù)限制了,三塊錢能讓Ta開心一下還是非常不錯的。

總結

以上是生活随笔為你收集整理的定时给Ta讲笑话的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。