吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11335|回复: 172
收起左侧

[其他原创] Golang 爬取每日早报并推送到微信

    [复制链接]
52loli 发表于 2022-7-7 15:51
本帖最后由 52loli 于 2022-7-11 08:20 编辑

使用教程

  • 打开wxPusher官网,微信扫码登录,根据官方文档进行操作

0.png

1.png

  • 私发复制UID

2.png

  • 群发复制Topicid

3.png

  • 请先运行一次软件,然后会生成一个config.json的文件,然后在文件中填入必要的参数

Github

预览

4.jpg

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "loli/wxPusher"
    "net/http"
    "os"
    "path/filepath"
    "strings"
    "time"

    "github.com/antchfx/htmlquery"
)

type Config struct {
    // 密钥
    AppToken string `json:"appToken"`
    // 主题id 为空不转发
    TopicIds []int `json:"topicIds"`
    // 个人id 为空不转发
    Uids []string `json:"uids"`
    // 状态码
    Data []map[string]interface{}
}

type Image struct {
    ImageContent struct {
        Image struct {
            Url string
        }
    }
}

type BingWallpaper struct {
    MediaContents []Image
}

// 获取Bing当日壁纸
func getBingWallpaper() string {
    var bing BingWallpaper
    url := "https://cn.bing.com/hp/api/model"
    resp := get(url, nil)
    json.Unmarshal(*resp, &bing)
    return bing.MediaContents[0].ImageContent.Image.Url
}

func get(url string, headers *map[string]string) *[]byte {
    client := &http.Client{}
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Set("Cache-Control", "no-cache")
    req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")
    if headers != nil {
        for k, v := range *headers {
            req.Header.Set(k, v)
        }
    }
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("网络连接超时!", err)
        return nil
    }
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    return &body
}

func parse() {
    url := "https://www.163.com/dy/media/T1603594732083.html"
    resp := get(url, nil)
    if resp == nil {
        return
    }
    html, _ := htmlquery.Parse(bytes.NewReader(*resp))
    root := htmlquery.Find(html, `//li[@class="js-item item"][1]/a/@href`)
    todayUrl := htmlquery.InnerText(root[0])
    headers := map[string]string{
        "referer": url,
    }
    resp = get(todayUrl, &headers)
    if resp == nil {
        return
    }
    html, _ = htmlquery.Parse(bytes.NewReader(*resp))
    root = htmlquery.Find(html, `//div[@class="post_body"]/p[2]/text()[position()>1]`)
    var con string
    for i, v := range root {
        if i == 0 {
            con += "![](" + getBingWallpaper() + ")\n\n**<center>" + htmlquery.InnerText(v) + "</center>**\n\n"
            continue
        }
        if i == len(root)-1 {
            con += "\n> " + htmlquery.InnerText(v)
            break
        }
        con += strings.Replace(htmlquery.InnerText(v), "、", ". ", 1) + "\n"
    }
    push(con, "今日早报")
}

func push(content string, summary string) {
    var loli wxPusher.Loli
    var con Config
    readConfig(&con)
    if con.AppToken == "" || (con.TopicIds[0] == 0 && con.Uids[0] == "") {
        fmt.Println("config.json配置错误!")
        return
    }
    if con.TopicIds[0] == 0 {
        con.TopicIds = nil
    }
    if con.Uids[0] == "" {
        con.Uids = nil
    }
    res := loli.Send(con.AppToken, content, summary, 3, con.TopicIds, con.Uids)
    json.Unmarshal(*res, &con)
    fmt.Println(con.Data[0]["code"], con.Data[0]["status"])
}

func readConfig(con *Config) {
    path := filepath.Dir(os.Args[0]) + filepath.FromSlash("/") + "config.json"
    if _, err := os.Stat(path); err != nil {
        f, err := os.Create(path)
        if err != nil {
            fmt.Println("config.json创建失败!", err)
            time.Sleep(3 * time.Second)
            os.Exit(0)
        }
        defer f.Close()
        con.TopicIds = make([]int, 1)
        con.Uids = make([]string, 1)
        c, _ := json.MarshalIndent(con, "", "    ")
        f.Write(c)
        fmt.Println("请在config.json中填入必要的配置!")
        time.Sleep(3 * time.Second)
        os.Exit(0)
    }
    f, err := os.Open(path)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    fi, _ := f.Stat()
    data := make([]byte, fi.Size())
    f.Read(data)
    json.Unmarshal(data, &con)
}

func main() {
    parse()
}

免费评分

参与人数 30吾爱币 +30 热心值 +26 收起 理由
cwker666 + 1 + 1 谢谢@Thanks!
PrincessSnow + 1 + 1 我很赞同!
guoruihotel + 1 + 1 谢谢@Thanks!
QWQ2333 + 1 + 1 我很赞同!
zc1313113 + 1 + 1 我很赞同!
Truth + 1 + 1 鼓励转贴优秀软件安全工具和文档!
jixianju88 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
林北是大帅哥 + 1 + 1 来个现成的~~~ https://www.aliyundrive.com/s/4jeEhAqtxBH
wwl520 + 1 + 1 谢谢@Thanks!
cwl + 1 + 1 我很赞同!
清炒藕片丶 + 1 + 1 热心回复!
终雨 + 1 + 1 我很赞同!
sax1980 + 1 + 1 谢谢@Thanks!
zzy17468 + 1 + 1 谢谢@Thanks!
ben_ben_ji + 1 热心回复!
lx12 + 1 + 1 我很赞同!大老牛逼
rutracker + 1 + 1 用心讨论,共获提升!
yzmb8456 + 1 谢谢@Thanks!
pppole + 1 + 1 谢谢@Thanks!
b105 + 1 用心讨论,共获提升!
midleap + 1 我很赞同!
tinayalin + 1 我很赞同!
喵星人丶 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
glz220 + 1 热心回复!
陈泽坤001 + 1 鼓励转贴优秀软件安全工具和文档!
kikizhu + 1 我很赞同!
luofei + 1 + 1 我很赞同!
tomgo + 1 + 1 我很赞同!
Duke0910 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 52loli 发表于 2022-7-8 10:11
songing 发表于 2022-7-8 09:28
不能每天自动发送吗?

可以放到服务器上设定每天早上7点自动运行一次,嫌麻烦的也可以微信打开这个链接wxpusher.zjiecode.com/wxuser/?type=2&id=6574#/follow关注主题后,每天早上7点群发早报
 楼主| 52loli 发表于 2023-11-17 08:36
LeonSmith153 发表于 2023-11-16 14:33
楼主,想问下我这边运行`go run main.go`后总是提示“请在config.json中填入必要的配置!”
我使用了如下 ...

这个要编译后再运行,不然每次生成的config.json都会在不同的临时目录
{
    "appToken": "",
    "topicIds": [
        0,
        1,
        2
    ],
    "uids": [
        "0",
        "1",
        "2"
    ]
}
BBMonkey 发表于 2022-7-7 16:09
lr957 发表于 2022-7-7 16:11
技术贴,学习了。
zine0318 发表于 2022-7-7 16:11
可以,挺有意思的!支持!
贪玩老木 发表于 2022-7-7 16:12
111111111
小木木XX 发表于 2022-7-7 16:12
技术贴,学习了,支持楼主
scut 发表于 2022-7-7 16:12
每日新闻确实是一个获取知识的途径
ZXV880 发表于 2022-7-7 16:12
学习一下逻辑
jinyuliangyuan 发表于 2022-7-7 16:13
技术贴,学习了感谢楼主教学
百分之96.4 发表于 2022-7-7 16:13
新手学习!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 00:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表