Python獲取墨跡近三日天氣情況

更多教程請移步至:洛涼博客

求助請移步至:Python自學技術(shù)交流

一:介紹

本代碼在Python3環(huán)境下編寫坞古,使用(requests,json,time,email)模塊,不保證其他環(huán)境可用弥雹,如果到問題請自行解決或進群求助蚓让。

1儡司、反正我手上的iOS里面的自帶天氣APP刷新太慢,每天早上趕著上班想看看天氣都不行邦危,簡直急死人洋侨。
然后網(wǎng)上搜了一下天氣API,很多免費的API倦蚪,我這里選的是墨跡天氣API希坚,免費,一年內(nèi)可以調(diào)用2000次/每個賬號陵且。好了裁僧,不瞎扯了,直接開擼慕购。
2聊疲、由于墨跡天氣API是用過地區(qū)經(jīng)緯度查詢天氣情況,第一個問題就要解決通過實際的地理位置獲取到經(jīng)緯度沪悲,大家不用擔心获洲,很easy的事,也是直接調(diào)用第三方API就行了(這里調(diào)用騰訊的API)可训。
3昌妹、本人代碼寫好直接放在Linux系統(tǒng)通過執(zhí)行定時任務自動執(zhí)行。(每天早上7:20通過郵箱發(fā)送至指定郵箱)
然后每天早上打開手機郵箱就能很直觀的獲取到近三日天氣情況握截。

有興趣的同學可以自行搜索Linux定時任務機制及簡單使用方法飞崖。

二:通過地理位置獲取經(jīng)緯度

直接貼代碼吧,不是很難得事谨胞,大家遵循騰訊API傳參規(guī)范就行了固歪。
不過大家要去注冊一個騰訊開發(fā)者賬號,獲取開發(fā)者密鑰胯努。
傳送門:騰訊位置服務
以下代碼文件名命名為:loala.py

import requests
import json
from time import sleep

def getlalo():

    result = False
    while result == False:
        address = input('\n請輸入您所在的城市(注:地址中請包含城市名稱):')
        url = 'http://apis.map.qq.com/ws/geocoder/v1/?address={}&key='這里請輸入你自己的開發(fā)者密鑰'.format(
            address)
        r = requests.get(url=url)
        d = json.loads(r.text)
        if d.get('message') == 'query ok':
            return d.get('result').get('location')
        elif address == 'q':
            print('\n您已選擇退出牢裳,感謝您的使用,再見叶沛!(五秒后自動關(guān)閉)')
            sleep(5)
            break
        elif d.get('message') == '查詢無結(jié)果':
            print('\n您輸入的地址有誤蒲讯,請重新輸入:')
            continue

if __name__ == "__main__":
    ll = getlalo()

三:墨跡天氣API解析

現(xiàn)在開放的API一般result都是以json形式返回。第一步就是通過上面獲取到的經(jīng)緯度去查詢天氣灰署,第二步就是解析JSON判帮。
有興趣的同學可以去阿里云市場搜索天氣API,由于免費的API調(diào)用一般都要傳遞key溉箕。SO大家還是要注冊一個阿里云賬號晦墙,然后購買墨跡免費天氣API,會生成key值肴茄。
下面代碼中還存在郵箱發(fā)送模塊晌畅,有興趣的同學可以自己搜索學習,我這里就是調(diào)用簡單的發(fā)送模塊寡痰。

import requests
import json
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
from time import sleep



def getweather(url,lat,lon,appcode):
    '''獲取近三天天氣情況'''
    try:
        headers = {
            'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
            'Authorization':'APPCODE '+appcode
                   }
        bodys = {
            'lat' : lat,
            'lon' : lon,
            'token' : '''443847fa1ffd4e69d929807d42c2db1b'''
        }

        html = requests.post(url,data=bodys,headers=headers)
        html.encoding = html.apparent_encoding
        html = json.loads(html.text)
        weather = html.get('data').get('forecast')
        city = str(html.get('data').get('city').get('counname')) + str(html.get('data').get('city').get('pname')) + str(html.get('data').get('city').get('name'))
        weathers = []
        for a in weather:
            ygrq = "預告日期:{}".format(a.get('predictDate'))
            btqk = "日間天氣情況:{}".format(a.get('conditionDay'))
            wsqk = "晚間天氣情況:{}".format(a.get('conditionNight'))
            zdwd = "當天最低溫度:{}度".format(a.get('tempNight'))
            zgwd = "當天最高溫度:{}度".format(a.get('tempDay'))
            btfx = "日間風向:{}抗楔,級數(shù):{}級".format(a.get("windDirDay"),a.get('windLevelDay'))
            wsfx = "晚間風向:{}棋凳,級數(shù):{}級".format(a.get("windDirNight"), a.get('windLevelNight'))
            weathers.append(ygrq)
            weathers.append(btqk)
            weathers.append(wsqk)
            weathers.append(zdwd)
            weathers.append(zgwd)
            weathers.append(btfx)
            weathers.append(wsfx)
        return weathers,city
    except BaseException as f:
        return "獲取近三天天氣情況失敗,錯誤信息為:{}".format(f)

def sendmail(weathers,receiver):
    # qq郵箱smtp服務器
    host_server = 'smtp.qq.com'
    # sender_qq為發(fā)件人的qq號碼
    sender_qq = '輸入發(fā)送郵件的郵箱地址'
    # pwd為qq郵箱的授權(quán)碼
    pwd = '輸入發(fā)送郵件的郵箱密碼谓谦,如果是QQ郵箱傳入授權(quán)碼'
    # 發(fā)件人的郵箱
    sender_qq_mail = '3301885103@qq.com'
    # 收件人郵箱
    receiver = receiver
    hh = '贫橙,'
    try:
        # 郵件的正文內(nèi)容
        today = ''
        tomorrow = ''
        dftomorrow = ''
        for a in weathers[0][0:7]:
            b = a + hh
            today +=b
        for a in weathers[0][7:14]:
            b = a + hh
            tomorrow +=b
        for a in weathers[0][14:21]:
            b = a + hh
            dftomorrow +=b
        mail_content = today + '\n\n' + tomorrow + '\n\n' + dftomorrow
        # 郵件標題
        mail_title = weathers[1] + "近三日天氣情況"
        # ssl登錄
        smtp = SMTP_SSL(host_server)
        # set_debuglevel()是用來調(diào)試的。參數(shù)值為1表示開啟調(diào)試模式反粥,參數(shù)值為0關(guān)閉調(diào)試模式
        smtp.set_debuglevel(0)
        smtp.ehlo(host_server)
        smtp.login(sender_qq, pwd)
        msg = MIMEText(mail_content, "plain", 'utf-8')
        msg["Subject"] = Header(mail_title, 'utf-8')
        msg["From"] = sender_qq_mail
        msg["To"] = receiver
        print('\n您當前查詢的地區(qū)近三日天氣情況如下:')
        print('\n' + mail_content)
        smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
        smtp.quit()
    except:
        mail_title = '內(nèi)容出錯了'
        mail_content = weathers
        # ssl登錄
        smtp = SMTP_SSL(host_server)
        # set_debuglevel()是用來調(diào)試的卢肃。參數(shù)值為1表示開啟調(diào)試模式,參數(shù)值為0關(guān)閉調(diào)試模式
        smtp.set_debuglevel(0)
        smtp.ehlo(host_server)
        smtp.login(sender_qq, pwd)
        msg = MIMEText(mail_content, "plain", 'utf-8')
        msg["Subject"] = Header(mail_title, 'utf-8')
        msg["From"] = sender_qq_mail
        msg["To"] = receiver
        smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
        smtp.quit()

if __name__ == "__main__":
    url = 'http://apifreelat.market.alicloudapi.com/whapi/json/aliweather/briefforecast3days'
    appcode = '這里傳入自己的阿里云賬號key'
    # 可在http://api.map.baidu.com/lbsapi/getpoint/index.html手動獲取某地經(jīng)緯度
    from loala import getlalo

    lat = ll.get('lat')      #緯度
    lon = ll.get('lng')       #經(jīng)度
    weather = getweather(url,lat,lon,appcode)
    receiver = input('\n請輸入需要接收天氣的電子郵箱地址:')       #郵件人郵箱地址
    sendmail(weather,receiver)
    print('\n發(fā)送成功才顿,請查收郵箱莫湘,謝謝!程序5秒后自動關(guān)閉VF幅垮!')
    sleep(5)

四:總結(jié)

其實個人使用不用這么復雜,直接使用下面的代碼就夠用了尾组,直接通過百度地圖API服務獲取自己長住地經(jīng)緯度忙芒,然后寫死在代碼里面。
這里用Linux定時任務每天自動運行文件比較方便讳侨,然后通過配置的默認郵箱發(fā)送至指定郵箱呵萨。
有需要的可以進群獲取打包好的EXE可執(zhí)行文件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跨跨,一起剝皮案震驚了整個濱河市潮峦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勇婴,老刑警劉巖忱嘹,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耕渴,居然都是意外死亡拘悦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門橱脸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础米,“玉大人,你說我怎么就攤上這事慰技。” “怎么了组砚?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵吻商,是天一觀的道長。 經(jīng)常有香客問我糟红,道長艾帐,這世上最難降的妖魔是什么乌叶? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮柒爸,結(jié)果婚禮上准浴,老公的妹妹穿的比我還像新娘。我一直安慰自己捎稚,他們只是感情好乐横,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著今野,像睡著了一般葡公。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上条霜,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天催什,我揣著相機與錄音,去河邊找鬼宰睡。 笑死蒲凶,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拆内。 我是一名探鬼主播旋圆,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矛纹!你這毒婦竟也來了臂聋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤或南,失蹤者是張志新(化名)和其女友劉穎孩等,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體采够,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肄方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹬癌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片权她。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逝薪,靈堂內(nèi)的尸體忽然破棺而出隅要,到底是詐尸還是另有隱情,我是刑警寧澤董济,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布步清,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廓啊。R本人自食惡果不足惜欢搜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谴轮。 院中可真熱鬧炒瘟,春花似錦、人聲如沸第步。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雌续。三九已至斩个,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驯杜,已是汗流浹背受啥。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸽心,地道東北人滚局。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像顽频,于是被迫代替她去往敵國和親藤肢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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