public IGoogleSearchResult Search(string queryText, int startFrom, GoogleSearch.ResultTypes resultType)
        {
            Google.GoogleSearchService service          = new Google.GoogleSearchService();
            Google.GoogleSearchResult  tempSearchResult = service.doGoogleSearch(licenseKey, queryText, startFrom, 10, filter, restrict, safeSearch, languageRestrict, string.Empty, string.Empty);

            object convertedResult = ConvertResult(tempSearchResult, resultType);

            GoogleSearchResult searchResult = new GoogleSearchResult(this, tempSearchResult.estimatedTotalResultsCount, startFrom, 10, queryText, convertedResult, resultType);

            return(searchResult);
        }
        private object ConvertResult(Google.GoogleSearchResult searchResult, ResultTypes resultType)
        {
            switch (resultType)
            {
            case ResultTypes.Raw:
                return(searchResult);

            case ResultTypes.XmlDocument:
                return(ConvertToXmlDocument(searchResult));

            case ResultTypes.DataSet:
                return(ConvertToDataSet(searchResult));

            default:
                throw new ApplicationException("Unknown result Type. Cannot convert.");
            }
        }
        private DataSet ConvertToDataSet(Google.GoogleSearchResult searchResult)
        {
            DataSet   dataSet = new DataSet("GoogleWebSearchResults");
            DataTable table   = dataSet.Tables.Add();

            table.Columns.Add(SummaryFieldName, typeof(string));
            table.Columns.Add(URLFieldName, typeof(string));
            table.Columns.Add(SnippetFieldName, typeof(string));
            table.Columns.Add(TitleFieldName, typeof(string));
            table.Columns.Add(CachedSizeFieldName, typeof(string));
            table.Columns.Add(RelatedInformationPresentFieldName, typeof(bool));
            table.Columns.Add(HostNameFieldName, typeof(string));
            table.Columns.Add(DirectoryCategoryFieldName, typeof(string));
            table.Columns.Add(DirectoryTitleFieldName, typeof(string));

            Google.ResultElement resultElement;
            DataRow row = null;

            for (int i = 0; i < searchResult.resultElements.Length; i++)
            {
                row           = table.NewRow();
                resultElement = searchResult.resultElements[i];

                row[SummaryFieldName]    = resultElement.summary;
                row[URLFieldName]        = resultElement.URL;
                row[SnippetFieldName]    = resultElement.snippet;
                row[TitleFieldName]      = resultElement.title;
                row[CachedSizeFieldName] = resultElement.cachedSize;
                row[RelatedInformationPresentFieldName] = resultElement.relatedInformationPresent;
                row[HostNameFieldName]          = resultElement.hostName;
                row[DirectoryCategoryFieldName] = resultElement.directoryCategory.fullViewableName;
                row[DirectoryTitleFieldName]    = resultElement.directoryTitle;

                table.Rows.Add(row);
            }

            return(dataSet);
        }
        private XmlDocument ConvertToXmlDocument(Google.GoogleSearchResult searchResult)
        {
            XmlDocument xmlDocument = new XmlDocument();

            XmlNode      resultsNode  = xmlDocument.CreateElement("results");
            XmlAttribute resultsCount = xmlDocument.CreateAttribute("count");

            resultsCount.Value = searchResult.estimatedTotalResultsCount.ToString();
            resultsNode.Attributes.Append(resultsCount);

            xmlDocument.AppendChild(resultsNode);

            XmlNode resultNode;

            Google.ResultElement resultElement;

            for (int i = 0; i < searchResult.resultElements.Length; i++)
            {
                resultElement = searchResult.resultElements[i];
                resultNode    = AddElement(resultsNode, "result", null);

                AddElement(resultNode, SummaryFieldName, resultElement.summary);
                AddElement(resultNode, URLFieldName, resultElement.URL);
                AddElement(resultNode, SnippetFieldName, resultElement.snippet);
                AddElement(resultNode, TitleFieldName, resultElement.title);
                AddElement(resultNode, CachedSizeFieldName, resultElement.cachedSize);
                AddElement(resultNode, RelatedInformationPresentFieldName, resultElement.relatedInformationPresent.ToString());
                AddElement(resultNode, HostNameFieldName, resultElement.hostName);
                AddElement(resultNode, DirectoryCategoryFieldName, resultElement.directoryCategory.fullViewableName);
                AddElement(resultNode, DirectoryTitleFieldName, resultElement.directoryTitle);

                resultsNode.AppendChild(resultNode);
            }

            return(xmlDocument);
        }