Today I received an inquiry from a fellow developer on the support email for one of my Windows Store apps App Roulette. That was pretty refreshing, and I'm pretty open to sharing information with other developers. I get more excited to see what they will create than worried over the potential for competition. So I'm here to share with you all. Anyhow, this developer was wondering how to get this App information and I'll explain how I access that and how you can too.

First a little self promotion, in addition to App Roulette I use this information in a few other apps. Developer Dashboard a one stop shop to view the reviews from all countries for all of your apps with a simple tap to translate each review, Windows Store Developers a directory of all the developers in the Windows Store (over 10000) and their apps, Most Active Reviewers a directory of the most prolific app reviewers and their reviews, and in my own portfolio app Software Developer which lists out all the other apps I have published in the Windows Store, please give some of them a try.

Here we go! First we will start with Robots.txt file for the Windows Store website. http://apps.microsoft.com/robots.txt

Websites use robots.txt to guide web crawlers on how to behave, what they want them to see, and what they don't want them to see.

http://www.robotstxt.org/

Web Robots (also known as Web Wanderers, Crawlers, or Spiders), are programs that traverse the Web automatically. Search engines such as Google use them to index the web content, spammers use them to scan for email addresses, and they have many other uses.


In this case the Sitemaps.xml index file is what we are interested in. http://apps.microsoft.com/windows/sitemap_index.xml



Sitemaps are an easy way for webmasters to inform search engines about pages on their sites that are available for crawling. In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site.


The Sitemap Index file lists out each of the individual Sitemap XML files. As of this writing, the apps.microsoft.com website has 141 individual Sitemap XML files. 




Inside the individual files are thousands of URL's to the web pages of Windows Store apps. Such as this URL to the PlayTo Receiver app:





These webpages for the apps do include a good bit of information that we could scrape from the HTML but we can do better.... The key information we are getting here is the App ID's and which geographies those App ID's are published to in the store. 
For example: 
72a6ba17-2d4e-4a1c-bcfb-cdc5d4b32d0e 
and en-us etc...




And now to the good stuff, there a few web services we can call using our newly found App Id's and geography information. 





There is plenty of information available through this web service but it's not clearly spelled out by the element names. Here is my interpretation of many (not all) of them to start you off. 

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




There is more to the Windows Store than just apps, there are also reviews, and lots of them. There are currently over 210,000 reviews for apps in the Windows Store. These reviews come from all over the world, so you'll need some country codes, your handy dandy App Id's and pay attention to the pn/1 at the end, you will find that this service only returns 10 reviews per page, just increment this value to pn/2, pn/3 etc.. until you run out of reviews. 


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"];




This one is much more descriptive with the element names, so I don't see any need for further explaination of this. You can see the full name, display name, the image the user has chosen to represent themselves with. 


Next up we can do a little bit of seaching...

Here it gets a little cryptic again, but by now you should be used to it. You can get the App ID from the I element and take it from there back to the browse service <I>f514d64b-8705-43b7-a400-c4f4f3dedfc0</I>




So there you have it, the basics of pulling tons of information out of the Windows Store that you can then do what you please with. If you find this useful and/or make some apps utilizing the information, have some additional information to share or otherwise please let me know in the comments.




UPDATE 6/27/14:  We are now in the last few days of the judging period for the Publish Windows Contest. Tappy Dog also was declared the Microsoft's Best App of the Month for May 2014. The update freeze is almost over, had I pushed any updates before 6/30 I would get a 10% penalty from the contest.

Help me sell Azure to my team. We are currently moving off of our old CMS system Microsoft Content Management Server 2001, and are rebuilding our environment and using Sitefinity as our CMS. I have put together the following argument for the choice of Azure as I feel it is the best.

Today I encountered a situation at work building a public kiosk with a touchscreen running Windows 8. Our vendor has built an HTML5 Web Application that is intended to be running in Desktop Internet Explorer Kiosk Mode on 46" pedestal mounted touch screens in our sales offices - no keyboards.

Do you want to import your Google Calendar to Outlook.com?

I've got email addresses and calendars up the Wazoo, wherever that is, and I've been trying to consolidate. One thing I wanted to do was bring my Google Calendar events over to Outlook.com to simplify my life.

Outlook.com enables Trusted Devices to access sensitive information with single step authentication.

A device can be marked as trusted by selecting the check box when you're prompted to enter a security code to verify your identity. Select the "I sign in frequently on this device.

A lot of tasks on  Outlook.com can be completed using the keyboard. Many people think of shortcuts as something to use within an installed application on their computer but not often are they thought of when it comes to websites.

I'm a fan of a good User Interface, and I have a nickname for bad ones that make you move, click, and scroll way too much to get simple tasks done - Carpal Tunnel Systems. The first system I had called this was a CMS (Content Management System) so the acronym made sense more in that context...

Outlook.com's sweep feature allows you to clean up your inbox and keep it that way automatically.

Wait... what? yeah.

This doesn't just blindly delete all your stuff.

On October 12th and 13th I attended the Paypal Battlehack in Washinton D.C. which was part of a 10 city world tour of hackathons. It was a well run hackathon which made for a great experience and I met some really great competitors during the event.

Today I received an inquiry from a fellow developer on the support email for one of my Windows Store apps App Roulette. That was pretty refreshing, and I'm pretty open to sharing information with other developers.

I'm here to call out the Windows Bloggers and Journalists who are failing the platform by leaving valuable app discovery opportunities on the table.

I'm one to play favorites, and who isn't? That's why it's called a favorite, am I right? And my favorite contract for Windows 8 is the PlayTo contract.

No, this isn't another one of those psycho gun incidents, Run and Shoot is a multi-player free for all shooting game for Windows 8. It uses Windows Phone controllers over a Wireless Local Area Network and I built it for the Windows 8 Hackathon in Malvern, PA on September 15th.

My latest Windows 8 app "Tweaker" WON the Windows 8 Online App-a-Thon recently held by codercharts.com

...and is now available in the Windows Store!!![http://apps.microsoft.com/webpdp/en-us/app/tweaker/330612cd-83b0-4b8b-9cd5-6e196dfc980d]

Very proud to be one of the first 1000 apps in the Windows

I have emerged victorious in the Fun and Most Weird category of the Zappos.com Gifting Hack-a-thon Hack-a-long. My entry which I have described previously was a Email gifting mechanism through which you could send your friends the world famous Zappos.com Core values.

I started to frequent this website WindowsPhoneParent.com because I love Windows Phone and I'm a parent too. They do a really great job of finding and reviewing great apps for both kids and parents, I would go as far as saying this is THE BEST source for kids/parents app information.

I'm a Windows Phone developer and I experience a lot more earnings with my ad supported apps than I do with my paid apps. Perhaps this is my apps or the users on the environment, whatever the reason I like money.

February 29th, 2012

My dog likes to dig holes...

We recently had one of our Marketing folks request to make the 'Coming Soon' items in our product result lists more prominant. But no suggestion was made on how to do so. For years I have been trying to get my company to use testing data to drive decisions on changes to our website.

I recently participated in the Zappos.com Hack-a-Thon Hack-a-Long and created a litte web application leveraging the Zappos.com API. Their was a theme for the Hack-a-Thon and it was 'gifting'.

And here's why. First they are pretty damn affordable, for example they have a Thanksgiving special going on right now where you get your hosting package for $9.95 US for the year. And you might say yeah, even at that price I can get the same thing elsewhere.

3.14159265358979323846264338327950288419716939937510582097494459230781640628...

...you know the rest. It's Pi. It's great. And now you can work on remembering to rest of it with 'Digits of Pi' an educational app for Windows Phone 7. It supports the first 100,000 digits of Pi, so have a try.

My PR for the half marathon distance. Two weeks prior I had run the Philadelphia Half Marathon with a goal of 2 hours, I ran 2 hours 7 minutes. Angrily I ran this race to try and redeem myself.

Here is the iRule we came up with to handle our mobile device detection and site redirection.

Here we look at the need to be able to place some formatted content, that is somewhat one-off in nature on a page.

For example, the "Look what's new at the Help Desk!!!" section of the CIS Main page on the old Hovworks site.

We get a lot of competitors visiting our website, and I thought it would be interesting to keep an eye on them.

Using a simple filter in Google Analytics you can identify traffic originating at your competitors offices if they identify themselves via the ISP organization.

One of the ways I use Google Analytics is to monitor the load balancing of my web servers. I set up a new profile in Analytics and set my filters to accept special tags I have output by the webservers each declaring its name.

The Major League Yabbo's [Jess & Damian Bomm, Greg Braun, Jason Carter, and ???] ran the Beast of the East mud run at McGuire AFB ON 9/10/11. It was my first mud run and it was fun, nobody got hurt and it made for some good memories.

I attended the George Sheehan classic for my second time in 2011, it wasn't quite was I was expecting. I had so much fun my first time here that I'm really disappointed the second time wasn't as good. My problem is I became a father and had my daughter in a running stroller.

Here is the 3d Papercraft Mask I made for myself for Halloween.

A big shout out to ddi7i4d over at http://www.instructables.com/id/Real-Life-Big-Head-Mode/ for the inspiration and instructions.

I went out fast at this race, I did my fastest ever 5k out of the gate. I was trying to run under 2 hours for this race, however that pace proved to be too much as I had to walk shortly after mile 4 because I felt dizzy. I'm in this for fun not to die.

How to maintain Consistent Session State with Javascript Cookie Rectification

If a user utilizes the back button, the cookie value is not updated by the normal browser behavior.

December 31st, 2009

Mapquest Enterprise API Map Detail DT Picker

We had a stakeholder request to display 'cleaner' maps on the website. What does that even mean? Lucky for them i had some cartography training from back in my college days and was able to achieve a desireable result.

Blog Archive
About Me
About Me
Labels
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.