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'.
Gifting. Gifting is a combination of the words Giving - the act of To Give and Lefting - German for the opposite of Righting. Wait, our lawyers just informed me that is not correct. Okay, let's just say that scientists may never agree on the actually definition of Gifting. Gifting is our theme for this Hack-a-long contest. We are looking for anything that leverages the Zappos API and falls into the theme of Gifting. We aren't even saying the final product has to be electronic...

So what to build? There are a lot of neat things in their API, searches, products, images, statistics on the latest purchases and even their core values. So I decided I would allow people to give each other a core value via email from my web form. If you don't know, Zappos.com is pretty famous for their core values which are at the heart of it being such a great and fun place to work (from what I hear).

So here is what I built.
http://www.ondemandcommercials.com/zapposcorevaluesgifting.html

The recipient of the Core Value Gift will get an email  similar to the following with one of their core values.
Deliver WOW Through Service

At Zappos, anything worth doing is worth doing with WOW.
WOW is such a short, simple word, but it really encompasses a lot of things. To WOW, you must differentiate yourself, which means doing something a little unconventional and innovative. You must do something that's above and beyond what's expected. And whatever you do must have an emotional impact on the receiver. We are not an average company, our service is not average, and we don't want our people to be average. We expect every employee to deliver WOW. Whether internally with co-workers or externally with our customers and partners, delivering WOW results in word of mouth. Our philosophy at Zappos is to WOW with service and experience, not with anything that relates directly to monetary compensation (for example, we don't offer blanket discounts or promotions to customers). We seek to WOW our customers, our co-workers, our vendors, our partners, and in the long run, our investors.
Want to REGIFT this Value? - Want to send a different Core Value?"


As you can see, I even allow REGIFTING! :) On another note, in the Zappos.com Core Values API there exist a few easter eggs. For example, they only have 10 core values. But like in Spinal Tap, the numbers just go to 11. Because you know like your up on stage right and you have a regular amplifier and you're rocking out at 10. Where can you go from there?

We only have 10 core values but the numbers all go to 11 Because 11 is always better 10 http://www.youtube.com/watch?v=EbVKWCpNFhY
The contest 3 categories and has some prizes available for each category.

• Best Overall Application: $100 value ($100.00 Zappos.com electronic gift certificate)
• Most Fun and Weird Application: $100 value ($100.00 Zappos.com electronic gift certificate
• Best Mash-up Application (integrating other APIs or apps): $100 value ($100.00 Zappos.com electronic gift certificate There were also a few partner API's that are also offering prizes for using the Zappos.com API and the partner API in the entry.

Some of those partners were also going to offer up some side prizes -

Rovi:  APIs for Multi-Media
TokBox: Drop in some video chat with Open-Tok
SendGrid: Get your email on!
Context IO: API for quick and easy indexing of email inboxes.
Twilio - make almost anything SMS or Voice capable using Twilio APIs and tools.



My Zappos.com Hack-a-Thon entry hopefully falls into all 3 categories. I used the SendGrid API in my entry as well, maybe I can win a side prize too.

"SendGrid's cloud-based email infrastructure relieves businesses of the cost and complexity of maintaining custom email systems. SendGrid provides reliable delivery, scalability and real-time analytics along with flexible APIs that make custom integration a breeze."

It was pretty easy to use their API, the only problem I had was I needed to have my hosting provider open up port 587 so I could communicate outbound over SMTP. That was no problem, as my hosting provider Siteground.com  always comes through for me. I highly recommend them. :)


They haven't judged the hack-a-thon, so I don't have much to say about it right now. If I win something I'll be sure to post an update.


  1. 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.
     
     
    I also included Tappy Dog in my Windows App Hunt promotion. I'm giving away an Xbox One and a Nokia Lumia phone to celebrate my achievement of 1 million downloads of my apps on Windows Phone. Check it out, http://www.windowstherapy.com you have until July 14th to enter.
     
     
    ------------------------------------And..... Back to the original post ---------------------------------------------------------


    Tappy Dog is the BEST real-time multiplayer dog racing game on the Windows Platform.


    Available from the Windows Store and Windows Phone Store (Requires Windows Phone 8.1)

    Tappy Dog?


    Tappy Dog brings the excitement of dog racing to Windows. Tap your way to victory in this racing game that is fun for the whole family. Reminiscent of the boardwalk and carnival horse racing games, we present dog racing, and rather than rolling balls into holes, you tap the tiles to move your dog. Green goes fast, yellow goes slow, red goes BACKWARDS!
     
     

    Built for \\ Publish\



     I built Tappy Dog for the https://publishwindows.com/ contest.

    "Publish an app, win some prizes, and score bragging rights. Fans. Fame. Free stuff. Whether you’re porting an existing app or creating a fresh one, publish your Windows or Windows Phone app and enter for a chance to win..."

    There is a global online competition which ends on June 1st, and there were events at over 60 locations worldwide, including the event I attended in New York City.
    They awarded prizes in the following categories:
    • Best Windows 8.1 App
    • Best Windows Phone 8.1 App
    • Best Cross Platform App
    • Breakthrough in App Innovation and Design
    My app is a Universal app for the Windows Platform targeting both Windows and Windows Phone.
    It is a WinJS project the utilizes SignalR to support the real-time multiplayer action. I have a C# SignalR project running on Azure Websites which should provide easy scalability if my game becomes popular.  


    Windows Features

    Not only is Tappy Dog a game, it is a game that is designed with the Windows Platform in mind. Specific features of the platform that have been leveraged by the game include:
    • Live Tile Statistics Display
    • Designed for Keyboard (A,S,D,F), Touch, Mouse or Pen input
    • Share your stats and challenge your friends with the Share Contract
    • Real-time gameplay powered by ASP.Net SignalR 
    • Metered Connection detection enters a low bandwidth mode to prevent unwanted data charges
    • Hosting and scalability provided by Azure Websites

    The Event

     This event was held at Microsoft's Times Square office on a Friday and Saturday. We had plenty of coffee, tea and other beverages available throughout the event, we had pizza (With Toppings! [I love the hot wings pizza]), sliders and hotdogs were served, as was lasagna. There were healthier options available as well including a variety of salads and some dishes I would not be able to name. There was a live stream of cameras from other events around the world, but unfortunately we didn't have a camera. Xbox Music playlists were also available from other locations but not here. I also think I saw some cotton candy machines and fresh popcorn being made elsewhere but I guess I was in Times Square and could have had anything I wanted just outside the door, but at what price? :)

    My demo went well, I didn't encounter any of the error scenario's I am working to debug in my app, and I was actually able to juggle 4 devices through my demo! I had an ultrabook on the podium with me, my Nokia Lumia 920 Windows Phone, and 2 Surface RT's. I started my demo on the ultrabook and explained the basic premise and 'Windows' features of my game. From there I began connecting devices to the racetrack and handing them off to the judges and an attendee for an impromptu race which was a big hit. I've done multi-device demo's before and they can be VERY difficult to manage alone. Everything held together and we had a good time.

    We have a Winner!!!

    After the judges saw all of the apps and deliberated for a bit the results were announced. I won -

     1st Place in the App Innovation and Design category!

    For this I was awarded with a Nokia Lumia 1520 phone. A six inch 1080p display, 20 megapixel camera, and some of the greatest internals available on any Windows Phone. Not a bad prize. And I'm still in the running for the global competition.


    Going Global

    I don't plan to stop at New York City, I'm continuing to improve my app as we speak to meet the criteria being judged upon in the global contest.


    Performance/Public Appeal (15%): Based on overall App rating and the total # of downloads

    To support these numbers I have created an AdDuplex campaign leveraging 1 million impressions I won from another contest from AdDuplex, the Every Phone They Make promotion. Instead of getting a phone, I was able to choose 1 million ad impressions as an alternate prize. I'm tweeting about my game and trying to promote it otherwise but that is always a challenge. It's tough to know how to grab some leverage.

  2. 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. Please leave me a note in the comments providing any other benefits to using Azure over Amazon's cloud for our implementation.



    I have a few opinions on the topic.

    Today in our current implementation we use the cloud at SHI in an IaaS (Infrastructure as a Service) model upon which Virtual Machines are hosted. With this model it makes little difference other than price and performance from a host such as SHI, Amazon, Azure etc…

    Another supported configuration is to use the Azure Cloud in a Paas (Platform as a Service) model upon which the application and sql database are provided while abstracting us from the infrastructure.

    To me Azure is the natural cloud for Sitefinity, as it is the cloud provider with whom they show the most support. A lot like installing PHP on Windows, it’s just not natural – though it’s done and it works – it just seems off. Azure is the only cloud provider that Sitefinity supports in a platform as a service model. On Amazon you would be able to achieve this with storage, but not the application and database. This is a similar model to what our infrastructure team is currently investigating with Office365 PaaS to reduce the complexity of managing their hardware and systems, and would be prudent for us to at least consider as well. It provides the ability to remove yourself from patching OS’s and maintaining hardware etc…

    http://www.sitefinity.com/benefits/for-it-managers/windows-azure

    This would utilize Azure Cloud Services http://azure.microsoft.com/en-us/services/cloud-services/ to run the application replacing all webservers. It would use Azure SQL Database http://azure.microsoft.com/en-us/services/sql-database/ for the database replacing the need for maintaining SQL Servers. And it would utilize Azure Cloud Storage http://azure.microsoft.com/en-us/services/storage/ for sitefinity’s external storage location which can also be leveraged to provide CDN functionality as an option directly within Azure storage.

    On Amazon’s cloud we could utilize an IaaS model for our web and sql servers. Sitefinity does not support Amazon RDS http://aws.amazon.com/rds/ so we cannot do the same as you could with SQL Azure. We could still utilize amazon s3 http://aws.amazon.com/s3/ for external storage and pair that with a separate product Amazon CloudFront http://aws.amazon.com/cloudfront/ for CDN.



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

    When you run Internet Explorer in Kiosk mode, the Internet Explorer title bar, menus, toolbars, and status bar are not displayed and Internet Explorer runs in Full Screen mode. This means our customers won't as easily be able to browse places we don't want them to go on the internet. This also means the Windows Task bar which includes the keyboard icon intended for launching the touch keyboard is unavailable. Putting focus on a textbox does not launch the touch keyboard in Desktop IE as it does in the Modern IE.

    The solution involves running an .exe file from the browser.  You can do this using WScript.Shell and ActiveX with a little bit of javascript to orchestrate the whole thing. In this example the onfocus event of an text input is used to launch the keyboard.



    <html>
    <head>
    <script>
    function launchKeyboard() {
    var objShell = new ActiveXObject("WScript.shell");
    objShell.run('"C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\tabtip.exe"');
    }
    </script>
    </head>
    <body>
    <input type="text" onfocus="launchKeyboard();"/>
    </body>
    </html>
     

  4. 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. Next launch Google Takeout in another browser tab. https://www.google.com/settings/takeout/custom/calendar  Next make sure that you uncheck everything except Calendar and select which calendars you want to export & click Create Archive.

    When it is finished it will send you a notification email that your data is ready.

    Next download your new .zip file which includes an ICS file with your calendar info.

    Extract the .ics file(s) out of the zipped folder. 
    We are now ready to visit Outlook.com, sign in, and start importing our calendar.
    Select Calendar from the top menu bar.

    You have an option to either import to existing calendar or create a new one – I chose to import to existing. First click Browse and select your ICS file



    Next, click Import and the import will begin. You can now go to your Outlook.com calendar and see all the imported appointments. 

    Enjoy your new simplified life!
  5. 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.
    If you don't sign in to a particular trusted device for 2 months it will be removed from your Microsoft account keeping your account secure in the event that a trusted device is lost or stolen without you realizing it. But if someone steals your device or it is lost somehow you may want to revoke that trust. This is a simple task on outlook.com - by navigating


    Click your profile image in  the top navigation bar
    Select 'Account settings' from the menu
    Open the 'Security info' category under 'Overview'. 
    Click 'Remove all the trusted devices associated with my account' under 'Trusted devices'
    then click 'Remove all trusted devices'.






    Remember, you can always trust a device again later.
  6. 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. But first, it's good to know the shortcut to the shortcuts!
    To see a list of keyboard shortcuts, in Outlook.com just press the ? key on your keyboard!
     If you prefer not to use shortcuts, or are more familiar with the shortcut keys you used on your old email service you can use the shortcuts keys from Gmail or Yahoo mail or turn it off altogether in the settings.
     
     

    Write email

    Create a new email
    N/Ctrl+N
    Show address book
    Alt+.
    Send an email
    Ctrl+Enter/Alt+S
    Reply to an email
    R
    Reply all to an email
    Shift+R
    Forward an email
    Shift+F
    Check spelling
    F7
    Insert an Emoji
    Ctrl+Y
    Save draft
    Ctrl+S

    Read emal

    Open an email
    O/Enter
    Show blocked content
    Shift+I
    Search your email
    /
    Close an email
    Esc
    Expand/Collapse a conversation
    X

    Go to

    Go to Inbox
    G then I
    Go to Flagged
    G then L
    Go to Drafts
    G then D
    Go to Sent
    G then S
    Go to People
    Ctrl+3
    Show keyboard help
    ?

    Email actions

    Delete an email
    Del
    Archive
    E
    Mark an email as junk
    J
    Move to a folder
    V
    New Folder
    Shift+E
    Categorize an email
    C
    New Category
    Shift+G
    Remove all categories
    Y
    Mark an email as read
    Q
    Mark an email as unread
    U
    Flag an email
    Insert
    Print an email
    Shift+P

    Email list

    Select all emails
    S then A
    Deselect all emails
    S then N
    Move selection downwards
    Ctrl+./Down
    Move selection upwards
    Ctrl+,/Up
    Refresh
    M/F9
  7. 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. Is it Spam from the Hormel corporation, a offer from a Nigerian prince, or an ex-girlfriend that won't stop stalking you? Maybe you are busy when an important email pops up and you want to flag it for later. Outlook.com enables you to set up one-click actions that perform these actions instantly. 
    To configure quick actions:

    • click the settings icon in the toolbar
    • select 'More email settings' from the menu.
    • select 'Instant actions' under 'Customising Outlook'
    • make sure 'Show instant actions' is   checked.


    You can also add your own instant action buttons by clicking 'Add actions' and selecting other options from the menu, such as 'Move to' / 'Categorize'. To make the button always visible, highlight the button under 'Show on mouse over' and move it down until the button is set to  'Show always'.
  8. 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.
     
    You can set up automatic cleanup for a sender's mail or a category in Outlook.com, open a message from the sender or newsletter you would like cleaned up automatically, click 'Sweep' in the Outlook.com toolbar and then select 'Schedule cleanup' from the menu.

    You can choose:
    • 'Only keep the latest message from this sender',
    •  'Delete all messages older than __ days' 
    • 'Move all messages older than __ days to <select>'.

    Optionally, you can select 'Do this for everything in the ___ category' and apply your rule to all emails classified as Newsletters or whatever else you choose.

    Next click 'OK'.

    That's it, now sit back and enjoy your new automatic self cleaning inbox. Thank you Outlook.com



  9. 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. Not the best way to start a hackathon, thought I'd be able to go back to sleep a couple hours once I got to DC, but nope! I wanted to arrive early to win a Raspberry Pi for being one of the first 50 in the door.



     The venue for the event was a new co-working space just north of the White House called 1776dc and it really is beautifully designed for work. Paypal sprang for great meals, massages, and had plenty of beverages from coffee to soda to water to vitamin water to red bull to tea to beer. There was no shortage of food or drink at any time during the event, makes all happy.







    Lots of hackers doing their thing at the Battlehack.

    We had some presentations from the hackathon partners early in the AM. Nick Landry (@activenick) from Nokia presented information about Windows Phone and the available Nokia API's and offered prizes of phones for the best app and Nokia Premium Developer Program tokens for any app that implemented a Windows Phone solution. Kevin Whinnery (@kevinwhinnery) from Twilio was being a rockstar doing live code demos with much success, and brough retro gaming systems to give away. Scott Motte (@scottmotte) showed us why Sendgrid is THE API to use for email, really impressive solution and had Leap Motion devices up for grabs. And Microsoft was in the house with Ashish Jaiman (@ashishjaiman), Andrew Duthie (@devhammer), and Frank LaVigne (@tableteer) offering assistance and letting everyone know about Bizspark, and some XBOX Live points were added to the prize pool. 

    Team SEEK brought the Windows Phone goodness with an Arduino hack, they built a vending machine with an erector set and servos and then had a proximity device with wireless charging parents could use to track their children while at amusement parks or other public spaces. When the child leaves the zone various text messages and phone calls would alert the parent. They won the partner prize from Nokia and each team member is getting Nokia Lumia 925 phones. They also won a prize for being the most hardcore, these guys worked just about non-stop and had driven to the event from Ohio. They had a bit of a snafu during their demo causing lost time and I think had things gone right they might have taken the overall prize. Of the ideas at the event I think this one had the best opportunity for commercialization. I would totally rent this device, I recently had an experience where I almost lost my son at the park - had I been 10 seconds later in finding him he would have gone around a blind corner that led to several different paths and then I would have had no idea where on the planet my son was which was a terrible feeling. 



    I thought that 2 minutes to present the apps could have been longer, but I applaud the hosts for applying the time limit evenly and fairly to everyone. I've been at events before where I stuck to the time limit for my presentation and others went on and on beyond the limit. You have to choose your words very carefully and present the features of your app in a way that can be done quickly. Avoid form inputs or anything that takes any time really...


    I created an app called BosWash NYCer which is crowdfunding clean streets.  People see trash everyday on their way to work, but may not have the time or opportunity to clean it up. Now they can take a picture with their phone, add some description information, and post a bounty for the cleaning. Enterprising individuals can then claim the bounties by cleaning the area and taking their own photos as evidence earning money for themselves or their favorite charity. They can pin the bounties to the start screen on their Windows Phone so they can get directions and other information about a particular bounty with a tap, I used Battlehack partner Nokia HERE maps for the direction. When work begins on a bounty the bounty owner receives a text message and when work is completed they receive a phone call through which they can press 1 to approve the bounty claim, or press 2 to review it later. The text messages and phone calls were powered by Battlehack partner Twilio's API - this is really awesome and I'm going to start today building apps using Twilio I think I might have some money maker ideas. Anyway, When the bounty is approved, payment is made using the Battlehack host PayPal's API and email confirmations are sent using Battlehack partner Sendgrid's API. I built demo apps on Windows Phone and Windows 8, the data in my app is stored using Windows Azure Mobile Services.







    Paypal was really awesome and had us set up 10 minutes on which we could practice our presentation and test the demo equipment with our devices. This was a wakeup call for me and when I actually tried to execute my demo I kept losing my place. My solution used both a tablet app and a phone app, so juggling those and speaking at the same time under a 2 minute limit was proving difficult. I went back and refocused my presentation. No matter how much preparation, snafu's happen in demos - despite the assurances of the soundboard guy that the audio would not be a problem, the audio didn't work during my presentation. I was able to quickly make the save by unplugging my phone and putting it on speaker phone for the Twilio phone call part of my demo. I had brought my own Nokia Playup 360 speaker too just for this purpose but the audio worked during the practice, just not during the live demo.

    By the end of the hackathon a number of folks had given up and left but there was still plenty of competition for the prizes and in the end 17 teams presented the apps they had built over the course of the past 24 hours. I must admit I had the feeling to just go home by 6am on Sunday, but there was no way I was going to give up and leave without completing what I had come to accomplish. 



    1. SmartMoney aims to gives users the best chances of winning with lottery tickets by providing notifications and info. DC
    2. Take the roads less traveled with 2Roads, a service that tells you the status of your commute and gives you alternatives. DC
    3. Tapd is an app allows Paypal users to quickly pay for items by tapping their phone against their point-of-sale system. DC
    4. HereUS is a public opinion discovery platform. Users are able to see petitions of the local community and support them.
    5. ScanPal is a Glass app that lets the user instantly find listings of items they see. DC
    6. CrowdPowered helps volunteers organize community projects by enabling organizations and people to donate time and supplies. DC
    7. HoboApp is a service that shows the homeless various locations of services based on need. DC
    8. philanthroFeed enables donations to homeless by sending money to a registered person, which they access at partner stores. DC
    9. Seek is a rentable device children wear that broadcasts signals to parents' phone when their children leave boundaries. DC
    10. Authentic Medicine validates the authenticity of medicine to protect users medically and financially. DC
    11. FeudFunding pits issues against each other by enabling users to contribute $1 to favorites. Winning issues wins total amt .
    12. Next up is FlashShow, which enables you to share media with your friends, which they can view simultaneously when you do. DC
    13. FundB is an alternative of payday loans by enabling groups of friends to fund small loans for each other. DC
    14. Next up is RSVP+, which brings dontations to event signups. DC
    15. GetSkooled is an app made to bring fantasy team gaming to education to lower dropout rates. DC

    16. BosWash uses crowdfunding to address local problems of litter, vandalism, unemployment and volunteer opportunities. DC
    17. First up @ is eLert: a crowd sourced community security environment, using recycled phones to provide home security systems.


    In the end I was awarded 2nd place overall, I won a partner prize from Microsoft, and received an honorable mention from partner Nokia. I believe I was the most mentioned app during the awards ceremony which was pretty cool. The winners were Team Philanthrofeed, a group of 4 computer science students from Georgetown University who did a really amazing job. I had been sitting nearby them for most of the hackathon and they worked together so well, I am very proud to come in second to a team like them and they have a really bright future ahead of them. I'm rooting for them to win the whole thing in the San Jose Battlehack World Finals. I'm kind of happy I don't have to travel to California for the finals, but I really wanted that Axe trophy, totally epic. 




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




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