WWDC 2017 字幕抓取 & Guaka 介紹

轉自個人 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

CLI 框架介紹 & Guaka 指北

經過 Guaka Framework 來實現 CLI(command-line interface)。框架

該框架能夠快速實現以下的效果:工具

git checkout -v "url"複製代碼

git 就是一個 CLI 而 checkout 就是他的一個子命令,並接受一個 String 做爲他的參數。

對應上述的命令能夠爲分爲:

  • git 主命令
  • checkout 子命令
  • -v/--v 命令所接收的 flag
└── 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 指令,是否打印過程

快速上手

  1. 安裝
    經過 homebrew

    > brew install oarrabi/tap/guaka複製代碼
  2. 新建工程
    假設咱們要創建一個 papa 的指令
    cd 到須要創建工程的目錄
```
guaka create papa 
//會生成以下路徑
//├── Package.swift
//└── Sources
//    ├── main.swift
//    ├── root.swift
//    └── setup.swift 
```複製代碼
  1. 增長指令
    給 papa 增長個子命令叫作 check

    guaka add check複製代碼
  2. 增長 flag
    增長 flag 就要去 Source 下面對應的 Swift 文件中修改。

  3. 編譯執行 Swift build

    swift build
     // 會編譯生成可執行文件
     // .build/debug/papa --help複製代碼
  4. 運行可執行文件
    .build/debug/papa check複製代碼

增長邏輯就在對應的 Swift 文件中增長 :)

解析

wwwww 主要是使用了 Kanna 這個 XML/HTML 解析工具。
經過固定的參數連接請求 wwdc 的相關網頁,而後經過 Kanna 來解析獲取課程的信息,再拿到對應的字幕文件地址,轉換後保存本地。
具體的邏輯在項目中都寫的至關清晰,感興趣的話你們能夠 clone 下來查閱。

主要的解析腳本在 AppleComScraper.swift 文件中。

這一部分就不作過多的解釋了,查閱一下文檔就行啦,針對 html 文件的解析。

字幕文件

我 Fork 後修改的項目地址:

wwwww

同時目前這邊我把 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

原本想建一個個的連接的太麻煩了,(跑...

相關文章
相關標籤/搜索