success: add custom view
:
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
//
|
||||
// MatchesAPI.swift
|
||||
// LiquipediaMenu
|
||||
//
|
||||
// Created by Felix Förtsch on 08.10.18.
|
||||
// Copyright © 2018 Felix Förtsch. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftSoup
|
||||
|
||||
class MatchesAPI {
|
||||
|
||||
func fetchMatches(for game: String) -> [Match]? {
|
||||
let games = ["dota2", "starcraft", "starcraft2", "heroes", "counterstrike", "rocketleague", "rainbowsix", "overwatch"]
|
||||
if !games.contains(game) { return nil }
|
||||
if let data = fetchData(for: game) {
|
||||
return extractMatches(from: data)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private func fetchData(for game: String) -> String? {
|
||||
let url = constructURL(for: game)
|
||||
if let data = try? String(contentsOf: url) {
|
||||
return data
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private func extractMatches(from data: String) -> [Match]? {
|
||||
var tmp = data.replacingOccurrences(of: "\\n", with: "")
|
||||
tmp = tmp.replacingOccurrences(of: "\\", with: "")
|
||||
|
||||
do {
|
||||
let doc: Document = try SwiftSoup.parse(tmp)
|
||||
let ongoing: Element = try doc.getElementById("infobox_matches")!
|
||||
let matchString: Elements = try ongoing.getElementsByTag("table")
|
||||
|
||||
var matches = [Match]()
|
||||
for match in matchString {
|
||||
|
||||
let score = try match.getElementsByClass("versus").text()
|
||||
let split = score.split(separator: ":")
|
||||
let leftscore = String(split[0])
|
||||
let rightscore = String(split[1])
|
||||
|
||||
let newMatch = Match()
|
||||
newMatch.ongoing = true
|
||||
// TODO: Handle what happens when there is no twitch page. Currently it just opens Twicht main page.
|
||||
newMatch.streamLink = try "https://twitch.tv/" + match.getElementsByClass("timer-object").attr("data-stream-twitch")
|
||||
newMatch.league = try match.select("tr > td > div > div > a").text()
|
||||
newMatch.team1name = try match.getElementsByClass("team-left").text()
|
||||
newMatch.team1score = leftscore
|
||||
newMatch.team2name = try match.getElementsByClass("team-right").text()
|
||||
newMatch.team2score = rightscore
|
||||
matches.append(newMatch)
|
||||
}
|
||||
if matches.count == 0 {
|
||||
return nil
|
||||
}
|
||||
return matches
|
||||
} catch Exception.Error(_, _) {
|
||||
print("")
|
||||
return nil
|
||||
} catch {
|
||||
print("")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
private func constructURL(for game: String) -> URL {
|
||||
let baseURL = "https://liquipedia.net/"
|
||||
let query = "/api.php?action=parse&page=Liquipedia:Upcoming_and_ongoing_matches&format=json&prop=text"
|
||||
return URL(string: baseURL + game + query)!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user