以编程方式检查Windows应用商店应用更新

时间:2012-12-18 15:01:23

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

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

2 个答案:

答案 0 :(得分:4)

Windows商店没有专门用于检查更新的API。有一个相当容易的工作。

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

这将为您提供用户正在运行的包版本。您可以使用它来检查当前版本的服务器之一。如果您还没有可以使用的应用程序设置,则不必进行奇特的服务,您可以在Web服务器上使用简单的文本文件。说" myappversion.txt"。通过网络请求下载。

类似的东西。

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

        var result = await req.GetResponseAsync();

我知道这不理想。另外还要考虑Windows 8.1应该默默地更新应用程序,因此即使在应用程序启动之前更新,也可能不需要这样做。

如果您需要更多帮助,请与我联系。

答案 1 :(得分:2)

对此帖中列出的Windows应用商店数据进行了无证访问:

  

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

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

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

首先是一个小小的自我推广,除了App轮盘我在其他几个应用程序中使用这些信息。开发人员仪表板一站式商店查看所有国家/地区对所有应用的评论,只需点击即可翻译每个评论,Windows应用商店开发人员可以访问Windows应用商店(超过10000个)中所有开发人员的目录及其应用,最活跃审核者了解最多产的应用评论者及其评论的目录,并在我自己的投资组合应用软件开发者中列出我在Windows商店中发布的所有其他应用,请尝试一些。

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

  

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

网站使用robots.txt来指导网络抓取工具如何表现,他们希望他们看到什么,以及他们不希望他们看到什么。

  

http://www.robotstxt.org/

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

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

  

http://www.sitemaps.org/

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

站点地图索引文件列出了每个站点地图XML文件。在撰写本文时,apps.microsoft.com网站有141个单独的Sitemap 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 Store中的应用程序有超过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商店中提取大量信息的基础知识,然后你可以随心所欲地做。如果您发现这个有用和/或使某些应用程序利用这些信息,请提供一些其他信息以供分享,或者在评论中告诉我们。