【问题标题】:Programmatically check Windows Store App update以编程方式检查 Windows 应用商店应用更新
【发布时间】:2012-12-18 15:01:23
【问题描述】:

我实际上是在尝试寻找一种方法来检查 Windows 应用商店应用程序是否有可用的更新。 有没有办法用 API 做到这一点? 谢谢 ! 埃萨姆

【问题讨论】:

  • 也想知道这个
  • 3 年后 - 现在有更好的解决方案吗?

标签: c# windows xaml windows-store-apps


【解决方案1】:

Windows 应用商店没有专门用于检查更新的 API。有一个相当简单的解决方法。

  var package = Windows.ApplicationModel.Package.Current;
        PackageVersion t = package.Id.Version;

这将为您提供用户正在运行的软件包版本。您可以使用它来检查您的一台服务器的当前版本。如果您还没有一个设置供您的应用程序使用,您不必做任何花哨的服务,您可以在您的网络服务器上使用一个简单的文本文件。说“myappversion.txt”。通过网络请求下载。

类似的东西。

        WebRequest req = WebRequest.Create(new Uri(@"http://myurl.com/MyAppversion.txt"));

        var result = await req.GetResponseAsync();

我知道这并不理想。还要考虑到 Windows 8.1 应该以静默方式更新应用程序,因此甚至可能不需要更新,尽管该更新是否会在应用程序启动之前进行。

如果您需要更多帮助,请告诉我。

【讨论】:

    【解决方案2】:

    本文中概述了对 Windows 应用商店数据的无证访问:

    http://jasonthomascarter.blogspot.com/2013/08/the-friendly-developers-guide-to.html

    我把它的文字贴在这里,以防网站消失。 :)

    今天,我收到了一位开发人员关于我的一个 Windows 应用商店应用程序轮盘赌的支持电子邮件的询问。这非常令人耳目一新,而且我非常愿意与其他开发人员分享信息。我更兴奋的是看到他们将创造什么,而不是担心竞争的潜力。所以在这里和大家分享一下。无论如何,这位开发人员想知道如何获取此应用信息,我将解释我如何访问该信息以及您也可以如何访问。

    首先进行一点自我宣传,除了 App Roulette,我在其他一些应用程序中使用了此信息。 Developer Dashboard 一站式商店,可查看来自所有国家/地区的所有应用程序评论,只需轻按一下即可翻译每条评论,Windows Store Developers Windows 商店中所有开发人员(超过 10000 名)及其应用程序的目录,最活跃Reviewers 最多产的应用审阅者及其评论的目录,在我自己的投资组合应用软件开发人员中列出了我在 Windows 应用商店中发布的所有其他应用,请尝试其中的一些。

    我们来了!首先,我们将从 Windows Store 网站的 Robots.txt 文件开始。

    http://apps.microsoft.com/robots.txt

    网站使用 robots.txt 来指导网络爬虫如何表现、他们希望他们看到什么以及他们不希望他们看到什么。

    http://www.robotstxt.org/

    Web 机器人(也称为 Web Wanderers、Crawlers 或 Spiders)是自动遍历 Web 的程序。 Google 等搜索引擎使用它们来索引 Web 内容,垃圾邮件发送者使用它们来扫描电子邮件地址,它们还有许多其他用途。

    在这种情况下,我们感兴趣的是 Sitemaps.xml 索引文件。http://apps.microsoft.com/windows/sitemap_index.xml

    http://www.sitemaps.org/

    站点地图是网站管理员通知搜索引擎有关其网站上可供抓取的网页的一种简便方法。在最简单的形式中,站点地图是一个 XML 文件,其中列出了站点的 URL 以及有关每个 URL 的附加元数据(上次更新时间、更改频率以及相对于站点中其他 URL 的重要性) ) 以便搜索引擎可以更智能地抓取网站。

    站点地图索引文件列出了每个单独的站点地图 XML 文件。在撰写本文时,apps.microsoft.com 网站有 141 个单独的站点地图 XML 文件。

    在各个文件中包含数千个指向 Windows 应用商店应用网页的 URL。例如 PlayTo Receiver 应用的 URL:http://apps.microsoft.com/windows/en-us/app/playto-receiver/72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0e

    这些应用程序的网页确实包含很多我们可以从 HTML 中抓取的信息,但我们可以做得更好......我们在这里获得的关键信息是应用程序 ID 以及这些应用程序 ID 发布的地理位置到店里。 例如:72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0een-us 等...

    现在到了好东西,我们可以使用我们新发现的 App Id 和地理信息调用一些 Web 服务。

    https://services.apps.microsoft.com/browse/6.2.9200-1/615/en-US_en-US/c/US/cp/10005001/Apps/72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0e

    通过此 Web 服务可以获得大量信息,但元素名称并没有清楚地说明这些信息。这是我对其中许多(不是全部)的解释,以帮助您入门。

    sSubCategoryName = rawXML.getElementsByTagName('Sc')[0].getElementsByTagName('N')[0].childNodes[0].nodeValue;
    sSubCategoryId = rawXML.getElementsByTagName('Sc')[0].getElementsByTagName('I')[0].childNodes[0].nodeValue;
    sHasTrial = rawXML.getElementsByTagName('Try')[0].childNodes[0].nodeValue;
    sDescription = rawXML.getElementsByTagName('D')[0].childNodes[0].nodeValue;
    sDeveloper = rawXML.getElementsByTagName('Dev')[0].childNodes[0].nodeValue;
    sWebsite = rawXML.getElementsByTagName('Ws')[0].childNodes[0].nodeValue;
    sSupport = rawXML.getElementsByTagName('Sws')[0].childNodes[0].nodeValue;
    sPrivacy = rawXML.getElementsByTagName('Pu')[0].childNodes[0].nodeValue;
    sCategoryName = rawXML.getElementsByTagName('C')[0].getElementsByTagName('N')[0].childNodes[0].nodeValue;
    sCategoryId = rawXML.getElementsByTagName('C')[0].getElementsByTagName('I')[0].childNodes[0].nodeValue;
    sPrice = rawXML.getElementsByTagName('P')[0].childNodes[0].nodeValue;
    sForegroundColor = rawXML.getElementsByTagName('Fg')[0].childNodes[0].nodeValue;
    sBackgroundColor = rawXML.getElementsByTagName('Bg')[0].childNodes[0].nodeValue;
    sAppIcon = rawXML.getElementsByTagName('Ico')[0].childNodes[0].nodeValue;
    sAppName = rawXML.getElementsByTagName('T')[0].childNodes[0].nodeValue;
    sPackageFamilyName = rawXML.getElementsByTagName('Pfn')[0].childNodes[0].nodeValue;
    sResourceId = rawXML.getElementsByTagName('R')[0].childNodes[0].nodeValue;
    sId = rawXML.getElementsByTagName('I')[0].childNodes[0].nodeValue;
    sCapabilities = sCapabilities + arrCapabilities[k].childNodes[0].nodeValue+",";
    sUpdate = rawXML.getElementsByTagName('Ud')[0].childNodes[0].nodeValue;
    sFeatures1 = rawXML.getElementsByTagName('Dbp')[0].childNodes[0].nodeValue;
    sFeatures2 = rawXML.getElementsByTagName('Dbp')[1].childNodes[0].nodeValue;
    sFeatures3 = rawXML.getElementsByTagName('Dbp')[2].childNodes[0].nodeValue;
    sFeatures4 = rawXML.getElementsByTagName('Dbp')[3].childNodes[0].nodeValue;
    sFeatures5 = rawXML.getElementsByTagName('Dbp')[4].childNodes[0].nodeValue;
    sFeatures6 = rawXML.getElementsByTagName('Dbp')[5].childNodes[0].nodeValue;
    sFeatures7 = rawXML.getElementsByTagName('Dbp')[6].childNodes[0].nodeValue;
    sFeatures8 = rawXML.getElementsByTagName('Dbp')[7].childNodes[0].nodeValue;
    sFeatures9 = rawXML.getElementsByTagName('Dbp')[8].childNodes[0].nodeValue;
    sScreenshot1 = rawXML.getElementsByTagName('Ss')[0].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot2 = rawXML.getElementsByTagName('Ss')[1].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot3 = rawXML.getElementsByTagName('Ss')[2].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot4 = rawXML.getElementsByTagName('Ss')[3].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot5 = rawXML.getElementsByTagName('Ss')[4].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot6 = rawXML.getElementsByTagName('Ss')[5].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot7 = rawXML.getElementsByTagName('Ss')[6].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot8 = rawXML.getElementsByTagName('Ss')[7].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sScreenshot9 = rawXML.getElementsByTagName('Ss')[8].getElementsByTagName('U')[0].childNodes[0].nodeValue
    sCaption1 = rawXML.getElementsByTagName('Ss')[0].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption2 = rawXML.getElementsByTagName('Ss')[1].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption3 = rawXML.getElementsByTagName('Ss')[2].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption4 = rawXML.getElementsByTagName('Ss')[3].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption5 = rawXML.getElementsByTagName('Ss')[4].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption6 = rawXML.getElementsByTagName('Ss')[5].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption7 = rawXML.getElementsByTagName('Ss')[6].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    sCaption8 = rawXML.getElementsByTagName('Ss')[7].getElementsByTagName('Cap')[0].childNodes[0].nodeValue
    

    Windows 应用商店不仅仅是应用程序,还有评论,而且还有很多。目前,Windows 应用商店中有超过 210,000 条应用评论。这些评论来自世界各地,所以你需要一些国家代码,你方便的花花公子 App Id 并注意最后的 pn/1,你会发现这个服务每页只返回 10 条评论,只是增加将此值设置为 pn/2、pn/3 等。直到您的评论用完。

    var arrCounntryCodes = ["AE", "AR", "AT", "AU", "BE", "BG", "BH", "CA", "CH", "CL", "CN", "CO", "CR", "CY", "CZ", "DE", "DK", "DZ", "EE", "EG", "ES", "FI", "FR", "GB", "GR", "HK", "HR", "HU", "ID", "IE", "IL", "IN", "IQ", "IT", "JO", "JP", "KW", "KZ", "LB", "LK", "LT", "LU", "LV", "LY", "MA", "MT", "MX", "MY", "NL", "NO", "NZ", "OM", "PE", "PH", "PK", "PL", "QA", "RO", "RS", "RU", "SA", "SE", "SG", "SI", "SK", "TH", "TN", "TR", "TT", "UA", "US", "UY", "VE", "VN"];
    

    https://services.apps.microsoft.com/4R/6.2.9200-1/1/en-US/m/US/Apps/f514d64b-8705-43b7-a400-c4f4f3dedfc0/Reviews/all/s/date/1/pn/1

    这个元素名称更具描述性,因此我认为没有必要对此进行进一步解释。您可以看到全名、显示名称、用户选择用来代表自己的图像。

    接下来我们可以做一些搜索...https://services.apps.microsoft.com/search/6.2.9200-1/615/en-US_en-US/m/US/c/US/il/en-US/cp/10005001/query/cid/0/pf/1/pc/0/pt/x64/af/0/lf/0/s/0/2/pn/0?phrase=Software Developer

    这里又有点神秘了,但现在你应该已经习惯了。您可以从 I 元素中获取 App ID 并将其从那里带回浏览服务<I>f514d64b-8705-43b7-a400-c4f4f3dedfc0</I>

    您已经掌握了从 Windows 应用商店中提取大量信息的基础知识,然后您就可以随心所欲地使用这些信息了。如果您觉得这很有用和/或利用这些信息制作了一些应用程序,请分享一些其他信息,否则请在 cmets 中告诉我。

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多