webhook

package module
v0.9.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2023 License: MIT Imports: 26 Imported by: 0

README

weibo-webhook

weibo-webhook

✨ 你说得对,但是 weibo-webhhok 是基于 自研的分布式微博爬虫收集终端 ✨

文档 · 下载 · 开始使用

微博 webhook

运行时使用 run.bat 脚本即可。

方括号内为可选参数,是 PostgreSQL 的连接参数。

若不填则使用 SQLite3 数据库。

go run abandon.go utils.go database.go network.go post.go session.go [--user=postgres --password=postgres --dbname=postgres]

目录下 test.py 为测试脚本,用于上传一条博文。

此处代码经常修改,以 最终源码 为准。

import httpx
httpx.post("http://localhost:8080/update", data={"mid": 2, "time": 3, "text": "测试"})

为什么主函数所在文件叫 abandon.go ?

因为我发现一件事,就是本程序的数据都是从 database.goinit() 定义的 db *sql.DB 读取嘛,如果主函数文件叫 main.go 的话,在编译的时候会把 database.go 放在较后位置,导致 post.goinit() 从数据库取值的时候找不到。查了不少资料都说是根据文件名排序的,但是 database.go 明明在 post.go 前面啊,而且交换他们的文件名,再在主文件为 main.go 的情况下编译居然又能用了。

文件名排序图

仔细观察我们发现,他妈的 main.go 隔在 database.gopost.go 之间,大胆假设编译时是从主函数所在文件开始按文件名排序,到底后再从头找到该文件,也就是 database.go 是最后编译进去的(猜测),这也能解释为什么 post.godatabase.go 交换文件名编译又可以了。所以只要把主文件改名到 database.go 前就行了,那我肯定用 a 打头啊。a.go? 不好听,然后我就选了个中国人特有记忆的第一个单词哈哈。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var GetReplies func() []Replies

返回最近回复

View Source
var GetUrlsByWatch func(watch string) (Urls []string)

根据 watch 返回 url。

View Source
var Monitors = make(map[string]PostMonitor)
View Source
var PostStmt *sql.Stmt
View Source
var RandomToken = make(map[string][2]string)

随机密钥

View Source
var SavedPosts = PostList{0, 0, []Post{}, make(map[string]int)}
View Source
var UpdateTime = make(map[int64]int64)

更新博文的时间

Functions

func Any

func Any[T any](Expr bool, TrueReturn, FalseReturn T) T

三目运算符

func AnyTo

func AnyTo[T any](Expr bool, Pointer *T, Value T)

直接赋值的三目运算符

func Cors

func Cors() gin.HandlerFunc

func Download

func Download(url string) (local string)

下载图片到本地

func ErrorCTX added in v0.9.7

func ErrorCTX(err error, c *gin.Context, code int) bool

func ExprCTX added in v0.9.7

func ExprCTX(expr bool, c *gin.Context, code int, msg string) bool

func FileExists

func FileExists(path string) bool

FileExists 判断一个文件是否存在

参考 https://blog.csdn.net/leo_jk/article/details/118255913

func Filter

func Filter[T any](s []T, fn func(T) bool) []T

过滤函数 时间复杂度暂且不说

func ForEach

func ForEach[T any](fn func(*sql.Rows) T, cmd string, args ...any) (result []T)

包装后的查询函数

func GetPost

func GetPost(c *gin.Context)

获取 beginTs 时间之后的所有博文

func GetRandomToken

func GetRandomToken(c *gin.Context)

随机生成验证用 Token

func GetRequest

func GetRequest(oid int64) func() []Replies

func GetUserByQuery added in v0.9.7

func GetUserByQuery(c *gin.Context) (int64, string, string)

func In

func In(user *User, pm *PostMonitor) bool

判断用户是否已经提交

参考 https://blog.csdn.net/weixin_42282999/article/details/108542734

func Login

func Login(c *gin.Context)

登录

func MakeDir

func MakeDir(path string)

判断文件夹是否存在

func Modify

func Modify(c *gin.Context)

修改用户信息

func Register

func Register(c *gin.Context)

注册

func ReplaceData added in v0.9.7

func ReplaceData(text string, post *Post) string

替换

func RequestUser added in v0.9.7

func RequestUser(job Job)

发送请求

func Run

func Run(addr ...string)

func SetComments added in v0.9.7

func SetComments(Comments *[]*Post, post *Post)

不重复插入评论

func SimilarText

func SimilarText(first, second string) float64

文本相似性判断

参考 https://blog.csdn.net/weixin_30402085/article/details/96165537

func ToGetUrlsByWatch

func ToGetUrlsByWatch(cmd func(string) string) func(string) []string

获取 GetUrlsByWatch 函数

func UpdateConfig added in v0.9.7

func UpdateConfig(c *gin.Context)

更新配置文件

func UpdatePost

func UpdatePost(c *gin.Context)

提交博文

func Url2Local

func Url2Local(url string) string

解析网址为本地

func Webhook

func Webhook(post *Post)

将 Post 信息 Post 给用户 什么双关

Types

type ApiData

type ApiData struct {
	Code int64     `json:"code"`
	Data []Replies `json:"data"`
}

type Config

type Config struct {
	Oid        int64
	User       string
	Password   string
	DBname     string
	DriverName string
	Debug      bool
}

func (Config) Key

func (cfg Config) Key() string

Postgres 数据库所需参数

func (*Config) Pasre

func (cfg *Config) Pasre()

获取命令行参数

type Job added in v0.9.7

type Job struct {
	Patten  string            `form:"patten" yaml:"patten"`
	Method  string            `form:"method" yaml:"method"`
	Url     string            `form:"url" yaml:"url"`
	Headers map[string]string `form:"headers" yaml:"headers"`
	Data    map[string]string `form:"data" yaml:"data"`
}

func GetJobsByUser added in v0.9.7

func GetJobsByUser(filepath, pid string) []Job

type Post

type Post struct {
	// 博文相关
	Mid    string `form:"mid" json:"mid"`
	Time   int64  `form:"time" json:"time"`
	Text   string `form:"text" json:"text"`
	Type   string `form:"type" json:"type"`
	Source string `form:"source" json:"source"`

	// 博主相关
	Uid         string `form:"uid" json:"uid"`
	Name        string `form:"name" json:"name"`
	Face        string `form:"face" json:"face"`
	Pendant     string `form:"pendant" json:"pendant"`
	Description string `form:"description" json:"description"`

	// 粉丝关注
	Follower  string `form:"follower" json:"follower"`
	Following string `form:"following" json:"following"`

	// 附件
	Attachment []string `form:"attachment" json:"attachment"`
	PicUrls    []string `form:"picUrls" json:"picUrls"`
	Repost     *Post    `form:"repost" json:"repost"`
	Comments   []*Post  `json:"comments"`
}

一条博文包含的信息

func GetAllPost

func GetAllPost(pl *PostList) []Post

返回数据库中所有博文。

func (*Post) Empty

func (post *Post) Empty()

去除空的子博文 Repost

func (*Post) Insert

func (post *Post) Insert() string

插入接收到的数据,包含被转发微博

我超好巧妙的递归储存

func (*Post) Save

func (post *Post) Save(user *User) (int64, string)

在 PostList 中添加博文并插入数据库

返回值

0: 提交成功

1: token 错误

2: 博文已被储存

type PostList

type PostList struct {
	// 列表长度
	Length int
	// 最近博文时间
	LastPostTime int64
	// 博文列表
	Posts []Post
	// 是否存在
	Positions map[string]int
}

func (*PostList) GetPostByName

func (pl *PostList) GetPostByName(name string) *Post

根据名称返回博文

func (*PostList) GetPostByTime

func (pl *PostList) GetPostByTime(BeginTime, EndTime int64) []Post

返回给定时间之后的博文

func (*PostList) Len

func (pl *PostList) Len() int

func (*PostList) Less

func (pl *PostList) Less(i, j int) bool

func (*PostList) PushBottom

func (pl *PostList) PushBottom(post Post)

func (*PostList) PushComment added in v0.9.7

func (pl *PostList) PushComment(repostID string, post Post)

插入评论

func (*PostList) PushSort

func (pl *PostList) PushSort(post Post)

func (*PostList) Swap

func (pl *PostList) Swap(i, j int)

type PostMonitor

type PostMonitor struct {
	Score   float64
	Posts   []*Post
	Users   []*User
	Percent []float64
}

博文检查器

func (PostMonitor) Len

func (pm PostMonitor) Len() int

func (PostMonitor) Less

func (pm PostMonitor) Less(i, j int) bool

func (PostMonitor) Swap

func (pm PostMonitor) Swap(i, j int)

type Replies

type Replies struct {
	Member struct {
		Mid   string `json:"mid"`
		Uname string `json:"uname"`
	} `json:"member"`
	Content struct {
		Message string `json:"message"`
	} `json:"content"`
}

type User

type User struct {
	Uid   int64  `form:"uid" json:"uid"`
	Token string `json:"token,omit($any)"`
	Level int64  `form:"level" json:"level"`
	XP    int64  `form:"xp" json:"xp"`
	File  string `form:"file" json:"file"`
}

func BeforeLogin

func BeforeLogin(c *gin.Context) *User

登录前置

func GetAllUsers

func GetAllUsers() []User

返回所有 User 对象

func GetUserByKey

func GetUserByKey(key string, val any) (user User)

根据 Key 返回 User 对象

func NewUserByUID

func NewUserByUID(uid int64) (user *User, err error)

新建用户

func (User) Insert

func (user User) Insert() (sql.Result, error)

向数据库插入一位用户。

func (User) Update

func (user User) Update(key, value any) (sql.Result, error)

更新用户数据

type Yml added in v0.9.7

type Yml struct {
	Listening []string `form:"listening" yaml:"listening"`
	Jobs      []Job    `form:"jobs" yaml:"jobs"`
}

func GetYmlByUser added in v0.9.7

func GetYmlByUser(filepath string) (config Yml)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL