抓取bing每日美圖做壁紙

參考:

https://blog.csdn.net/icevmj/article/details/78890552

https://blog.csdn.net/whl826661099/article/details/79624326#commentBox

 

window7 64位 python3.7.4

 

圖片鏈接 https://area.sinaapp.com/bingImg/ 爲 Bing 每日一圖的地址,解析可以獲得圖片文件的地址。之後使用 ctypes 工具進行壁紙設置。再將py程序打包成exe文件,方便其他人。

其中,每日一圖的地址是從其他博客找到的;在設置壁紙時,發現我的環境不支持.jpg設置,只能將下載的圖片手動轉換爲bmp格式(直接下載爲bmp格式也不行)。

 

最終實現生成exe文件,每天執行時自動設置壁紙

首先,pip install pyinstaller

其次,檢查是否安裝成功(在python\Scripts路徑)

最後,將程序放到python\Scripts路徑下,直接執行打包命令 pyinstaller -F hello.py    //python\Scripts\dist 文件夾下會生成exe文件

最後附程序:

"""
程序功能:抓取bing每日一圖,設置爲桌面壁紙
"""

import urllib.request
import requests         
import os.path
import ctypes
from PIL import Image
import re

# 請求網頁,跳轉到最終 img 地址
def get_img_url(raw_img_url = "https://area.sinaapp.com/bingImg/"):
    r = requests.get(raw_img_url)       
    img_url = r.url # 得到圖片文件的網址
    print('img_url:', img_url)
    return img_url

def save_img(img_url,dirname):
    #保存圖片到磁盤文件夾dirname中
    try:
        if not os.path.exists(dirname):
            print ('文件夾',dirname,'不存在,重新建立')
            #os.mkdir(dirname)
            os.makedirs(dirname)
        #獲得圖片文件名,包括後綴,過濾路徑中不能作爲文件路徑的特殊符號
        basename=re.sub(r"[\/\\\?:\*\"\<\>\|]",'_',os.path.basename(img_url))
        #拼接目錄與文件名,得到圖片路徑
        filepath = os.path.join(dirname, basename+'.jpg')
        #下載圖片,並保存到文件夾中
        urllib.request.urlretrieve(img_url,filepath)
    except IOError as e:
        print ('文件操作失敗',e)
    except Exception as e:
        print ('錯誤 :',e)
    print("Save", filepath, "successfully!")

    return filepath

# 設置圖片絕對路徑 filepath 所指向的圖片爲壁紙
def set_img_as_wallpaper(filepath):
    SPI_SETDESKWALLPAPER = 0x14     #which command (20)
    SPIF_UPDATEINIFILE   = 0x2 #forces instant update

    #文件只能是bmp格式,且必須是經過轉換的,直接下載爲bmp格式設置不成功
    filepathBMP=filepath.replace(".jpg",".bmp")

    img = Image.open(filepath)
    img.save(filepathBMP,'BMP')

    print(ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, True, filepathBMP, SPIF_UPDATEINIFILE))
    #SystemParametersInfoW instead of SystemParametersInfoA (W instead of A)

def main():
    dirname = "D:\\bingImg"       # 圖片要被保存在的位置
    img_url = get_img_url()
    filepath = save_img(img_url, dirname)   # 圖片文件的的路徑
    set_img_as_wallpaper(filepath)

main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章