吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9639|回复: 34
收起左侧

[Java 转载] JavaGUI解析网易云音乐真实URL及下载

  [复制链接]
bianqi 发表于 2017-11-12 12:48
有空随便封装了一个Java版GUI程序,下载可以在线听但是无法下载的音乐!
[Java] 纯文本查看 复制代码
package org.bianqi.seat.gui;

import java.awt.Container;
import java.awt.Frame;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.bianqi.song.music.wangyi.Song163;


public class MainGUI {
	public static void main(String[] args) {
		new MainFrame("解析+下载网易音乐");
	}
}

class MainFrame extends JFrame{

	private static final long serialVersionUID = -5115488791553705781L;
	JDialog jDialog = null;
	JMenuBar mb = null;
	JMenu m = null;
	JMenu m1 = null;
	JMenuItem closeItem = null;
	JMenuItem aboutItem = null;
	JMenuItem useItem = null;
	JLabel lbl1 = null;
	JLabel lbl2 = null;
	JLabel bll3 = null;
	JTextField txt = null;
	JTextField txt2 = null;
	JButton btn1 = null;
	JButton btn2 = null;
	ImageIcon img = null;
	JLabel imgLabel = null;
	Container contain = null;
	Frame frame = this;
	public MainFrame(String title) {
		this.init(title);
	}
	
	public void init(String title){
		Toolkit t = Toolkit.getDefaultToolkit();
		Image i = t.getImage("title.png");
		this.setIconImage(i);
		this.setVisible(true);
		this.setLocation(400, 200);
		this.setSize(850, 120);
		this.setTitle(title);
		this.setResizable(false);
		mb =new JMenuBar();//创建菜单栏
		m = new JMenu("开始");//创建“文件”菜单    
		m1 = new JMenu("关于");
		closeItem = new JMenuItem("退出");//创建“退出"菜单项

		closeItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int showConfirmDialog = JOptionPane.showConfirmDialog(frame, "你确定退出?", "退出", JOptionPane.YES_NO_OPTION); 
				if(showConfirmDialog != 1){
					System.exit(0);
				}
			}
		});
		
		aboutItem =new JMenuItem("关于");
		aboutItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(frame, "      开发者软件BQ", "关于", JOptionPane.INFORMATION_MESSAGE); 
			}
		});
		
		useItem = new JMenuItem("使用说明");
		useItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(frame, "粘贴网易云音乐播放URL点击解析或者下载即可!比如播放url http://music.163.com/#/song?id=63650 ", "使用说明", JOptionPane.INFORMATION_MESSAGE);
			}
		});
		
        m.add(closeItem);//将“退出”菜单项添加到“文件”菜单上
        m1.add(useItem);
        m1.add(aboutItem);
        mb.add(m);//将文件添加到菜单栏上
        mb.add(m1);
        this.setJMenuBar(mb);//将此窗体的菜单栏设置为指定的菜单栏。
        
        //网易
        lbl1 = new JLabel("网易云播放页面URL:"); 
        lbl1.setBounds(10, 11, 120, 30);
        lbl2 = new JLabel("解析后的地址:"); 
        lbl2.setBounds(380, 11, 120, 30);
        txt = new JTextField(10); 
        txt.setBounds(130,11, 240, 25);
        txt2 = new JTextField(10);
        txt2.setBounds(490, 11, 150, 25);
        btn1 = new JButton("解析");
        btn1.setBounds(680, 10, 60, 30);
        btn2 = new JButton("下载");
        btn2.setBounds(750, 10, 60, 30);
        
        //整个的背景图片
        img = new ImageIcon("timg.jpg");  
        imgLabel = new JLabel(img);  
        this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));  
        imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());  
        contain = this.getContentPane();  
        ((JPanel) contain).setOpaque(false);   
        contain.setLayout(null);
        
        contain.add(txt);  
        contain.add(txt2);
        contain.add(lbl1);
        contain.add(lbl2);  
        contain.add(btn1);
        contain.add(btn2);
        
        /**
         *解析
         */
        btn1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String text = txt.getText();
				if(StringUtils.isNotBlank(text)){
					try {
						String url = Song163.resolve(text);
						if(url.equals("xxoo")){
							JOptionPane.showMessageDialog(frame, "解析失败了!!你确定你的URL拷贝对了吗?", "握草", JOptionPane.ERROR_MESSAGE);
						}else{
							txt2.setText(url);
						}
					} catch (Exception e1) {
						JOptionPane.showMessageDialog(frame, "解析失败了!!你确定你的URL拷贝对了吗?", "握草", JOptionPane.ERROR_MESSAGE);
					}
				}else{
					JOptionPane.showMessageDialog(frame, "            SB URL呢??", "握草", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
        
        //下载!
        btn2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String text = txt.getText();
				try {
					String url2 = Song163.resolve(text);
					if(StringUtils.isNotBlank(text) && !url2.equals("xxoo")){
						JFileChooser jfc = new JFileChooser();
						jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
						jfc.showDialog(new JLabel(), "选择目录");
						File file=jfc.getSelectedFile();
						String dir = file.getAbsolutePath();
						// 开通IO流下载
						try {
							String url = Song163.resolve(text);
							InputStream openStream = new URL(url).openStream();
							File file1 = new File(dir+Song163.songTitle(text)+".mp3");
							if(!file1.exists()){
								file1.createNewFile();
							}
							FileOutputStream output = new FileOutputStream(file1);
							IOUtils.copy(openStream, output);
							if(file1.length() > 0){
								JOptionPane.showMessageDialog(frame, "下载成功!", "恭喜", JOptionPane.INFORMATION_MESSAGE);
							}
						} catch (Exception e1) {
							e1.printStackTrace();
							JOptionPane.showMessageDialog(frame, "居然下载失败了 可能是C盘没有写权限或者是网络存在问题或者是你拷贝错了URL", "握草", JOptionPane.ERROR_MESSAGE);
						}
					}else{
						JOptionPane.showMessageDialog(frame, "URL没有输入或者你的URL输入有问题!", "握草", JOptionPane.ERROR_MESSAGE);
					}
				} catch (Exception e2) {
					  JOptionPane.showMessageDialog(frame, "你确定你的URL拷贝对了吗?", "握草", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setVisible(true); 
	}
}


2.运行后的结果:

图片1

图片1

3.附件
链接:http://pan.baidu.com/s/1bpeyZ4F 密码:z0y1
后期会加入解析主流音乐网站的url!


免费评分

参与人数 12吾爱币 +11 热心值 +11 收起 理由
EMBARK + 1 + 1 用心讨论,共获提升!
bk少年 + 1 + 1 热心回复!
chengdt1989 + 1 + 1 我很赞同!
qwe110120v + 1 + 1 <font style="vertical-align: inherit;"><font style=
neogao + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
Deeplylovel + 1 我很赞同!
阿周0624 + 1 + 1 我很赞同!
劣酒先生 + 1 + 1 已答复!
山大王9989 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
864575135 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Horrendous + 1 + 1 感谢分享~~~
-空城旧梦- + 1 已答复!

查看全部评分

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

 楼主| bianqi 发表于 2017-11-12 15:20
JuiceKai 发表于 2017-11-12 13:20
如果楼主能把import org.bianqi.song.music.wangyi.Song163;这个库分享出来就更好了。。
现在分享的这个没 ...

代码我正在整理中 不过解密的 算法你可以看我的GitHub http://github.com/20100507 点一个stat哦~谢谢 如果你会一点 GUI 基本上QQ音乐和网易云百度 虾米和酷我 酷狗 都可以解析 完成!
JuiceKai 发表于 2017-11-13 21:49
bianqi 发表于 2017-11-12 15:20
代码我正在整理中 不过解密的 算法你可以看我的GitHub http://github.com/20100507 点一个stat哦~谢谢 如 ...

我本身就是做java开发的,主要想看一下你的原理,因为之前用python写类似的东西,但是现在网易云换掉了所有接口,而且增加了爬接口的难度,就一直懒的搞
Horrendous 发表于 2017-11-12 12:59
17638420062 发表于 2017-11-12 13:08
谢谢分享,终于等到开放注册
山大王9989 发表于 2017-11-12 13:08
厉害了楼主?,感谢分享
19960319 发表于 2017-11-12 13:09 来自手机
谢谢分享
wakichie 发表于 2017-11-12 13:16
真是大神啊
JuiceKai 发表于 2017-11-12 13:18
感谢分享!
silencefun 发表于 2017-11-12 13:19
楼主贴的这部分 代码 没有意义啊。。。应该贴如何解析地址那部分。。。那才四重要
JuiceKai 发表于 2017-11-12 13:20
如果楼主能把import org.bianqi.song.music.wangyi.Song163;这个库分享出来就更好了。。
现在分享的这个没啥大用。。
这个解析库github开源么?
zhiyi1120 发表于 2017-11-12 13:21

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

本版积分规则

返回列表

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

GMT+8, 2024-11-15 13:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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