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. So I'll be able to get some fixes and tweaks in soon. I haven't seen the number of downloads I would have liked to see on this game. I ran a paid Ad Duplex campaign for Tappy Dog and it didn't perform very well. I spent ~$350 in Ad Duplex credit on this campaign. It generated about 100-150 clicks per day toward the end when I had a $40 per day spend.

But that is only half the story... You can see here the time period where I was essentially spending $40 a day for 11 downloads.

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. Our design company vendor that we are working with have experience in Amazon's cloud and keep pushing that without reason.

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. It has features which require plugins for PDF viewing within the context of the application.

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.

Luckily for us, you can export your Google Calendar into an ICS file using Google Takeout.

Start by opening http://calendar.google.com  from your browser and login with your account.

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. Don't ask me for a code." check box, and the device will become a Trusted Device upon successful login.

You can also trust as many devices as you want there is no limit.

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. But what about when that website is itself a robust application? It should include shortcuts too, and that's what outlook.com achieves.

The shortcuts fall into several categories for Writing Email, Reading Email, GoTo, Email Actions, and Email list commands.

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... Anyhow.

When you manage your inbox, many times you know what to do with an email before you even open it.

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. One example of it's use would be if you get automatic emails with special offers that are only valid for a short period of time, you can have Outlook.com automatically clear out old versions of the email when the latest one arrives.

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. I was originally attracted to the event because of the awesome battle axe trophies, their really cool promo video, and I love to meet and compete.

Arrived at 8:30am after waking up at 2am to drive from New Jersey.

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.
Blog Archive
About Me
About Me
Labels
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.