improve wiki parsing (#532)
This commit is contained in:
parent
03860cca86
commit
738c0ce386
|
@ -91,19 +91,25 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
|
|||
}
|
||||
|
||||
// parse other fields
|
||||
string name = node.Descendants("td").FirstOrDefault()?.InnerText?.Trim();
|
||||
string[] ids = this.GetAttribute(node, "data-id")?.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray() ?? new string[0];
|
||||
int? nexusID = this.GetNullableIntAttribute(node, "data-nexus-id");
|
||||
int? chucklefishID = this.GetNullableIntAttribute(node, "data-chucklefish-id");
|
||||
string githubRepo = node.GetAttributeValue("data-github", null);
|
||||
string customSourceUrl = node.GetAttributeValue("data-custom-source", null);
|
||||
string githubRepo = this.GetAttribute(node, "data-github");
|
||||
string customSourceUrl = this.GetAttribute(node, "data-custom-source");
|
||||
string customUrl = this.GetAttribute(node, "data-custom-url");
|
||||
|
||||
// yield model
|
||||
yield return new WikiCompatibilityEntry
|
||||
{
|
||||
ID = ids,
|
||||
Name = name,
|
||||
Status = status,
|
||||
NexusID = nexusID,
|
||||
ChucklefishID = chucklefishID,
|
||||
GitHubRepo = githubRepo,
|
||||
CustomSourceUrl = customSourceUrl,
|
||||
CustomUrl = customUrl,
|
||||
UnofficialVersion = unofficialVersion
|
||||
};
|
||||
}
|
||||
|
@ -114,12 +120,23 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
|
|||
/// <param name="attributeName">The attribute name.</param>
|
||||
private int? GetNullableIntAttribute(HtmlNode node, string attributeName)
|
||||
{
|
||||
string raw = node.GetAttributeValue(attributeName, null);
|
||||
string raw = this.GetAttribute(node, attributeName);
|
||||
if (raw != null && int.TryParse(raw, out int value))
|
||||
return value;
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>Get a strings attribute value.</summary>
|
||||
/// <param name="node">The HTML node.</param>
|
||||
/// <param name="attributeName">The attribute name.</param>
|
||||
private string GetAttribute(HtmlNode node, string attributeName)
|
||||
{
|
||||
string raw = node.GetAttributeValue(attributeName, null);
|
||||
if (raw != null)
|
||||
raw = HtmlEntity.DeEntitize(raw);
|
||||
return raw;
|
||||
}
|
||||
|
||||
/// <summary>The response model for the MediaWiki parse API.</summary>
|
||||
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Local")]
|
||||
[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Local")]
|
||||
|
|
|
@ -3,6 +3,12 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
|
|||
/// <summary>An entry in the mod compatibility list.</summary>
|
||||
public class WikiCompatibilityEntry
|
||||
{
|
||||
/// <summary>The mod's unique ID. A mod may have multiple current IDs in rare cases (e.g. due to parallel releases or unofficial updates).</summary>
|
||||
public string[] ID { get; set; }
|
||||
|
||||
/// <summary>The mod's display name.</summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>The mod ID on Nexus.</summary>
|
||||
public int? NexusID { get; set; }
|
||||
|
||||
|
@ -15,6 +21,9 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
|
|||
/// <summary>The URL to a non-GitHub source repo.</summary>
|
||||
public string CustomSourceUrl { get; set; }
|
||||
|
||||
/// <summary>The custom mod page URL (if applicable).</summary>
|
||||
public string CustomUrl { get; set; }
|
||||
|
||||
/// <summary>The version of the latest unofficial update, if applicable.</summary>
|
||||
public ISemanticVersion UnofficialVersion { get; set; }
|
||||
|
||||
|
|
Loading…
Reference in New Issue