我是李君子 发表于 2025-2-22 18:39:27

把搜索引擎和代理站结合起来 MirrorLine2

本帖最后由 我是李君子 于 2025-2-22 18:40 编辑

大概在这周前,我写了个镜像收集站,然后当时称之为镜像浏览器(Github)
然后做了之后呢我就想为啥我不能真的去整一个浏览器呢🤔,最开始是想通过ai确认找到的镜像站的,但是想了想成本有些高,另外就是不好实现
然后我就特地去查了查搜索引擎,然后发现了个特别好用的SearXNG,开源的,主要是国内可以裸连我测试也比较方便,搜索质量也可以所以我用这个了
(https://github.com/searxng/searxng)
然后我就心血来潮写了一个MirrorLine2,也就是MirrorLine的动态版本,使用express框架编写的
Github(注: 这个的服务端部分是用LiveScript编写的,源码是index.ls)
注: 项目里并没有用真正的模板字符串,因为项目本身不大,用这玩意有些小题大做感觉
然后因为有先前项目现成的html所以很快就ok了(其实应该再改改,没怎么调还)
Search Pixiv example

对于SearXNG引擎的调用,我是直接解析的html
源码(LiveScript):

require! "cheerio"
request = require "sync-request"
export search = ->
url = "https://searx.bndkt.io/search?q=#{it.q}&category=#{it.type or "general"}&pageno=#{it.page or 1}&language=all&time_range=&safesearch=#{it.safe or 0}&theme=simple"
data = []
suggestion = []
dom = cheerio.load request( "GET", url ).getBody!
dom( ".result" ).each ->
    dt =
      title : dom(@).find( "h3" ).text!
      content: dom(@).find( ".content" ).text!
      url: dom(@).find( ".url_wrapper" ).text!.split " › "
    data.push dt
dom( ".suggestion" ).each ->
    suggestion.push dom(@).val!
{suggestion,result: data}

export file = ->
url = "https://searx.bndkt.io/search?q=#{it.q}&categories=files&pageno=#{it.page or 1}&language=all&time_range=&safesearch=#{it.safe or 0}&theme=simple"
data = []
dom = cheerio.load request( "GET", url ).getBody!
dom( ".result" ).each ->
    dt =
      title : dom(@).find( "h3" ).text!
      magnet: dom(@).find( ".magnetlink" ).attr( "href" )
      status : dom(@).find( ".stat" ).text!
      url: dom(@).find( ".url_wrapper" ).text!.split " › "
    data.push dt
data

我知道很乱,因为LS本身很省事,语法非常自由,这样写的话可以避免歧义
总的来说,原理就是遍历类为result的元素并获取其中的信息,这里用的cheerio,所以我想大部分js程序员应该能看懂(cheerio可以理解为后端版jQuery)
Bing的话就是获取带有data-id属性的元素,不过我这里还是选择的searx

搜索引擎解决了剩下就是代理的问题了w
我最开始是把express-http-proxy中间件动态使用了,配合cookie,但是很快发现这样只能代一个网站,其他域名的引用,跳转等就没办法了
然后我硬核弄了两天,没弄好所以决定转变策略然后让站点记录在url上,结果改了好了,没法代了,代理的站点已访问对应的效率直接跳转到对方那,白写半天,我总不能只代静态页面玩吧w
这么一来也没兴趣写了,毕竟开学了时间少,但是这个功能总要有的,所以我选择了ProxyPro作为代理站,简单分析了一下ProxyPro的请求结构然后通过前端获取url然后跳转过去,还是挺好用的
Visit Google

不过我一般用ProxyPal不用这个,但是ProxyPal那个是动态token
我其实直接是给人form抄下来了接了个display
这是代码

<form name="urlform" id="urlform" action="klpbbs不让发域名,快说谢谢怕纸大人保护我的安全/servers/" method="POST" style="display: none;">
<div class="input-group input-group-lg mb-3 shadow">
<input type="text" name="url" id="url" class="form-control border border-secondary" aria-label="Enter URL here..." value placeholder="Enter URL here..." autocomplete="off" autocorrect="off" required>
<button class="btn btn-outline-secondary bg-warning" type="submit"><svg class="pro d-sm-none" width="1em" height="1em"><use xlink:href="#svg-globe"></use></svg><span class="d-none d-sm-inline-block">GO</span></button>
</div>
</form>

E,其实ProxyPro反而挺安全的,具体可以去看他的官网,不过就是他的介绍有点不太合法
然后用js调用url和urlform就可以了,调用urlform的submit方法就能实现post跳转
然后这俩有了,MirrorLine2也就差不多ok了!
结束之前再推荐一个小型css框架,肥肠豪用对于小型项目 https://github.com/milligram/milligram
MirrorLine就是用的miligram作为based样式表
Ok就说到这吧,整个屎山我就不展示了,这里扔两个gh仓库
https://github.com/Love-Kogasa/MirrorLine2/
https://bgithub.xyz/Love-Kogasa/MirrorLine/

Bye~
页: [1]
查看完整版本: 把搜索引擎和代理站结合起来 MirrorLine2