現在沒人在用光碟了啦 !!
Live ABC 互動英語 LiveABC 互動英語出了好多英語學習雜誌,像是 CNN 互動英語、Biz 互動英語等等,
應該是最多量的一家了吧。買雜誌的話,通常會分有附互動光碟版以及課文朗讀版,
不管哪一種都是有附 CD 光碟的。
要是真的只有雜誌的話,那要聽裡面原文發音的人等等怎麼辦呢?
只好準時收聽廣播了
通常音檔都會放在網路上讓人下載啦,只是會需要登入會員才行。
Biz 會員登入後,會有列出音檔的下載網址。
但其實知道網址的話,光下載是不需要登入的。
所以只要知道下載網址的規則就好了XD。
以 Biz 互動英語2017年4月份為例,音檔是被包成三個 zip
檔案這樣放的。
1 2 3 $ wget http://www.liveabc.com/declaim/biz/10604/Normal/biz10604n_01_13.zip $ wget http://www.liveabc.com/declaim/biz/10604/Normal/biz10604n_14_26.zip $ wget http://www.liveabc.com/declaim/biz/10604/Normal/biz10604n_27_30.zip
規則看起來就是:
biz
就是 Biz 互動英語
10604
就是民國壹零陸年的肆月份
01_13.zip
就是包含了01到13個音檔
上面最有趣的部份就是 01_13.zip
這個了,因為每次數字其實不太一定,
但又不想要登入去拿到明確的下載網址,該怎麼辦呢?
那就都試試看就好了,反正一個月只需要掃一次而已!
而且已知 aa_bb.zip
**,bb
** 一定大於 **aa
**,
就寫了一個自己抓出下載網址工具了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def biz (year=105 , month=9 ): if month == 0 : year -= 1 month = 12 begin = 1 end = begin hostname = 'http://www.liveabc.com' while True : url = '{h}/declaim/biz/{y}{m:02}/Normal/biz{y}{m:02}n_{b:02}_{e:02}.zip' .format (h=hostname, y=year, m=month, b=begin, e=end) r = requests.get(url) if r.status_code == 200 : yield url begin = end + 1 end = end + 1 if end > 36 : break
當然相同的規則也可以套用到其他本雜誌,所以比較完整的版本在這裡 。
Ivy League 常春藤英語 常春藤 英語也是出了好幾本英文雜誌,像是**解析英語
**這本,
個人認為是相當好的英語學習雜誌。前面說了,通常音檔都會放在網路上讓人下載,
而 常春藤 這邊是不用登入就可以聽的。
Ivy Analytical English 所以剛剛出現過的這句,在這邊依然適用喔。
但其實知道網址的話,光下載是不需要登入的。
例如底下是2017年5月12日的音檔網址,可以直接下載。
1 http://broadcast.ivy.com.tw/broadcast/BoardData/Ivy/mp3/6351_2.mp3
規則是:
6351
就是音檔的流水號,數字會遞增,但不一定只差1喔
6351_2
就是_2的有包含解說的音檔
那麼要怎麼知道雜誌上今天對應的音檔呢?
常春藤 通常周一到周六都會有音檔,而且是漸增的,所以可以把數字做排序的 list,
接著只要知道一個定位點,再根據跟這個定位點的集數 offset 回去找 list
中的數字就可以了。
graph LR
A02 -->|差1天| A03
A02 -->|差2天| A11
A02 -->|差3天| A12
A01 -.-> A02
A02 -.-> A03
A03 -.-> A11
A11 -.-> A12
大概是像這樣:(我 lambda )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 today = date.today() anchor = date(2014 , 12 , 1 ) origin = 4805 delta = today - anchor offset = delta.days - (delta.days // 7 ) for a in sys.argv: try : offset += int (a) except : pass hostname = 'http://broadcast.ivy.com.tw' r = requests.get(hostname + '/broadcast/BoardData/Ivy/mp3/' ) root = parse(StringIO(r.text)).getroot() mp3s = filter (lambda t: match(".*_2.mp3" , t.get('href' )), root.findall(".//a[@href]" )) mp3s = list (map (lambda t: (int (t.text[:-2 ]), hostname + t.get('href' )), mp3s)) mp3s = filter (lambda m: m[0 ] > origin - 1 , mp3s) mp3s = sorted (mp3s, key=lambda m: m[0 ]) if len (mp3s) < offset + 1 : sys.exit("not found in the page" ) else : print(mp3s[offset][1 ])