diff --git a/src/XIVSync.Net.UnitTests/Test.cs b/src/XIVSync.Net.UnitTests/Test.cs index 8c2124d..f4c51ae 100644 --- a/src/XIVSync.Net.UnitTests/Test.cs +++ b/src/XIVSync.Net.UnitTests/Test.cs @@ -31,5 +31,13 @@ namespace XIVSync.Net.UnitTests Assert.AreEqual(res.Ok, 1); } + + [Test] + public void DoesGetServersWork() + { + var res = new LodestoneApi().GetServers(); + Assert.IsTrue(res.Any()); + + } } } diff --git a/src/XIVSync.Net/LodestoneApi.cs b/src/XIVSync.Net/LodestoneApi.cs index 835b3a9..0aec00a 100644 --- a/src/XIVSync.Net/LodestoneApi.cs +++ b/src/XIVSync.Net/LodestoneApi.cs @@ -1,4 +1,10 @@ -using System.Net; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using CsQuery; +using CsQuery.ExtensionMethods; +using CsQuery.Web; using Newtonsoft.Json; using RestSharp; @@ -6,23 +12,38 @@ namespace XIVSync.Net { public class LodestoneApi { - readonly RestClient _client = new RestClient("http://xivsync.com/"); - public LodestoneSearch SearchCharacter(string character, string server) + + public LodestoneSearch SearchCharacter(string character, string server, int timeout = 90000) { - + var client = new RestClient("http://xivsync.com/") {Timeout = timeout}; var req = new RestRequest("search/character", Method.GET); req.AddParameter("name", character); req.AddParameter("server", server); - var response = _client.Execute(req); + var response = client.Execute(req); return response.StatusCode != HttpStatusCode.OK ? null : JsonConvert.DeserializeObject(response.Content); } - public LodestoneCharacter GetCharacter(string characterId) + public LodestoneCharacter GetCharacter(string characterId, int timeout = 90000) { + var client = new RestClient("http://xivsync.com/") {Timeout = timeout}; var req = new RestRequest("character/get"); req.AddParameter("lodestone", characterId); - var response = _client.Execute(req); + var response = client.Execute(req); return response.StatusCode != HttpStatusCode.OK ? null : JsonConvert.DeserializeObject(response.Content); } + + public IEnumerable GetServers(double timeoutSeconds = 90) + { + var dom = CQ.CreateFromUrl("http://na.finalfantasyxiv.com/lodestone/worldstatus/", new ServerConfig() {TimeoutSeconds = timeoutSeconds}); + var servers = new List(); + foreach (var node in dom[".worldstatus_1"]) + { + var serverName = node.ChildNodes.First(a => a.NodeName == "TD").FirstElementChild.InnerText.Trim(); + var online = node.ChildNodes.Last(a => a.NodeName == "TD").FirstElementChild.InnerText.Trim(); + servers.Add(new Server() {World = serverName, Online = online.Contains("Online")}); + + } + return servers; + } } } diff --git a/src/XIVSync.Net/Server.cs b/src/XIVSync.Net/Server.cs new file mode 100644 index 0000000..90bbb2a --- /dev/null +++ b/src/XIVSync.Net/Server.cs @@ -0,0 +1,8 @@ +namespace XIVSync.Net +{ + public class Server + { + public string World { get; set; } + public bool Online { get; set; } + } +} diff --git a/src/XIVSync.Net/XIVSync.Net.csproj b/src/XIVSync.Net/XIVSync.Net.csproj index 94d2bfc..98fc3e8 100644 --- a/src/XIVSync.Net/XIVSync.Net.csproj +++ b/src/XIVSync.Net/XIVSync.Net.csproj @@ -31,6 +31,10 @@ 4 + + ..\..\packages\CsQuery.1.3.4\lib\net40\CsQuery.dll + True + ..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll True @@ -53,6 +57,7 @@ + diff --git a/src/XIVSync.Net/packages.config b/src/XIVSync.Net/packages.config index fe82db7..c530211 100644 --- a/src/XIVSync.Net/packages.config +++ b/src/XIVSync.Net/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file