目录
2.2 点击F12查看源码,点击Network,然后选择All
2.5 点击有m4a的那个选择右键复制(一般是大写字母C开头的Name)
2.6 如果是VIP才能播放的音乐则是mp3,Name不是大写字母C开头,虽然能下载,但只能下载能试听的那部分音乐
3.1 在目标文本文档中加入URL,在前面加上名字|用来命名
3.4 按照下载顺序改名并加后缀mp3(0就是上面第一个下载的音乐,1就是第二个)
1.引言
一般情况下在网页只能播放音乐而不能下载音乐,如果要下载音乐会让你下载对应客户端,而有的人(比如我)就不想下载客户端,本篇会教你如何在不下载客户端的情况下下载音乐(本篇例子是QQ音乐,使用VS2022版本编程)。
2.找到URL
2.1 进入网页,进入播放页面
2.2 点击F12查看源码,点击Network,然后选择All
2.3 此时在网页选择播放音乐(F12界面不关)
2.4 左键Name那一列
2.5 点击有m4a的那个选择右键复制(一般是大写字母C开头的Name)
2.6 如果是VIP才能播放的音乐则是mp3,Name不是大写字母C开头,虽然能下载,但只能下载能试听的那部分音乐
3.下载
3.1 在目标文本文档中加入URL,在前面加上名字|用来命名
3.2 运行程序
3.3 此时目标文件夹只有数字和未命名文件
3.4 按照下载顺序改名并加后缀mp3(0就是上面第一个下载的音乐,1就是第二个)
3.5 然后就可以直接播放了
4.程序代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Gac;
namespace Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DownLoadFile dlf = new DownLoadFile();
private void btnTest_Click(object sender, EventArgs e)
{
string[] lines = File.ReadAllLines("软件下载1.txt");
for (int i = 0; i < lines.Length; i++)
{
string[] line = lines[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
if (line.Length == 2)
{
string path = Uri.EscapeUriString(line[1]);
string filename = line[0];
string dir = @"C:\Users\86156\Desktop\1";
ListViewItem item = listView1.Items.Add(new ListViewItem(new string[] { (listView1.Items.Count + 1).ToString(), filename, "0", "0", "0%", "0", "0", DateTime.Now.ToString(), "等待中", line[1] }));
int id = item.Index;
dlf.AddDown(path, dir, id, id.ToString());
}
}
dlf.StartDown();
}
private void Form1_Load(object sender, EventArgs e)
{
dlf.ThreadNum = 3;//线程数,不设置默认为3
dlf.doSendMsg += SendMsgHander;//下载过程处理事件
}
private void SendMsgHander(DownMsg msg)
{
switch (msg.Tag)
{
case DownStatus.Start:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[8].Text = "开始下载";
listView1.Items[msg.Id].SubItems[7].Text = DateTime.Now.ToString();
});
break;
case DownStatus.GetLength:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[3].Text = msg.LengthInfo;
listView1.Items[msg.Id].SubItems[8].Text = "连接成功";
});
break;
case DownStatus.End:
case DownStatus.DownLoad:
this.Invoke(new MethodInvoker(() =>
{
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[2].Text = msg.SizeInfo;
listView1.Items[msg.Id].SubItems[4].Text = msg.Progress.ToString() + "%";
listView1.Items[msg.Id].SubItems[5].Text = msg.SpeedInfo;
listView1.Items[msg.Id].SubItems[6].Text = msg.SurplusInfo;
if (msg.Tag == DownStatus.DownLoad)
{
listView1.Items[msg.Id].SubItems[8].Text = "下载中";
}
else
{
listView1.Items[msg.Id].SubItems[8].Text = "下载完成";
}
Application.DoEvents();
});
}));
break;
case DownStatus.Error:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[6].Text = "失败";
listView1.Items[msg.Id].SubItems[8].Text = msg.ErrMessage;
Application.DoEvents();
});
break;
}
}
}
}