Export (0) Print
Expand All

Get User Locations in C#

The following example shows how to get the geographical location of users who have searched for specific keywords using the Ad Intelligence GetKeywordLocations service operation.

This example has been developed and run within the environment described in Getting Started Using C# and Visual Basic with Bing Ads Services.

System_CLiX_note Note

This example uses the UserName and Password elements for authentication. For Managing User Authentication with OAuth, replace the UserName and Password elements with the AuthenticationToken, which is your OAuth access token.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

// BingAds.AdIntelligence is the application-defined namespace that 
// this example uses for the Ad Intelligence service reference. 

using GetLocations.BingAds.AdIntelligence;


namespace GetLocations
{
    class Program
    {
        private static AdIntelligenceServiceClient service = null;

        // Specify your credentials.

        private static string m_password = "<passwordgoeshere>";
        private static string m_username = "<usernamegoeshere>";
        private static string m_token = "<devtokengoeshere>";

        // Specify the advertiser's account ID.

        private static long m_accountId = <accountidgoeshere>;


        static void Main()
        {
            KeywordLocationResult[] locations = null;

            try
            {
                service = new AdIntelligenceServiceClient();

                locations = GetLocations(m_accountId);

                if (locations != null)
                {
                    foreach (KeywordLocationResult keyword in locations)
                    {
                        Console.WriteLine(keyword.Keyword);

                        if (null == keyword.Device)
                        {
                            Console.WriteLine("  There is no location data available for the keyword.\n");
                        }
                        else
                        {
                            Console.WriteLine("  " + keyword.Device);

                            foreach (KeywordLocation location in keyword.KeywordLocations)
                            {
                                Console.WriteLine("    {0} ({1:n0}%)", location.Location, location.Percentage);
                            }

                            Console.WriteLine();
                        }
                    }
                }

                service.Close();
            }
            catch (CommunicationException e)
            {
                Console.WriteLine(e.Message);

                if (null != e.InnerException)
                {
                    Console.WriteLine("\n" + e.InnerException.Message);
                }

                if (service != null)
                {
                    service.Abort();
                }
            }
            catch (TimeoutException e)
            {
                Console.WriteLine(e.Message);

                if (service != null)
                {
                    service.Abort();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);

                if (service != null)
                {
                    service.Abort();
                }
            }
        }


        // Get the geographical location of users who have searched for the specified keywords. 
        // The location information is broken out by device type.

        static KeywordLocationResult[] GetLocations(long accountId)
        {
            GetKeywordLocationsRequest request = new GetKeywordLocationsRequest();
            GetKeywordLocationsResponse response = null;

            // Set the header information.

            request.CustomerAccountId = accountId.ToString();
            request.DeveloperToken = m_token;
            request.UserName = m_username;
            request.Password = m_password;

            // Set the request information.

            request.Device = new[] { "Computers", "Smartphones", "NonSmartphones" };
            request.Keywords = new[] { "flower delivery" };
            request.Language = "English"; 
            request.PublisherCountry = "US";
            request.Level = 2;  // By metropolitan area
            request.MaxLocations = 5;
            request.ParentCountry = "GB";  // Searches on Bing.com that originated in the United Kingdom.

            try
            {
                response = service.GetKeywordLocations(request);
            }
            catch (FaultException<AdApiFaultDetail> fault)
            {
                // Log this fault.

                Console.WriteLine("GetKeywordLocations failed with the following faults:\n");

                foreach (AdApiError error in fault.Detail.Errors)
                {
                    if (105 == error.Code) //  InvalidCredentials
                    {
                        Console.WriteLine("The specified credentials are not valid or the account is inactive.");
                    }
                    else
                    {
                        Console.WriteLine("Error code: {0} ({1})\nMessage: {2}\nDetail: {3}\n",
                            error.ErrorCode, error.Code, error.Message, error.Detail);
                    }
                }
            }
            catch (FaultException<ApiFaultDetail> fault)
            {
                // Log this fault.

                Console.WriteLine("GetKeywordLocations failed with the following faults:\n");

                foreach (OperationError error in fault.Detail.OperationErrors)
                {
                    switch (error.Code)
                    {
                        case 106: // UserIsNotAuthorized
                            Console.WriteLine("The user is not authorized to call this operation.");
                            break;

                        case 1257: // CampaignServiceMissingLanguage
                            Console.WriteLine("The specified language cannot be null or empty.");
                            break;

                        case 1505: // CampaignServiceKeywordsArrayShouldNotBeNullOrEmpty
                            Console.WriteLine("The list of keywords cannot be null or empty.");
                            break;

                        case 3408: // CampaignServiceLanguageAndCountryNotSupported
                            Console.WriteLine("The specified publisher country is not allowed for the specified language.");
                            break;

                        case 3412: // CampaignServiceInvalidLanguage
                            Console.WriteLine("The specified language is not valid.");
                            break;

                        case 3413: // CampaignServiceInvalidPublisherCountry
                            Console.WriteLine("The specified publisher country is not valid.");
                            break;

                        case 3414: // CampaignServiceInvalidLevel
                            Console.WriteLine("The specified level at which to aggregate the geographical location data is not valid.");
                            break;

                        case 3415: // CampaignServiceInvalidParentCountry
                            Console.WriteLine("The specified user country is not valid.");
                            break;

                        case 3417: //CampaignServiceInvalidDevice
                            Console.WriteLine("One or more of the specified devices is not a valid device type.");
                            break;

                        case 3418: //CampaignServiceInvalidMaxLocations
                            Console.WriteLine("The specified number of locations to return is greater than the maximum allowed.");
                            break;

                        default:
                            Console.WriteLine("Error code: {0} ({1})\nMessage: {2}\nDetail: {3}\n",
                                error.ErrorCode, error.Code, error.Message, error.Details);
                            break;
                    }
                }

                foreach (BatchError error in fault.Detail.BatchErrors)
                {
                    Console.WriteLine("Error code: {0} ({1})\nIndex: {2}\nMessage: {3}\nDetail: {4}\n",
                        error.ErrorCode, error.Code, error.Index, error.Message, error.Details);
                }

            }

            return (null == response) ? null : response.KeywordLocationResult;
        }
    }
}


Community Additions

Show:
© 2014 Microsoft