65.9K
CodeProject 正在变化。 阅读更多。
Home

CGoogle: Google 搜索类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (23投票s)

2005年3月28日

3分钟阅读

viewsIcon

157122

downloadIcon

2309

一个简单的类,无需官方 Google API 即可执行 Google 搜索。

引言

这篇文章提供了一种简单易用的方法,通过程序查询 Google,而不是通过 Google API 和 SOAP。许多人不想花时间下载官方 Google API 包并将其集成到他们的项目中,因此这个简单的类使得查询 Google 搜索结果变得轻而易举。

开始之前

在您开始阅读这篇文章和代码之前,我想先谈几点。我会尽量简短,不会过多打扰。

#1:最重要的一点

Google 为我们提供了免费的优秀服务,请尊重这一点,不要滥用 Google。尽量减少您的查询次数,不要用成千上万个不必要的请求轰炸 Google 的服务器。

#2:容易发生变化

Google 肯定无法避免变化。如果 Google 大幅修改了返回结果的格式,此类可能无法检索到正确的结果。这种情况在短期内很少发生,但如果发生,我将更新 CGoogle 以符合任何新的格式标准。

#3:关于 MFC 的说明

我相信你们中的许多人会因为得知此类依赖于 MFC 而哭泣(我也可以梦想,不是吗?)。但不要跑,有好消息!很快,我将提供一个非 MFC 类版本,这将是我的个人偏好,而不是 MFC 依赖项。

使用代码

过去,我因为发表文章过于冗长而受到批评,所以我会尽量在这篇文章中克制自己。特别是因为没有什么可解释的,使用 Google 很容易,那么用你的程序访问它也应该很容易,对吧?我的观点是,显然是的。

搜索 Google

在这个类中有六个不同的公共访问函数,但您很可能只使用其中的四个。我将从最重要的函数开始。

如果您准备好搜索 Google,您可以使用 PerformSearch 为您完成这项工作。该函数只有一个参数,它是一个包含您搜索词的字符数组。PerformSearch 在成功时返回 true,在失败时返回 false。

您可以使用 SetSafeSearch 启用或禁用您的安全搜索。默认情况下,安全搜索被禁用。

获取结果计数

当您准备好检索结果时,您需要知道找到了多少个结果,这样您就不会无意中超出界限。调用 GetResultCount 将清楚地返回找到的结果数量。

检索结果

在您调用 PerformSearch 之后,您肯定希望检索单个结果以进行进一步处理,您可以通过下标运算符或使用 GetAt 来实现。

GetAt 将返回一个指向位于给定零索引处的结果的指针;如果结果在指定位置不存在,则返回 NULL

下标运算符将返回对相应结果的引用,但是,它不是边界安全的(这意味着如果传递的索引小于零或大于或等于 GetResultCount(),它将失败)。

两者共享的基本返回类型是 GoogleResult,它是一个方便地包含结果的 URL (cstrURL)、标题 (cstrTitle) 和描述 (cstrDesc) 的结构体。

但是,一篇没有例子的文章算什么?当然没有吸引力?对于那些在使用此类时可能遇到困难的人来说,也许这个清晰的例子会成为一个有用的参考。

/* The following will search google for "The Code Project"
 and display the first 3 results in message boxes */


bool GoogleTest()
{
    CGoogle google;

    if  (!google.PerformSearch( "\"The Code Project\"" ))
    {
        return false;  // Failed
    }

    size_t nResultCount = google.GetResultCount();

    for ( size_t n=0; n < nResultCount && n < 3; ++n)
    {
        ::MessageBox(  NULL, google[n].cstrTitle,  "Result Title",
                                             MB_ICONINFORMATION );

        ::MessageBox(  NULL, google[n].cstrURL,  "Result URL",
                                         MB_ICONINFORMATION );

        ::MessageBox(  NULL, google[n].cstrDesc,  "Result Description",
                                                  MB_ICONINFORMATION );
    }

    return true;
}

历史

  • 2005 年 3 月 23 日 - 开始编写 CGoogle
  • 2005 年 3 月 24 日 - 向 The Code Project 提交 CGoogle
  • 2005 年 4 月 06 日 - 修复了小的边界错误。
  • 2005 年 4 月 10 日 - 修复了影响无描述结果的错误。
  • 2005 年 11 月 7 日 - 更新代码以兼容新的 Google 搜索结果。
  • 2005 年 11 月 29 日 - 更新代码以兼容新的 Google 搜索结果。
© . All rights reserved.