Steps for using Google custom search API in .NET

Raj picture Raj · Feb 14, 2013 · Viewed 20.2k times · Source

I am trying to use Google custom search API in my .NET project. I have an API Key provided by my company. I have created a custom search engine using my Google account and copied the 'cx' value.

I am using the following code:

string apiKey = "My company Key";
string cx = "Cx";
string query = tbSearch.Text;

WebClient webClient = new WebClient();
webClient.Headers.Add("user-agent", "Only a test!");

string result = webClient.DownloadString(String.Format("https://www.googleapis.com/customsearch/v1?key={0}&cx={1}&q={2}&alt=json", apiKey, cx, query));

I am getting the following error: "The remote server returned an error: (403) Forbidden. "

I have tried the following code too:

Google.Apis.Customsearch.v1.CustomsearchService svc = new Google.Apis.Customsearch.v1.CustomsearchService();
svc.Key = apiKey;

Google.Apis.Customsearch.v1.CseResource.ListRequest listRequest = svc.Cse.List(query);
listRequest.Cx = cx;
Google.Apis.Customsearch.v1.Data.Search search = listRequest.Fetch();

foreach (Google.Apis.Customsearch.v1.Data.Result result1 in search.Items)
{
   Console.WriteLine("Title: {0}", result1.Title);
   Console.WriteLine("Link: {0}", result1.Link);
}

Here I get the following exception at Fetch():

Google.Apis.Requests.RequestError Access Not Configured [403] Errors [Message[Access Not Configured] Location[ - ] Reason[accessNotConfigured] Domain[usageLimits]

Is CX parameter required? Am I getting the error because I am using the Key provided by my company and using the CX parameter from custom search engine using my Google account?

Is there any other way of getting 'cx'? We don't want to display Google ADs.

Thank you very much in advance for help.

Answer

Mahmoud Ibrahim picture Mahmoud Ibrahim · May 1, 2013

I'm not sure if you are still interested in this.

To get results without ads you need to pay for it. Info @ Google

and yes the cx is required because it specifies the google custom search engine that you want to use to search. you can create a custom search engine from This google page

and here is the current code to retrieve search results for the current api version 1.3.0-beta

        string apiKey = "Your api key";
        string cx = "Your custom search engine id";
        string query = "Your query";

        var svc = new Google.Apis.Customsearch.v1.CustomsearchService(new BaseClientService.Initializer { ApiKey = apiKey });
        var listRequest = svc.Cse.List(query);

        listRequest.Cx = cx;
        var search = listRequest.Fetch();

        foreach (var result in search.Items)
        {
            Response.Output.WriteLine("Title: {0}", result.Title);
            Response.Output.WriteLine("Link: {0}", result.Link);
        }

Hope this helps