成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

定時(shí)給Ta講笑話

chanjarster / 1390人閱讀

摘要:定時(shí)給講笑話大四的生活就是這么無(wú)聊,我琢磨著也學(xué)了這么多東西了,為啥不能用自己的知識(shí)來(lái)給生活找點(diǎn)樂(lè)子呢我想反正每天都要給問(wèn)候一聲早安,為何不同時(shí)講個(gè)笑話呢如果能寫(xiě)個(gè)程序每天早上定時(shí)給發(fā)一條問(wèn)候早安同時(shí)講一個(gè)笑話的短信該多好。

定時(shí)給Ta講笑話

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

笑話準(zhǔn)備

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

根據(jù)它給的API可以獲取它所有的笑話,關(guān)鍵代碼如下:

appkey = "你自己申請(qǐng)的appkey"
url = "http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1"#API地址
req = urllib2.Request(url) #初始化請(qǐng)求
req.add_header("apikey", appkey) #添加 http請(qǐng)求的header
resp = urllib2.urlopen(req) #發(fā)起請(qǐng)求
content = resp.read()#獲得返回內(nèi)容,json格式字符串
if(content):
    json_result = json.loads(content) #轉(zhuǎn)換為字典對(duì)象
    #  下面從這個(gè)字典中獲得笑話的標(biāo)題和正文
    content_list = json_result["showapi_res_body"]["contentlist"]
    # 只取第一條笑話的標(biāo)題和正文
    first_title = content_list[0]["title"].encode("utf8")
    first_text = content_list[0]["text"].encode("utf8")
    print "標(biāo)題:"+first_title
    print "內(nèi)容:"+first_text
else:
    print "error"
    

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

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

它的詳細(xì)操作可以查看官方文檔

發(fā)短信

笑話準(zhǔn)備好了,那么怎么發(fā)短信到手機(jī)呢?類(lèi)似上面小節(jié),我想著肯定也有開(kāi)放的API,但是這次就沒(méi)那么幸運(yùn)了,短信API都是要付費(fèi)的~, 對(duì)于一個(gè)學(xué)生黨來(lái)說(shuō)有點(diǎn)不現(xiàn)實(shí)。怎么辦??苦思冥想不得其解,這個(gè)時(shí)候突然收到移動(dòng)服務(wù)號(hào)的短信如圖:

這提醒了我,移動(dòng)的139郵箱要給用戶收到的郵件發(fā)送短信提醒?。∵@就妙了,因?yàn)榘l(fā)郵件是不需要錢(qián)的,我只需要發(fā)郵件到Ta的139郵箱就可以了,哈哈。關(guān)鍵代碼如下:

import smtplib,sys
from email.mime.text import MIMEText

mail_host="smtp.qq.com"      #設(shè)置服務(wù)器
mail_user="你的qq郵箱 "    #用戶名
mail_pass="你的qq郵箱密碼"           #密碼

def send_mail(to_list,sub,content):                 
#to_list:收件人;sub:主題;content:郵件內(nèi)容;
me="笑話來(lái)了"+"<"+mail_user+">"                   
#這里的hello可以任意設(shè)置,收到信后,將按照設(shè)置顯示
    msg = MIMEText(content,_subtype="html",_charset="utf-8")    #創(chuàng)建一個(gè)郵件消息實(shí)例,這里設(shè)置為html格式郵件
    msg["Subject"] = sub    #設(shè)置主題
    msg["From"] = me  
    msg["To"] = ";".join(to_list)  
    try:  
        s = smtplib.SMTP              #實(shí)例化python郵件的smtp類(lèi)
        s.connect(mail_host)  #連接smtp服務(wù)器
        s.login(mail_user,mail_pass)       #登陸服務(wù)器
        s.sendmail(me, to_list, msg.as_string())  #發(fā)送郵件
        s.close()  
        return True  
    except Exception, e:  
        print str(e)  
        return False
        

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

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

可見(jiàn)不能完全顯示,這是因?yàn)?39郵箱免費(fèi)版具有140字限制如圖:


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


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

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

如下圖:


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

# -*- coding: utf-8 -*-
"""
Created on 2016年1月22日
@author: mageekchiu
"""
import urllib2, json,sys,smtplib
from email.mime.text import MIMEText

reload(sys)
sys.setdefaultencoding("utf-8")#避免中文編碼問(wèn)題

mail_host="smtp.qq.com"     #設(shè)置服務(wù)器
mail_user="************"    #用戶名
mail_pass="*********"       #口令 
mailto_list=["*******"]     #郵件接受者

def send_mail(to_list,part1,sub,content):                
    #to_list:收件人;sub:主題;content:郵件內(nèi)容;
    me=part1+"<"+mail_user+">"  #hello
    msg = MIMEText(content,_subtype="plain",_charset="utf-8")#創(chuàng)建一個(gè)實(shí)例,這里設(shè)置為純文字格式郵件編碼utf8
    msg["Subject"] = sub    #設(shè)置主題
    msg["From"] = me        #設(shè)置發(fā)件人
    msg["To"] = ";".join(to_list)  
    try:  
        s = smtplib.SMTP()             #實(shí)例化       
        s.connect(mail_host)           #連接smtp服務(wù)器
        s.login(mail_user,mail_pass)   #登陸服務(wù)器
        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 = 10000
        for item in content_list:
            if len(item["text"])
定時(shí)任務(wù)

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

Vi /etc/crontab

在文件最后一行添加

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

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

總結(jié)

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

更新-2016/3/4

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37776.html

相關(guān)文章

  • 520為心愛(ài)的TA定制一個(gè)生活小助理吧

    摘要:只需要短短的幾行代碼結(jié)合微信就可以為你心愛(ài)的打造一個(gè)貼心智能小助理。每天早上的時(shí)候準(zhǔn)時(shí)推送今天天氣情況生活指數(shù)等。只需要兩行代碼即可注冊(cè)一個(gè)定時(shí)執(zhí)行事件,寫(xiě)好提前想好的提醒語(yǔ)。淡忘你的小可愛(ài)提醒你該喝水了快喝一杯水showImg(https://user-gold-cdn.xitu.io/2019/5/20/16ad55bc4cf835a7); 只需要短短的幾行代碼結(jié)合微信就可以為你心愛(ài)的T...

    王陸寬 評(píng)論0 收藏0
  • ES6的Promise:要優(yōu)雅,也要浪漫

    摘要:就算改變已經(jīng)發(fā)生了,即使再對(duì)對(duì)象添加回調(diào)函數(shù),也會(huì)立即得到這個(gè)結(jié)果。方法接收個(gè)參數(shù),第一個(gè)參數(shù)是狀態(tài)的回調(diào)函數(shù),第二個(gè)參數(shù)可選是狀態(tài)的回調(diào)函數(shù)。簡(jiǎn)單來(lái)講,就是能把原來(lái)的回調(diào)寫(xiě)法分離出來(lái),在異步操作執(zhí)行完后,用鏈?zhǔn)秸{(diào)用的方式執(zhí)行回調(diào)函數(shù)。 在ECMAScript 6標(biāo)準(zhǔn)中,Promise被正式列為規(guī)范,Promise,字面意思就是許諾,承諾,嘿,聽(tīng)著是不是很浪漫的說(shuō)?我們來(lái)探究一下這個(gè)浪...

    weizx 評(píng)論0 收藏0
  • 超簡(jiǎn)單!只需簡(jiǎn)單幾步即可為TA定制天氣小助理??!

    摘要:前提雖然我們每天都會(huì)查看天氣,但是如果你能夠用限制微信每天早上七點(diǎn)定時(shí)為推送天氣預(yù)報(bào),生活指數(shù)。重要其中模塊是本項(xiàng)目以及后續(xù)項(xiàng)目中很重要的模塊,就是因?yàn)檫@個(gè)開(kāi)源項(xiàng)目,我們才能使其與微信產(chǎn)生交互。 showImg(https://segmentfault.com/img/remote/1460000019558841?w=1920&h=1279); 前提 雖然我們每天都會(huì)查看天氣,但是如...

    NicolasHe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

chanjarster

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<