以编程方式检查Windows Store应用程序更新

实际上,我试图find一种方法来检查是否有更新可用于Windowsapp store。 有没有办法用API来做到这一点? 谢谢 ! 埃萨姆

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应该默默更新应用程序,所以这可能甚至不需要,虽然它将被视为如果该更新将在应用程序启动之前。

让我知道如果你需要更多的帮助。

这篇文章中概述的Windows商店数据有一个无证的访问:

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

我在这里贴了它的文本,以防万一这个网站消失。 🙂

今天,我收到了一位开发人员对我的Windows应用程序应用程序轮盘的支持电子邮件的询问。 这非常令人耳目一新,我很乐意与其他开发者分享信息。 我越来越兴奋地看到他们会创造什么,而不是担心竞争的可能性。 所以我在这里和大家分享一下。 无论如何,这个开发人员想知道如何获得这个应用程序的信息,我会解释我如何访问,以及如何你也可以。

首先是一些自我推销,除了应用程序轮盘之外,我还在其他一些应用程序中使用这些信息。 开发人员信息中心提供一站式服务,您可以通过简单的点击来翻译每个评论,查看所有国家/地区的评论,Windows商店开发人员可以查看Windows应用商店中所有开发人员的目录(超过10000个)及其应用程序,最活跃审查人员最多产的应用程序审查人员和他们的评论目录,并在我自己的投资组合应用程序软件开发人员列出了所有其他应用程序,我已经在Windows商店发表,请给他们一些尝试。

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

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

网站使用robots.txt来指导网络爬虫如何行为,他们希望他们看到什么,他们不希望他们看到什么。

http://www.robotstxt.org/

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

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

http://www.sitemaps.org/

站点地图是网站管理员通知搜索引擎关于其网站上可用于抓取的页面的简单方法。 Sitemap最简单的形式就是一个XML文件,它列出了网站的URL以及关于每个URL的附加元数据(最后一次更新的时间,频率通常发生变化的频率以及与网站中其他URL相比有多重要)以便搜索引擎可以更智能地抓取该网站。

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

在单个文件里有数以千计的URL到Windows Store应用程序的网页。 如此PlayTo Receiver应用的网址: http://apps.microsoft.com/windows/en-us/app/playto-receiver/72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0e ://apps.microsoft.com/windows/en-us/app/playto-receiver/72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0e

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

现在,我们可以使用我们最新发现的应用程序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

这个网络服务提供了大量的信息,但是这些信息并没有被元素名称清楚地表达出来。 这是我对很多(不是全部)人的解释。

 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应用商店中有超过21万条评论。 这些评论来自世界各地,所以你需要一些国家代码,你的方便漂亮的应用程序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

这个对元素名称更具描述性,所以我没有看到任何需要进一步解释的地方。 您可以看到全名,显示名称,用户选择用来表示自己的图像。

接下来,我们可以做一些seaching … 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元素获取应用程序ID,然后从那里将其从浏览器中取回到浏览服务<I>f514d64b-8705-43b7-a400-c4f4f3dedfc0</I>

所以,你有它,从Windows商店拉出吨信息的基础知识,然后你可以做你喜欢的。 如果你发现这个有用和/或使一些应用程序利用这些信息,有一些额外的信息分享或以其他方式请让我知道在评论中。