C#实现网页多线程下载音乐

2 篇文章 0 订阅

目录

1.引言

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.程序代码


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;
            }
        }
    }
}

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值