feat: 对文章Meta信息的支持

This commit is contained in:
fengxxc
2022-10-17 17:32:45 +08:00
parent aba651ed21
commit ab9b5c2d07
3 changed files with 41 additions and 23 deletions

View File

@@ -3,6 +3,7 @@ package format
import ( import (
"io/ioutil" "io/ioutil"
"strconv" "strconv"
"strings"
"github.com/fengxxc/wechatmp2markdown/parse" "github.com/fengxxc/wechatmp2markdown/parse"
) )
@@ -20,9 +21,9 @@ func Format(article parse.Article) string {
return result return result
} }
func FormatAndSave(article parse.Article, filePath string) { func FormatAndSave(article parse.Article, filePath string) error {
var result string = Format(article) var result string = Format(article)
ioutil.WriteFile(filePath, []byte(result), 0644) return ioutil.WriteFile(filePath, []byte(result), 0644)
} }
func formatTitle(piece parse.Piece) string { func formatTitle(piece parse.Piece) string {
@@ -34,8 +35,8 @@ func formatTitle(piece parse.Piece) string {
return prefix + " " + piece.Val.(string) + " \n" return prefix + " " + piece.Val.(string) + " \n"
} }
func formatMeta(meta string) string { func formatMeta(meta []string) string {
return meta + " \n" // TODO return strings.Join(meta, " ") + " \n" // TODO
} }
func formatTags(tags string) string { func formatTags(tags string) string {

View File

@@ -2,7 +2,7 @@ package parse
type Article struct { type Article struct {
Title Piece Title Piece
Meta string Meta []string
Tags string Tags string
Content []Piece Content []Piece
} }
@@ -24,19 +24,19 @@ type Piece struct {
type PieceType int32 type PieceType int32
const ( const (
HEADER PieceType = iota // 标题 HEADER PieceType = iota // 0 标题
LINK // 链接 LINK // 1 链接
NORMAL_TEXT // 文字 NORMAL_TEXT // 2 文字
BOLD_TEXT // 粗体文字 BOLD_TEXT // 3 粗体文字
ITALIC_TEXT // 斜体文字 ITALIC_TEXT // 4 斜体文字
BOLD_ITALIC_TEXT // 粗斜体 BOLD_ITALIC_TEXT // 5 粗斜体
IMAGE // 图片 IMAGE // 6 图片
TABLE // 表格 TABLE // 7 表格
CODE_INLINE // 代码 内联 CODE_INLINE // 8 代码 内联
CODE_BLOCK // 代码 块 CODE_BLOCK // 9 代码 块
BLOCK_QUOTES // 引用 BLOCK_QUOTES // 10 引用
O_LIST // 有序列表 O_LIST // 11 有序列表
U_LIST // 无序列表 U_LIST // 12 无序列表
HR // 分隔线 HR // 13 分隔线
BR // 换行 BR // 14 换行
) )

View File

@@ -2,6 +2,7 @@ package parse
import ( import (
"bytes" "bytes"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
@@ -97,6 +98,22 @@ func parseBlockQuote(s *goquery.Selection) []Piece {
return bq return bq
} }
func parseMeta(s *goquery.Selection) []string {
var res []string
s.Children().Each(func(i int, sc *goquery.Selection) {
if sc.Is("#profileBt") {
res = append(res, removeBrAndBlank(sc.Find("#js_name").Text()))
} else {
// t := sc.Text()
t := sc.Nodes[0].Data
// t, _ := sc.Html()
fmt.Println(t)
res = append(res, t)
}
})
return res
}
func ParseFromReader(r io.Reader) Article { func ParseFromReader(r io.Reader) Article {
var article Article var article Article
doc, err := goquery.NewDocumentFromReader(r) doc, err := goquery.NewDocumentFromReader(r)
@@ -111,9 +128,9 @@ func ParseFromReader(r io.Reader) Article {
article.Title = Piece{HEADER, removeBrAndBlank(title), attr} article.Title = Piece{HEADER, removeBrAndBlank(title), attr}
// meta 细节待完善 // meta 细节待完善
meta := mainContent.Find("#meta_content").Text() meta := mainContent.Find("#meta_content")
meta = removeBrAndBlank(meta) metastring := parseMeta(meta)
article.Meta = meta article.Meta = metastring
// tags 细节待完善 // tags 细节待完善
tags := mainContent.Find("#js_tags").Text() tags := mainContent.Find("#js_tags").Text()