fxd-app-search:网页搜索APP

为什么

虽然有了 fxd-app-fetch 以后我们就可以实时获得网络上最新的内容,但是,它需要我们知道 URL 才能获取内容。而在很多场景下,我们只知道关键词。这个时候就需要使用搜索来解决问题。

Google/Bing提供了搜索接口,但价格不菲,折合人民币1毛钱一次。且Google官方的接口还有使用上限,即使加钱也不能提高额度。因此在服务器端解决搜索问题是昂贵的。

因此,我们开发了 fxd-app-search。

是什么

fxd-app-search 完全在客户端运行,它直接打开一个无头浏览器进行搜索,然后将搜索结果整理并按固定格式返回。这样做的好处是无需付费,但它也有对应的限制:

  1. 你的网络需要能访问Google
  2. 使用频次不能太高,不然可能会被Google ban掉

由于 Fxd 在客户端运行,因此IP是分散的,一般场景并不会触发限制。

除了标准的搜索功能,它还提供了参数可以访问搜索结果中的网页并用 fxd-app-fetch 类似的算法提取主要内容并转为makrdown格式。

由于全网内容参差不齐,fxd-app-search 还支持了指定域名搜索,这样我们可以把内容锁定在优质网站上。

如何使用

fxd-app-search 是一个 fxd app,你可以通过 fxd-cli 或者 FlowDeer 运行它。

在安装完成 fxd-cli 之后,你可以通过以下命令直接安装 fxd-app-search

fxd _install fxd-app-search

然后运行帮助命令,可以查看它的方法和对应的参数:

fxd search help
Version:
 1.0.6
Usage:
 fxd search [command] [options]

Command - main:
 --query <string>       要搜索的关键词 (required)
 --sites <string>       如果传入,则只搜索匹配站点的内容。多个域名用,分隔
 --format <string>      返回数据格式 (default: text)
 --timeout <number>     超时时间 (default: 60000)
 --headless <boolean>   是否启用后台模式 (default: true)
 --user <string>        用户名 (default: default)
 --wait_type <string>   等待类型 (default: domcontentloaded)
 --result_limit <number>        结果数量限制 (default: 3)
 --result_extend <boolean>      是否返回额外信息 (default: false)
 --result_length <number>       每一条结果的Markdown长度限制 (default: 2000)

使用实例

fxd search --query="方糖" --sites="ftqq.com" --format="json"

将返回一个简略的搜索结果:

{
    "results": [
        {
            "title": "一个全平台应用的诞生\nftqq.com\nhttp://road.ftqq.com › 27-一个全平...",
            "link": "http://road.ftqq.com/27-%E4%B8%80%E4%B8%AA%E5%85%A8%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E7%9A%84%E8%AF%9E%E7%94%9F.html",
            "snippet": "让我们来回顾一下这个过程。首先我们开发了网页版;然后通过Electron和Cordova打包了电脑客户端和手机客户端;最后通过服务器端实现了网页版和客户端之间的通信。从而实现 ..."
        },
        {
            "title": "什么是HTML\nftqq.com\nhttp://road.ftqq.com › 47-什么是H...",
            "link": "http://road.ftqq.com/47-%E4%BB%80%E4%B9%88%E6%98%AFHTML.html",
            "snippet": "117. 高级表单样式 · 118. 表单验证 · 119. 发送表单数据. Light (default); Rust; Coal; Navy; Ayu. 方糖全栈路线图. 什么是HTML. 此部分内容精选自MDN,请点此访问MDN ..."
        },
        {
            "title": "精益流程\nftqq.com\nhttp://road.ftqq.com › 28-精益流程",
            "link": "http://road.ftqq.com/28-%E7%B2%BE%E7%9B%8A%E6%B5%81%E7%A8%8B.html",
            "snippet": "方糖全栈路线图. 精益流程. 什么是精益创业. 「精益创业」是硅谷科技公司IMUV 的联合创始人埃里克·莱斯提出的一个理念,他以此为主题出版了一本同名的书。 其实对于程序员 ..."
        }
    ]
}

可以看到 snippet 中的内容比较短。解决的办法有两个,一个是把 snippet 提供给 AI,让其选择想要看的网页后用 fxd-app-fetch 单独打开;另一个办法是启用 fxd-app-search 的 result_extend 参数:

fxd search --query="方糖" --sites="ftqq.com" --format="json" --result_extend="true"

运行结果为:

{
    "results": [
        {
            "title": "一个全平台应用的诞生\nftqq.com\nhttp://road.ftqq.com › 27-一个全平...",
            "link": "http://road.ftqq.com/27-%E4%B8%80%E4%B8%AA%E5%85%A8%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E7%9A%84%E8%AF%9E%E7%94%9F.html",
            "snippet": "让我们来回顾一下这个过程。首先我们开发了网页版;然后通过Electron和Cordova打包了电脑客户端和手机客户端;最后通过服务器端实现了网页版和客户端之间的通信。从而实现 ...",
            "markdown": "方糖全栈路线图\n-------\n\n[一个全平台应用的诞生](#一个全平台应用的诞生)\n-------------------------\n\n今天我们通过一个简单的Todo项目来看一下基于Web开发的全平台应用的全过程。主要目的是为大家建立全局视野,可能会遇到一些听不懂的技术名词,不懂没关系,先接着看下去,感受整个过程就对了。后边会把这些知识点补充起来的。\n\n![](http://road.ftqq.com/images/s4_data.003.png) Time Todo是我开发的一个Todo工具。它既有电脑客户端、又有网页版和移动版。还可以通过Web Hook进行Todo数据同步和生成日报等工作,主体应用从想法到完成只用了一个周末。\n\n![](http://road.ftqq.com/images/s4_data.004.png) ... 我最常用的就是Adobe家的Xd。这是一个矢量设计工具,可以同时用来设计Logo和软件界面。拥有"
        }
    ]
}

可以看到,开启 result_extend 参数后,返回中多了一个 markdown 字段,里边包含了更详细的页面内容。

另外,如果你想了解 fxd-app-search 具体是如何搜索的,可以将 headless 传入 false :

fxd search --query="一人企业方法论" --headless="false" --format="json"

这样在运行命令时可以看到浏览器界面,方便定位问题。

如果对文章内容有疑问或者有经验分享,请在评论中留言,我们会及时回复。
发表回复