![](/img/trans.png)
[英]C# - How do I get the URL of an icon from Steam Trading API (encoded)
[英]How do I get Steam Workshop Submission Thumbnail Image in C#?
我有一个来自 Steam Workshop 提交的 ID,如何在 C# 中获取缩略图?
public async static Task<Image> GetSteamWorkshopSubmissionThumbnail(string id)
{
}
这不是一个理想的解决方案,但这是我目前的方法:
工作原理: 获取提交 URL 的 HTML 页面,正则表达式匹配图像的 url,从 url 获取图像,返回它。
应该添加 CancellationToken arg。
理想的方法是使用官方 Steam API。我不知道该怎么做,所以这就是我们正在使用的。
如果有人发布更好的解决方案,我会将其标记为答案。
编辑:
改进以处理一些问题:
它可能只有缩略图,但没有其他图像,添加了另一个正则表达式来解析。
创意工坊提交的内容可能没有任何图像,现在可以处理。 (返回默认图像)
public async static Task<Image> GetSteamWorkshopThumbnail(string id)
{
try
{
string steamCommunityFileIDURL = "https://steamcommunity.com/sharedfiles/filedetails/?id=";
string url = steamCommunityFileIDURL + id;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
WebResponse response = request.GetResponse();
WebBrowser wb = new WebBrowser();
wb.DocumentStream = response.GetResponseStream();
wb.ScriptErrorsSuppressed = true;
HtmlDocument doc = wb.Document;
await Utilities.WaitUntil(() => doc.ActiveElement != null);
Regex workshopItemPreviewImageMainFilter = new Regex(@"(?<=workshopItemPreviewImageMain src="")https:\/\/steamuserimages-a.akamaihd.net\/ugc\/[0-9]*\/\w+\/");
Regex previewImageMainFilter = new Regex(@"(?<=workshopItemPreviewImageEnlargeable src="")https:\/\/steamuserimages-a.akamaihd.net/ugc/[0-9]+/\w+/");
string imageURL = workshopItemPreviewImageMainFilter.Match(doc.ActiveElement.OuterHtml).ToString();
if (imageURL == "")
{
imageURL = previewImageMainFilter.Match(doc.ActiveElement.OuterHtml).ToString();
}
if (imageURL == "") { imageURL = "https://community.cloudflare.steamstatic.com/public/images/sharedfiles/steam_workshop_default_image.png"; }
Image image = null;
using (WebClient webClient = new WebClient())
{
using (Stream stream = webClient.OpenRead(imageURL))
{
image = Image.FromStream(stream);
}
}
return image;
}
catch { return null; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.