吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4247|回复: 47
收起左侧

[其他原创] 国庆节学golang写了个小工具:批量下载公众号话题音频

  [复制链接]
susheng 发表于 2022-10-2 14:43
前几天发过帖子用python写的批量下载公众号话题音频工具  ,这次国庆学golang重写了下,代码:



[Asm] 纯文本查看 复制代码
package main

import (
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"os"
	"regexp"
)

func Exists(path string) bool {
	_, err := os.Stat(path) 
	if err != nil {
		if os.IsExist(err) {
			return true
		}
		return false
	}
	return true
}
func InArray(items []string, item string) bool {
	for _, eachItem := range items {
		if eachItem == item {
			return true
		}
	}
	return false
}
func main() {
	defer func() {
      if err := recover(); err != nil {
      	fmt.Print("错误信息:")
         fmt.Println(err)  
      }
   }()
	var url string
	fmt.Print("输入话题地址:")
	fmt.Scanln(&url)
	if len(url) == 0 {
		panic("话题地址为空")
	}
	client := &http.Client{}
	reqest, err := http.NewRequest("GET", url, nil)
	if err != nil {
		panic(err)
	}
	response, _ := client.Do(reqest)
	defer response.Body.Close()
	bResp, _ := io.ReadAll(response.Body)
 
	content := string(bResp)
	var voiceids = regexp.MustCompile(`data-voiceid="(.*)"`).FindAllStringSubmatch(content, -1)
	var titles = regexp.MustCompile(`data-title="(.*)" data-voiceid`).FindAllStringSubmatch(content, -1)
	fileName := "wechat_topic_audio_list.txt"
	// fmt.Print(voiceids, titles)
	fileContent, _ := ioutil.ReadFile(fileName)
	var voice_urls = regexp.MustCompile(`\n`).Split(string(fileContent), -1)
	// fmt.Print(voice_urls)
	var f2 *os.File
	for k, v := range voiceids {
		if InArray(voice_urls, "https://res.wx.qq.com/voice/getvoice?mediaid="+v[1]) {
			fmt.Println("已经下载过音频:" + titles[k][1])
			continue
		}
		res, _ := http.Get("https://res.wx.qq.com/voice/getvoice?mediaid=" + v[1])
		f, _ := os.Create(titles[k][1] + ".mp3")
		io.Copy(f, res.Body)
		if Exists(fileName) {
			f2, _ = os.OpenFile(fileName, os.O_APPEND, 0666)
		} else {
			f2, _ = os.Create(fileName)
		}
		defer f2.Close()
		fmt.Println("正在下载音频:" + titles[k][1])
		// _, _ = io.WriteString(f2, "https://res.wx.qq.com/voice/getvoice?mediaid="+v[1]+"\n")
		// _, _ =f2.Write([]byte("https://res.wx.qq.com/voice/getvoice?mediaid="+v[1]+"\n"))
		_, _ = f2.WriteString("https://res.wx.qq.com/voice/getvoice?mediaid=" + v[1] + "\n")
		// _, _ = ioutil.WriteFile(fileName, []byte("https://res.wx.qq.com/voice/getvoice?mediaid="+v[1]+"\n"), 0666)

	}
	fmt.Print("下载完成")
}


输入话题地址https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5NjAxOTU4MA==&action=getalbum&album_id=1777378132866465795&scene=173    就行,下载效果:
image.png

image.png
image.png

另外增加个功能,就是第2次下载会忽略已经下载过的音频:
image.png


由于python打包的exe在win7下运行不了,不知道golang打包的是否正常运行,有win7的小伙伴可以反馈下,谢谢。

exe地址: https://wwn.lanzouy.com/i88ck0cvdk9g

golang还挺方便的,之后打算把我之前python写的批量下载公众号文章内容音频视频再重写了,算熟悉下golang。
image.png

image.png
image.png

image.png

免费评分

参与人数 4吾爱币 +11 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chuanglue + 3 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
砺心缘起 + 1 + 1 谢谢@Thanks!

查看全部评分

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

1e3e 发表于 2024-5-10 16:07
微软的visual studio code提示:The "gopls" command is not available.
Run "go get -v golang.org/x/tools/gopls" to install.和The "go-outline" command is not available.
Run "go get -v github.com/ramya-rao-a/go-outline" to install.
1e3e 发表于 2024-5-8 11:03
报错:输入话题地址:https://mp.weixin.qq.com/mp/appm ... 65795&scene=173
错误信息:runtime error: invalid memory address or nil pointer dereference

zgdtianya 发表于 2022-10-2 15:02
飘浮 发表于 2022-10-2 15:52
暂时用不上。。感谢分享。
xm65R 发表于 2022-10-2 16:06
看着好,收藏起来
chuanglue 发表于 2022-10-2 16:27
除了罗胖60秒,还有一些好的音频公众号频道么推介么?
老油条 发表于 2022-10-2 16:46

感谢楼主,拿来试试
勤快的懒虫 发表于 2022-10-2 16:48
谢谢分享这个不错
三滑稽甲苯 发表于 2022-10-2 16:53
这个居然不需要cookie吗,我爬文章就需要带cookie
一场荒唐半生梦 发表于 2022-10-2 17:08
多谢楼主分享
finemanguan 发表于 2022-10-2 17:19

多谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 17:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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