繁体   English   中英

我如何在 C# 中获取 Steam 创意工坊提交缩略图?

[英]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; }
}
①如果本文未解决您的问题,请点击查看与本文相关的问题
②如果本文未解决您的问题,请向程序员专用AI小助手提问
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM