Windows Store API 可用于访问 Metro 和 Phone 应用程序信息。

9

请问是否有官方的微软API可以用于Metro和Phone应用程序,我们可以连接并获取有关应用程序、下载、发布者等信息。

我认为Live API仅适用于应用程序与Skydrive、Hotmail或Skype进行连接。

我可以看到很多网站在其网站上提供此类信息。

谢谢您的帮助。


请问您能否提供一个网站,用于显示Windows Phone应用程序信息的名称? - sunny
5个回答

12
这里是一篇我创建的博客文章,概述了整个过程:

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

首先,我们将从 Windows Store 网站的 Robots.txt 文件开始。http://apps.microsoft.com/robots.txt 网站使用 robots.txt 来指导网络爬虫如何行动,他们想让它们看到什么,以及不想让它们看到什么。

http://www.robotstxt.org/

网络机器人(也称为网络漫游者、爬虫或蜘蛛)是自动遍历网络的程序。搜索引擎如谷歌使用它们来索引网络内容,垃圾邮件发送者使用它们来扫描电子邮件地址,它们还有许多其他用途。
在这种情况下,我们感兴趣的是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 Store应用程序的网页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-cdc5d4b32d0e 和en-us等等...
现在让我们来看看有趣的东西,我们可以使用新发现的应用程序ID和地理信息调用一些网络服务。

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 这段代码是从一个XML文件中获取特定节点的值,并将其分配给相应的变量。其中,getElementsByTagName()方法用于获取指定标签名的元素列表,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

这段文本是一段JavaScript代码,其中通过获取XML文档中的元素标签和节点值来赋值给变量。
Windows Store不仅仅是应用程序,还有很多评论。目前Windows Store中的应用程序已经有超过210,000条评论。这些评论来自世界各地,因此您需要一些国家代码、方便的应用程序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

这段话更详细地列出了元素名称,因此我认为不需要进一步解释。您可以看到完整名称、显示名称和用户选择用来代表自己的图像。
接下来我们可以进行一些搜索...
在这里又变得有点神秘了,但是现在您应该已经习惯了。您可以从I元素中获取应用程序ID,然后从那里返回浏览服务f514d64b-8705-43b7-a400-c4f4f3dedfc0。
链接: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。
所以,这就是从Windows Store中提取大量信息的基础知识,然后您可以随心所欲地处理这些信息。如果您觉得这很有用和/或使用这些信息制作一些应用程序,并有其他额外信息要分享,请在评论中让我知道。

2

没有获取数据的API。如果您想提供这样的信息,您需要直接从网站上抓取数据并保存。已经执行类似操作的网站也是这样做的。


这意味着我需要解析HTML以获取所需数据吗? - sunny
是的,您需要自己从http://www.windowsphone.com/下载所有信息。 - Toni Petrina
在这种情况下,我们需要登录凭据并使用JavaScript解析HTML页面。 - sunny
哦,你想获取开发者页面?没有专门的API可以做到这一点。你可以使用WebRequests来模拟它,但如果你不熟悉这方面的知识,那会很困难。 - Toni Petrina
请在Google上查找翻译后的文本,因为此处无法提供足够的空间。 - Toni Petrina
显示剩余3条评论


1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接