用python寫一個根據(jù)24節(jié)氣自動更換壁紙并發(fā)郵件的小程序

很早之前率寡,無意中我發(fā)現(xiàn)二十四節(jié)氣上的節(jié)氣壁紙非常的好看。于是我就把壁紙的高清版下載了下來废累,每到新節(jié)氣開始的時候就手動設置壁紙邓梅。后來為了嫌麻煩,就做了一個由 batch邑滨,vbs日缨,和outlook里面寫macro 結(jié)合的一個小程序,每天判斷當天是否是一個新的節(jié)氣的開始掖看,如果是就自動設當前節(jié)氣為主題的壁紙匣距,并且將該壁紙embeded 在 outlook郵件中發(fā)給我自己。

再后來覺得這么一個個的script文件不好看哎壳,就干脆用一個python文件把它們整合起來毅待。

第一步, 把24節(jié)氣的24張壁紙下載到本地归榕,并以拼音進行命名

節(jié)氣壁紙

第二步尸红,爬介紹24節(jié)氣的網(wǎng)頁,得到各個節(jié)氣的日期刹泄,名字和簡介外里。

我用的是以下兩個網(wǎng)站
page 1
page 2

第三步,判斷今天日期是否與其中的節(jié)氣開始的日期相等循签,如果相等則準備發(fā)郵件和設壁紙

由于該網(wǎng)站上是前三個縮寫字母來表示月份级乐,在python里面如何快速將一月份 Jan 轉(zhuǎn)換成數(shù)字1 呢?
可以用calendar庫里面的month_abbr

import calendar
self.abbr_to_num = {name: num for num, name in enumerate(calendar.month_abbr) if num}
Month_num=self.abbr_to_num[Month]

第四步,用outlook發(fā)郵件。

由于我安裝的是outlook客戶端莲兢,所以我可以直接調(diào)用 win32 的庫來對outlook進行操作
需要注意的是,當插入圖片作為附件時贼穆,郵件并不會自動展示該圖片。但是我想做的是把圖片embeded在郵件內(nèi)容中進行發(fā)送兰粉,這樣接收者不僅可以很清晰的預覽該圖片故痊,并且可以下載它。

在code里面玖姑,我們不僅需要在htmlbody里面插入img標簽(注意需要加入cid)愕秫,
而且需要給郵件的attachment設置 屬性:

sttachment = mail.Attachments.Add(attachment_path)
sttachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", File_name )
image.png

第五步慨菱,設置壁紙

如果是windows系統(tǒng),則需要

import ctypes
SPI_SETDESKWALLPAPER = 20 
output=ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, attachment_path , 0)

第六步戴甩,每天用windows scheduler 定時運行該程序符喝。


最后code:

#coding = utf - 8
import time
from datetime import *
import pycurl
import os
import os.path
import argparse
import sys 
from os.path import getsize
from StringIO import StringIO
import re
import lxml.html
from lxml.html.soupparser import fromstring
import calendar
import win32com.client as win32
import ctypes
#class definition
class jieqi_class():

    url_1 = 'https://www.travelchinaguide.com/intro/focus/solar-term.htm'
    url_2 = 'https://www.chinahighlights.com/festivals/the-24-solar-terms.htm'


    def __init__(self):
        self.Get_jieqi_list()
        self.Check_Today_is_Jieqi()
        self.send_email()



    def Get_jieqi_list(self):
        print "start to gather infomation"
        c = pycurl.Curl()
        c.setopt(pycurl.PROXY, 'http://192.168.87.15:8080')
        c.setopt(pycurl.PROXYUSERPWD, 'LL66269:')
        c.setopt(pycurl.PROXYAUTH, pycurl.HTTPAUTH_NTLM)
        buffer = StringIO()
        c.setopt(pycurl.URL, self.url_1)
        c.setopt(c.WRITEDATA, buffer)
        c.perform()
        
        body = buffer.getvalue().decode('utf-8', 'ignore')
        doc = lxml.html.fromstring(body)
        jieqi_list = doc.xpath("http://table[@class='c_table']/tbody/tr")
        self.jieqi_map={}
        for i,each_row in enumerate(jieqi_list):
            if i>0:
                detail=[]
                #print "----"
                each_row_ = each_row.xpath(".//td")
                for each_column in each_row_:
                    detail.append(each_column.text_content())

                self.jieqi_map[i]=detail



        buffer = StringIO()
        c.setopt(pycurl.URL, self.url_2)
        c.setopt(c.WRITEDATA, buffer)
        c.perform()
        c.close()
        body = buffer.getvalue().decode('utf-8', 'ignore')
        doc = lxml.html.fromstring(body)
        jieqi_list_1 = doc.xpath("http://table[@class='table']/tbody/tr")
        self.jieqi_explanation_map={}
        for i,each_row in enumerate(jieqi_list_1):
            if i>0:
                more_detail=[]
                #print "----"
                more_detail = each_row.xpath(".//td/p")[3].text_content()


                self.jieqi_explanation_map[i]=more_detail   


    def Check_Today_is_Jieqi(self):
        self.abbr_to_num = {name: num for num, name in enumerate(calendar.month_abbr) if num}
        
        self.hit = False
        Today=date.today()
        for key,detail in self.jieqi_map.iteritems():
            Month = re.search(r"^(\w{3})", detail[1]).group(1)
            Month_num=self.abbr_to_num[Month]
            day=re.search(r"(\d+)", detail[1]).group(1)

            date_jieqi=date(2017, Month_num, int(day))

            if Today==date_jieqi:  
                print "Today, a new jieqi begin! --" + detail[0]
                self.hit = True
                self.index=key
                self.detail=detail


    def send_email(self):
        if self.hit == True:
            print "sending email!"

            jieqiname=self.detail[0]
            File_name = re.search(r"\((.*)\)", jieqiname).group(1).replace(" ", "").lower()+".jpg"
            Summary = self.detail[2]
            detail_summary= self.jieqi_explanation_map[self.index]

        
            outlook = win32.Dispatch('outlook.application')
            mail = outlook.CreateItem(0)
            mail.To = 'xingwanlibigtrace@gmail.com'
            mail.Subject = jieqiname
            mail.CC = ""#
            mail.BCC = ""
            html_body = "<html><body><p><strong>" + Summary + "</strong></p><p>"+detail_summary+"</p>![](cid:"+File_name+")</body></html>"

            attachment_path = "D:/wallpaper_pool/"+File_name
            sttachment = mail.Attachments.Add(attachment_path)

            sttachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", File_name )
            mail.HTMLBody = html_body
            mail.send
            self.set_wallpaper(attachment_path)


    def set_wallpaper(self,attachment_path):
        SPI_SETDESKWALLPAPER = 20 
        output=ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, attachment_path , 0)
        if output ==1 :
            print "set wallpaper successfully!"

app = jieqi_class()


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甜孤,隨后出現(xiàn)的幾起案子协饲,更是在濱河造成了極大的恐慌,老刑警劉巖缴川,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茉稠,死亡現(xiàn)場離奇詭異,居然都是意外死亡把夸,警方通過查閱死者的電腦和手機而线,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋日,“玉大人吞获,你說我怎么就攤上這事⊙璞桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵刁绒,是天一觀的道長闷营。 經(jīng)常有香客問我,道長知市,這世上最難降的妖魔是什么傻盟? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮嫂丙,結(jié)果婚禮上娘赴,老公的妹妹穿的比我還像新娘。我一直安慰自己跟啤,他們只是感情好诽表,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隅肥,像睡著了一般竿奏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腥放,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天泛啸,我揣著相機與錄音,去河邊找鬼秃症。 笑死候址,一個胖子當著我的面吹牛吕粹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岗仑,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼匹耕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赔蒲?” 一聲冷哼從身側(cè)響起泌神,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舞虱,沒想到半個月后欢际,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡矾兜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年损趋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椅寺。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡浑槽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出返帕,到底是詐尸還是另有隱情桐玻,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布荆萤,位于F島的核電站镊靴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏链韭。R本人自食惡果不足惜偏竟,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敞峭。 院中可真熱鬧踊谋,春花似錦、人聲如沸旋讹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沉迹。三九已至嫌褪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚股,已是汗流浹背笼痛。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缨伊。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓摘刑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刻坊。 傳聞我的和親對象是個殘疾皇子枷恕,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容