轉自個人 Blog: Danny's Dreamhtml
以前看到有好友微博分享的一個開源項目是提供 WWDC 的客戶端的,同時還去抓取了字幕文件。
後來做者分享了一個開源項目:
github.com/rlwimi/wwww…
是把他項目裏的字幕文件抓取邏輯抽取出來了,以爲頗有意思,畢竟可能平時沒有那麼大段的時間能去看這些 session 的視頻,這樣先經過大概的字幕能瞭解到 session 中的內容,若是感興趣的話能夠再進行進一步的閱讀。git
這個東西頗有趣,感受就是 Swift 作的爬蟲,能夠結合項目作些有趣的東西。這裏是這個項目如何使用,和原理的介紹。
這邊我對該項目進行了一些修改,以前下載的直接就是 vtt 的文件,並無對文本文件進行處理,我把vtt格式調整了正常閱讀的模式,方便你們閱讀。
個人項目地址:github
以前項目的開發者,寫的 usage 至關簡單。
clone 項目以後,經過 Swift Package Manager(SPM) 來 build 項目
在項目下方執行
swift build
就會在你的項目的 .build/debug 目錄下方生成一個可執行文件 wwwwwweb
Usage:
wwwww [flags]
wwwww [command]
Available Commands:
meta Collect session information in a JSON file.
subtitle download WebVTT files, change to text
webvtt download WebVTT files
Flags:
-o, --output string output path
-s, --session string filter by session
-v, --verbose show work along the way
-y, --year int filter by year
Use "wwwww [command] --help" for more information about a command.複製代碼
上面是用法介紹,下面是幾個簡單的例子:json
./wwwww subtitle -s 204 -v -y 2017複製代碼
獲取 2017 年 204 session 的字幕,保存到當前目錄的 2017 文件夾swift
./wwwww meta -s 204 -v -y 2016複製代碼
獲取 2016 年 204 session 的 meta 信息,以 json 格式而且保存在當前目錄的 sessions.json 文件中bash
主要分爲框架和處理兩個部分
簡單的流程很簡單無非是 抓取數據 -> 處理數據session
經過 Guaka Framework 來實現 CLI(command-line interface)。框架
該框架能夠快速實現以下的效果:工具
git checkout -v "url"複製代碼
git 就是一個 CLI 而 checkout 就是他的一個子命令,並接受一個 String 做爲他的參數。
對應上述的命令能夠爲分爲:
└── git
├── checkout -v
└── push -f
└── ...複製代碼
在 Guaka 中代碼表現基本就是這樣子的:
let flag = Flag(longName: "v", value: false, description: "Show verbose")
let command = Command(usage: "git", flags: [flag]) { flags, args in
let showVerbose = flags.getBool(name: "v")
// args the positional arguments passed to the command
}複製代碼
上面就是 git 的 -v 指令,是否打印過程
安裝
經過 homebrew
> brew install oarrabi/tap/guaka複製代碼
```
guaka create papa
//會生成以下路徑
//├── Package.swift
//└── Sources
// ├── main.swift
// ├── root.swift
// └── setup.swift
```複製代碼
增長指令
給 papa 增長個子命令叫作 check
guaka add check複製代碼
增長 flag
增長 flag 就要去 Source 下面對應的 Swift 文件中修改。
編譯執行 Swift build
swift build
// 會編譯生成可執行文件
// .build/debug/papa --help複製代碼
.build/debug/papa check複製代碼
增長邏輯就在對應的 Swift 文件中增長 :)
wwwww 主要是使用了 Kanna 這個 XML/HTML 解析工具。
經過固定的參數連接請求 wwdc 的相關網頁,而後經過 Kanna 來解析獲取課程的信息,再拿到對應的字幕文件地址,轉換後保存本地。
具體的邏輯在項目中都寫的至關清晰,感興趣的話你們能夠 clone 下來查閱。
主要的解析腳本在 AppleComScraper.swift 文件中。
這一部分就不作過多的解釋了,查閱一下文檔就行啦,針對 html 文件的解析。
我 Fork 後修改的項目地址:
同時目前這邊我把 2017 的 session 都下載下來了,你們感興趣的話能夠自取,後期準備作個腳本推到 Kindle 上,以便上下班坐地鐵的時候看看。
Subtitiles | nums |
---|---|
App Frameworks | 50 |
Design | 20 |
Developer Tools | 15 |
Distribution | 5 |
Featured | 2 |
Graphics and Games | 9 |
Media | 15 |
System Frameworks | 19 |
原本想建一個個的連接的太麻煩了,(跑...