As you all know, we continue to refine the features and functionality of our web services during this beta rollout based on your suggestions and comments.  We also learn a great deal at our Developer Day events.  They have proven to be a fantastic event for attendees, and a great win for us as well as we learn very quickly what additional functionality will help our larger community develop more powerful apps.

 

Last week we rolled out a few updates that we wanted to make sure you were aware of:

  1. Calculated measures will no longer display in report definitions. Currently, these are only available through the Analytics user interface.
  2. The report "category" has been added to the "list reports for profile" method. This will make it easier to obtain a list of reports matching a specific report "category". If a report has no defined category the attribute will not be displayed.  This feature request came from one of our fantastic partners who was looking for an easy way to find the reports that were relevant to their implementation.  Good idea!
  3. In some cases a report was enabled for trending, but the report meta-data did not accurately reflect this. There was a bug in the logic that determined if trending was enabled. This has been resolved.
  4. The ability to filter based of a discrete set of measure identifiers was not working. This was a bug and has been resolved.
  5. The "profile summary" report, when returned in Excel format, contained invalid XML what was preventing it from rendering properly. This has been resolved.
Again, many thanks for your feedback.  Keep it coming!

We had another fantastic Developer Day last week with some incredibly innovative projects and product ideas.  In addition to the Webtrends team on hand (16 Engineers and Services team members), 10 Webtrends Partners traveled to our Portland office to learn more about our latest services and technologies, and build some cool stuff with us.  Everyone had a great time (thank you all for joining us!), and the demos at the end of the day were down-right inspiring.

 

Many projects were proof of concepts, and several were projects that everyone will have access to at some point soon.  Here's a teaser of a few of the ideas people were working on:

 

1) Pulling data from Webtrends into CRM systems.  We've had the capability of pushing data into Microsoft Dynamics and Salesforce for years for Sales teams, but one of our Engineers added a few new tricks into the mix that steps up the integration for Marketing organizations.  Very slick.

 

2) Customer scorecards.  Our Excel integration is very powerful.  Customers, Partners and our own Webtrends Services teams are building some powerful scorecards and dashboards leveraging Excel and our web services.

 

3) New SDKs and APIs for data collection.  Alex announced at our Engage conference that we're going to be adding a new data collection API into our growing infrastructure of "open" services.  The Engineers working on that API were able to develop and demonstrate SDKs for developing apps in a variety of platforms to leverage the new data collection API (which is in early alpha stage at the moment).  Are you planning, designing, or building any mobile apps (Pre, iPhone, Blackberry, Android, etc.), or desktop apps (AIR, Flex, Widgets), or any other internet-ready apps?  We've got some cool stuff in the works.

 

4) Clever delivery of data.  More often than not we are reviewing Webtrends data in a browser, or via Excel.  There are other mechanisms that might be more appropriate for different situations.  How about a text message update?  Or even a friendly voice to leave you a voicemail?  One of our fabulous Partners (William Garrison from ExactTarget) built an interface demonstrating the possibilities in this area leveraging their Email, Voice and SMS technologies to deliver timely reporting or scorecard-friendly data.  Great job William!

 

My favorite part of our Developer Day's is getting a chance to work with everyone in an open and collaborative way.  There's so much creativity and innovation possible with an open architecture.  We're looking forward to our next Developer Day (probably in July...I'll post an announcement when we know more...).  We hope you can join us.

I did a blog entry a while back in regards to doing asynchronous web requests against REST based web services, which is what the Webtrends Web Services are built against.  This entry I'll show how to setup a synchronous web request for data against the services.

 

Benifits:

  • The request is made and in a top down fashion the response is returned with the respective string or stream object data needed.
  • Easier to test versus asynchronous web requests.

 

Disadvantages:

  • The request is made, and will pause or "freeze" while waiting for the response.  In a Windows Forms, WPF, Silverlight (or Flash, etc) client application this will cause the user interface to become unresponsive while waiting for the response.

 

So how do we make a synchronous call?  First create a HttpWebRequest object and instantiate it.

 

            var req = (HttpWebRequest)WebRequest.Create(@"https://ws.webtrends.com/beta/ReportService/profiles/?format=json");

 

Next you'll want to setup credentials.

 

            req.Credentials = new NetworkCredential(@"YourWebTrendsAccount\YouUserName", "YourPassword");

Now make sure when the request is made request the server to use compression.  This is entirely transparent and only needed at this single stage of the request.

 

            req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

 

Finally set the method of request and other peripheral properties.

 

            req.Method = "Get";

            req.AllowAutoRedirect = true;

 

Once this is done you're ready to submit the request.

 

                WebResponse res = req.GetResponse();

 

To retrieve a simple string object feed through to the end of a the stream object response that is available via the WebResponse object.  This can also prospectively be done with the actualy HttpWebRequest object as it has a GetResponseStream() method.  I've segmented it here for example.

 

                string jsonResponse = (new StreamReader(res.GetResponseStream()).ReadToEnd());

 

The following is the complete code with exception handling.

 

            // Create a request

            var req = (HttpWebRequest)WebRequest.Create(@"https://ws.webtrends.com/beta/ReportService/profiles/?format=json");


            req.Credentials = new NetworkCredential(@"YourWebTrendsAccount\YouUserName", "YourPassword");

            // Add compression request.  IIS will return a compressed data result.

            req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

            req.Method = "Get";

            req.AllowAutoRedirect = true;


            // Read the response

            try

            {

                WebResponse res = req.GetResponse();

                string jsonResponse = (new StreamReader(res.GetResponseStream()).ReadToEnd());


            }

            catch (WebException exw)

            {

                WebResponse response = exw.Response;

                string error = (new StreamReader(response.GetResponseStream())).ReadToEnd();

            }

 

Hope that helps!  Leave a comment or question if anything comes up while coding!

 

In a following entry the team will be providing more examples in consumption of these results programmaticaly, but as mentioned by Developer_Donut's entry we'll be releasing a software SDK soon.  This SDK will drammatically simplify and provide guidance on how to access and to utilize the web services.

Here is the shinny new .Net C# SDK with most of the fixings. Check it out, kick the tires (or tyres for our UK brethren) let us know what you think and what we should add. I will also publish some example code using the SDK. If you have any requests for examples just let me know. Thanks everyone for helping us make an SDK that works for everyone.

Our development team has been busy over the past few weeks updating the beta versions of our web services and Generator application.  We have received some excellent feedback from everyone (thank you!), and wanted to let you about updates we made this past Wednesday evening, May 6.

 

Please note these changes as they modify some of the core request and response formats.

 

Changes include:

  1. XML and JSON response format changes. We received feedback that it would be easier to consume some response data if it were formatted differently, so we made some adjustments to those responses.
  2. URL naming conventions.  We wanted to standardize on plurals in the URLs when requesting data.  For example, we've changed "/profile/" to "/profiles/" and "/report/" to "/reports/".
  3. New response codes have been added to make error conditions more obvious.
  4. Report "Category" has been added to the meta data for reports.  This is useful for selecting specific reports inside a profile that have been categorized for specific uses.
  5. Various bug fixes.

 

We also updated our documentation as well so you'll have the information you need.

 

Please keep the feedback coming in.  As you can see, we're listening...and iterating quickly to make this an outstanding service offering for everyone.  Thanks for your help.

Filter Blog

By date:
By tag: