为什么
虽然有了 fxd-app-fetch 以后我们就可以实时获得网络上最新的内容,但是,它需要我们知道 URL 才能获取内容。而在很多场景下,我们只知道关键词。这个时候就需要使用搜索来解决问题。
Google/Bing提供了搜索接口,但价格不菲,折合人民币1毛钱一次。且Google官方的接口还有使用上限,即使加钱也不能提高额度。因此在服务器端解决搜索问题是昂贵的。
因此,我们开发了 fxd-app-search。
是什么
fxd-app-search 完全在客户端运行,它直接打开一个无头浏览器进行搜索,然后将搜索结果整理并按固定格式返回。这样做的好处是无需付费,但它也有对应的限制:
- 你的网络需要能访问Google
- 使用频次不能太高,不然可能会被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"
这样在运行命令时可以看到浏览器界面,方便定位问题。