@@ -52,15 +52,15 @@ import (
5252
5353//存储类型
5454
55- //更多存储类型有待扩展
55+ // 更多存储类型有待扩展
5656const (
5757 StoreLocal = "local"
5858 StoreOss = "oss"
5959 VirtualRoot = "virtualroot"
6060 unknown = "unknown"
6161)
6262
63- //分词器
63+ // 分词器
6464var (
6565 seg gse.Segmenter
6666 te idf.TagExtracter
@@ -124,15 +124,15 @@ func GetLang(lang string) string {
124124 return "中文"
125125}
126126
127- //评分处理
127+ // 评分处理
128128func ScoreFloat (score int ) string {
129129 return fmt .Sprintf ("%1.1f" , float32 (score )/ 10.0 )
130130}
131131
132- //@param conf 邮箱配置
133- //@param subject 邮件主题
134- //@param email 收件人
135- //@param body 邮件内容
132+ // @param conf 邮箱配置
133+ // @param subject 邮件主题
134+ // @param email 收件人
135+ // @param body 邮件内容
136136func SendMail (conf * conf.SmtpConf , subject , email string , body string ) error {
137137 msg := & mail.Message {
138138 Header : mail.Header {
@@ -152,27 +152,28 @@ func SendMail(conf *conf.SmtpConf, subject, email string, body string) error {
152152 return m .Send (msg )
153153}
154154
155- //渲染markdown为html并录入数据库
155+ // 渲染markdown为html并录入数据库
156156func RenderDocumentById (id int ) {
157157 //使用chromium-browser
158158 // chromium-browser --headless --disable-gpu --screenshot --no-sandbox --window-size=320,480 http://www.bookstack.cn
159159 link := "http://localhost:" + beego .AppConfig .DefaultString ("httpport" , "8181" ) + "/local-render?id=" + strconv .Itoa (id )
160- name := beego .AppConfig .DefaultString ("chrome" , "chromium-browser" )
161- args := []string {"--headless" , "--disable-gpu" , "--screenshot" , "--no-sandbox" , "--window-size=320,480" , link }
162- if ok := beego .AppConfig .DefaultBool ("puppeteer" , false ); ok {
163- name = "node"
164- args = []string {"crawl.js" , "--url" , link }
165- }
166- cmd := exec .Command (name , args ... )
167- beego .Info ("render document by document_id:" , cmd .Args )
168- // 超过10秒,杀掉进程,避免长期占用
169- time .AfterFunc (httpTimeout , func () {
170- if cmd .Process != nil && cmd .Process .Pid != 0 {
171- cmd .Process .Kill ()
160+ chrome := beego .AppConfig .DefaultString ("chrome" , "chromium-browser" )
161+ chromeArgs := []string {chrome , "--headless" , "--disable-gpu" , "--screenshot" , "--no-sandbox" , "--window-size=320,480" , link }
162+ nodeArgs := []string {"node" , "crawl.js" , "--url" , link }
163+ for _ , v := range [][]string {chromeArgs , nodeArgs } {
164+ cmd := exec .Command (v [0 ], v [1 :]... )
165+ beego .Info ("render document by document_id:" , cmd .Args )
166+ // 超过10秒,杀掉进程,避免长期占用
167+ time .AfterFunc (httpTimeout , func () {
168+ if cmd .Process != nil && cmd .Process .Pid != 0 {
169+ cmd .Process .Kill ()
170+ }
171+ })
172+ if err := cmd .Run (); err != nil {
173+ beego .Error (err )
174+ continue
172175 }
173- })
174- if err := cmd .Run (); err != nil {
175- beego .Error (err )
176+ return
176177 }
177178}
178179
@@ -251,7 +252,7 @@ func RenderCoverByBookIdentify(identify string) (err error) {
251252 return
252253}
253254
254- //使用chrome采集网页HTML
255+ // 使用chrome采集网页HTML
255256func CrawlByChrome (urlStr string , bookIdentify string ) (cont string , err error ) {
256257 if strings .Contains (strings .ToLower (urlStr ), "bookstack" ) {
257258 return
@@ -354,11 +355,11 @@ func cropScreenshot(selector, jsonFile, pngFile string) (images map[string]map[i
354355}
355356
356357// 图片缩放居中裁剪
357- //图片缩放居中裁剪
358- //@param file 图片文件
359- //@param width 图片宽度
360- //@param height 图片高度
361- //@return err 错误
358+ // 图片缩放居中裁剪
359+ // @param file 图片文件
360+ // @param width 图片宽度
361+ // @param height 图片高度
362+ // @return err 错误
362363func CropImage (file string , width , height int ) (err error ) {
363364 var img image.Image
364365 img , err = imaging .Open (file )
@@ -376,12 +377,12 @@ func CropImage(file string, width, height int) (err error) {
376377 return imaging .Save (img , file )
377378}
378379
379- //采集HTML并把相对链接和相对图片
380- //内容类型,contType:0表示markdown,1表示html,2表示文本
381- //force:是否是强力采集
382- //intelligence:是否是智能提取,智能提取,使用html2article,否则提取body
383- //diySelecter:自定义选择器
384- //注意:由于参数问题,采集并下载图片的话,在headers中加上key为"project"的字段,值为书籍的标识
380+ // 采集HTML并把相对链接和相对图片
381+ // 内容类型,contType:0表示markdown,1表示html,2表示文本
382+ // force:是否是强力采集
383+ // intelligence:是否是智能提取,智能提取,使用html2article,否则提取body
384+ // diySelecter:自定义选择器
385+ // 注意:由于参数问题,采集并下载图片的话,在headers中加上key为"project"的字段,值为书籍的标识
385386func CrawlHtml2Markdown (urlstr string , contType int , force bool , intelligence int , diySelector string , excludeSelector []string , links map [string ]string , headers ... map [string ]string ) (cont string , err error ) {
386387 defer func () {
387388 if r := recover (); r != nil {
@@ -591,8 +592,8 @@ func HandleSVG(doc *goquery.Document, project string) *goquery.Document {
591592 return doc
592593}
593594
594- //操作图片显示
595- //如果用的是oss存储,这style是avatar、cover可选项
595+ // 操作图片显示
596+ // 如果用的是oss存储,这style是avatar、cover可选项
596597func ShowImg (img string , style ... string ) (url string ) {
597598 img = strings .ReplaceAll (img , "\\ " , "/" )
598599 if strings .HasPrefix (img , "https://" ) || strings .HasPrefix (img , "http://" ) {
@@ -636,12 +637,12 @@ func Substr(s string, length int) string {
636637 return str
637638}
638639
639- //分页函数(这个分页函数不具有通用性)
640- //rollPage:展示分页的个数
641- //totalRows:总记录
642- //currentPage:每页显示记录数
643- //urlPrefix:url链接前缀
644- //urlParams:url键值对参数
640+ // 分页函数(这个分页函数不具有通用性)
641+ // rollPage:展示分页的个数
642+ // totalRows:总记录
643+ // currentPage:每页显示记录数
644+ // urlPrefix:url链接前缀
645+ // urlParams:url键值对参数
645646func NewPaginations (rollPage , totalRows , listRows , currentPage int , urlPrefix string , urlSuffix string , urlParams ... interface {}) html1.HTML {
646647 var (
647648 htmlPage , path string
@@ -746,7 +747,7 @@ func NewPaginations(rollPage, totalRows, listRows, currentPage int, urlPrefix st
746747 return html1 .HTML (`<ul class="pagination">` + htmlPage + `</ul>` )
747748}
748749
749- //判断数据是否在map中
750+ // 判断数据是否在map中
750751func InMap (maps map [int ]bool , key int ) (ret bool ) {
751752 if _ , ok := maps [key ]; ok {
752753 return true
0 commit comments