diff options
| author | Ben Beltran <ben@nsovocal.com> | 2017-05-20 09:40:03 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2017-05-20 09:40:03 -0500 |
| commit | d852b84edc24f1f1bbf4c34aa359447970e732b0 (patch) | |
| tree | ca3abc17d3b5077db6b6a1e6d70e4702613eb427 /Sources/lyrics_engine.swift | |
| parent | 34ce0eef8e29cb156e6fb92fc3bf7ad13ff9598c (diff) | |
Improve comments in code
Diffstat (limited to 'Sources/lyrics_engine.swift')
| -rw-r--r-- | Sources/lyrics_engine.swift | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/Sources/lyrics_engine.swift b/Sources/lyrics_engine.swift index 9741a2c..85e4735 100644 --- a/Sources/lyrics_engine.swift +++ b/Sources/lyrics_engine.swift @@ -1,20 +1,28 @@ import Foundation import HTMLEntities -/// Looks for lyrics on the internet +// Given a track, attempts to fetch the lyrics from lyricswiki class LyricsEngine { + // URL of the API endpoint to use private let apiURL = "https://lyrics.wikia.com/api.php?action=lyrics&func=getSong&fmt=realjson" + + // Method used to call the API private let apiMethod = "GET" + + // Regular expxression used to find the lyrics in the lyricswiki HTML private let lyricsMatcher = "class='lyricbox'>(.+)<div" + // The track we'll be looking for private let track: Track // Fetches the lyrics and returns if found - var lyrics: String? { + var lyrics: String? + // Encode the track artist and name and finish building the API call URL + if let artist = track.artist.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { if let name: String = track.name.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { if let url = URL(string: "\(apiURL)&artist=\(artist)&song=\(name)") { @@ -46,13 +54,14 @@ class LyricsEngine { return lyrics } + // Initializes with a track init(withTrack targetTrack: Track) { track = targetTrack } - // Fetch the lyrics from the API and request / parse the page - + // Fetch the lyrics URL from the API, triggers the request to fetch the + // lyrics page private func fetchLyricsFromAPI(withURL url: URL, completionHandler: @escaping (String?) -> Void) { var apiRequest = URLRequest(url: url) @@ -83,8 +92,7 @@ class LyricsEngine { task.resume() } - // Fetch the lyrics from the page and parse the page - + // Fetch the lyrics from the page and send it to the parser private func fetchLyricsFromPage(withURL url: URL, completionHandler: @escaping (String?) -> Void) { var pageRequest = URLRequest(url: url) @@ -107,10 +115,11 @@ class LyricsEngine { task.resume() } - // Parses the wiki to obtain the lyrics - + // Parses the wiki to find the lyrics, decodes the lyrics object private func parseHtmlBody(_ body: String, completionHandler: @escaping (String?) -> Void) { + // Look for the lyrics lightbox + if let regex = try? NSRegularExpression(pattern: lyricsMatcher) { let matches = regex.matches(in: body, range: NSRange(location: 0, length: body.characters.count)) @@ -131,7 +140,6 @@ class LyricsEngine { } // Escapes the HTML entities - private func decodeLyrics(_ lyrics: String) -> String { let unescapedLyrics = lyrics.htmlUnescape() |