給女票的每日天氣提醒

寫在前面

待解決
1.請(qǐng)求頭中設(shè)置不壓縮

最近在某博客上看到一篇基于python與阿里云的短信發(fā)送腳本,覺得有意思就試著復(fù)現(xiàn)出來椰棘。
整體思路如下

獲取氣象網(wǎng)API數(shù)據(jù)→urllib包→json數(shù)據(jù)格式更便于操作

阿里云設(shè)置→aliyun_SDK→python版本統(tǒng)一

每日定時(shí)執(zhí)行→通過Linux腳本語言完成

抓取天氣

找了老半天膀斋,找到了不僅顯示實(shí)時(shí)天氣淡溯,還有預(yù)測(cè)功能的穩(wěn)定免費(fèi)的氣象API接口(瘋狂打call中...)兵琳。
由于該API支持json與xml兩種格式勃蜘,利用urllib包可以輕松獲取對(duì)應(yīng)天氣數(shù)據(jù)硕噩。

# -*- coding:utf-8 -*-
import urllib
import json

city = u'北碚'  #待查詢城市
city = urllib.parse.quote(city)  #這一句很關(guān)鍵....坑太大
weather_url = 'http://www.sojson.com/open/api/weather/json.shtml?city=%s' %city

#抓取網(wǎng)頁信息
req = urllib.request.urlopen(weather_url)
rs = req.read().decode()  #采用utf-8解碼
#獲取當(dāng)天數(shù)據(jù),格式如下
#{"date":"04日星期四","sunrise":"07:50","high":"高溫 7.0℃","low":"低溫 5.0℃",
#"sunset":"18:08","aqi":24.0,"fx":"無持續(xù)風(fēng)向","fl":"<3級(jí)","type":"小雨",
#"notice":"下雨了不要緊缭贡,撐傘擋擋就行"}
weather_info = json.loads(rs)['forecast']

短短幾行代碼完成的工作炉擅,中間碰到的坑不少辉懒。

1.API接口重要性

原始博客提供的API接口已經(jīng)過時(shí),對(duì)應(yīng)數(shù)據(jù)已不再更新谍失,于是就在度娘上找了另一個(gè)相對(duì)比較全面的API耗帕。但是在執(zhí)行到倒數(shù)第二步時(shí),解碼失敗袱贮,錯(cuò)誤代碼

'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

百度一圈發(fā)現(xiàn)仿便,在提交到服務(wù)器的request header中有Accept Encoding : gzip, deflate這一選項(xiàng),這條信息代表本地可以接收壓縮格式的數(shù)據(jù)攒巍,而服務(wù)器在處理時(shí)就將大文件壓縮再發(fā)回客戶端嗽仪。即,本地接收的不是完整的json格式柒莉,而是壓縮后的gzip格式闻坚,這一點(diǎn)可以通過request.getheaders查詢響應(yīng)頭信息得到。
然而如何處理請(qǐng)求頭兢孝,讓它不接受壓縮格式窿凤,一直沒弄明白
最終跨蟹,通過查找另一個(gè)比較合適的API繞過了這個(gè)問題雳殊。

2.url漢字編碼

該url輸入的城市名通過漢字輸入。然而窗轩,都知道漢字是不能作為url輸入的夯秃,需要對(duì)其進(jìn)行編碼。
原API文檔中作者采用utf-8編碼(其實(shí)是基于url的utf-8編碼)痢艺,于是就將漢字轉(zhuǎn)碼為utf-8后再附上url地址仓洼,出現(xiàn)訪問失敗。
提取對(duì)應(yīng)漢字編碼顯示如下

漢字:北碚
utf-8:\xe5\x8c\x97\xe7\xa2\x9a
url : %e5%8c%97%e7%a2%9a

可以發(fā)現(xiàn)堤舒,url將utf-8中的\x替換為%色建,這是因?yàn)閡rl中不允許出現(xiàn)諸如\,這樣的字符。更加詳細(xì)的url轉(zhuǎn)碼文檔參考阮一峰的博客

博客簡述
1.url中漢字若為路徑舌缤,則為對(duì)應(yīng)utf-8編碼相關(guān)位置替換為%
2.url漢字若為搜索關(guān)鍵字箕戳,則用的是操作系統(tǒng)的默認(rèn)編碼
3.GET和POST方法的編碼,用的是網(wǎng)頁的編碼
4.其余過于復(fù)雜友驮,略過

3. python2.7 vs python3

由于python版本不向下兼容漂羊,2.7版本python語法與3以后語法有很大差別⌒读簦考慮后續(xù)阿里云API采用2.6版本走越,因而需要對(duì)這里urllib模塊進(jìn)行轉(zhuǎn)換為2.6格式。
由于全文采用的只有urllib模塊耻瑟,因而只需小規(guī)模修改即可旨指。
urllib在python2與python3區(qū)別
修改后代碼如下

# -*- coding:utf-8 -*-
__author__ = 'lumo_wang'

import urllib
import urllib2
import json

city = '北碚'
city_encode = urllib.quote(city)
weather_url = 'http://www.sojson.com/open/api/weather/json.shtml?city=%s' %city_encode
request = urllib2.urlopen(weather_url)
rs = request.read().decode('utf-8')
weather_info = json.loads(rs)['data']['forecast'][0]

#數(shù)據(jù)提取赏酥,主要用于刪除溫度中的漢字
def s2t(string):
  switch=False
  temp=''
  for s in string:
    if switch==True:
      temp+=s
    if s==u' ':
      switch=True
  return temp

#信息分解
time = weather_info['date'] #日期——04日星期四
temp_l = weather_info['low'] #低溫——低溫 5.0℃
low=s2t(temp_l)
temp_h = weather_info['high'] #高溫——高溫 7.0℃
high-s2t(temp_h)
aqi = weather_info['aqi'] #aqi指數(shù)——23.0
weather= weather_info['type'] #天氣——小雨

阿里云SDK配置

這一段...由于實(shí)驗(yàn)室主機(jī)最近沒網(wǎng),等弄好了整個(gè)代碼跑通了再寫谆构。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裸扶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搬素,更是在濱河造成了極大的恐慌呵晨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熬尺,死亡現(xiàn)場(chǎng)離奇詭異摸屠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粱哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門季二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揭措,你說我怎么就攤上這事胯舷。” “怎么了绊含?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵桑嘶,是天一觀的道長。 經(jīng)常有香客問我艺挪,道長不翩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任麻裳,我火速辦了婚禮,結(jié)果婚禮上器钟,老公的妹妹穿的比我還像新娘津坑。我一直安慰自己,他們只是感情好傲霸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布疆瑰。 她就那樣靜靜地躺著,像睡著了一般昙啄。 火紅的嫁衣襯著肌膚如雪穆役。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天梳凛,我揣著相機(jī)與錄音耿币,去河邊找鬼。 笑死韧拒,一個(gè)胖子當(dāng)著我的面吹牛砍聊,可吹牛的內(nèi)容都是我干的贴谎。 我是一名探鬼主播熊尉,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼劲适!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厢蒜,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤霞势,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后斑鸦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕贡,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鄙才,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颂鸿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攒庵,死狀恐怖嘴纺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浓冒,我是刑警寧澤栽渴,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站稳懒,受9級(jí)特大地震影響闲擦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜场梆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一墅冷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧或油,春花似錦寞忿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辖佣,卻和暖如春霹抛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卷谈。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工杯拐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓藕施,卻偏偏與公主長得像寇损,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裳食,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理矛市,服務(wù)發(fā)現(xiàn),斷路器诲祸,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 編碼問題一直困擾著開發(fā)人員浊吏,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語言救氯,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,470評(píng)論 1 20
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,769評(píng)論 25 707
  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號(hào) 簡介有稍微接觸python的人就會(huì)知道找田,python中...
    ayuLiao閱讀 3,097評(píng)論 1 5
  • 玻璃瓶里住著秘密 一如你妄想著的過去 ...
    紅塵不聞閱讀 226評(píng)論 0 0