获取网络MP3真实地址

2023-10-29

MP3网站的歌曲都采用了不同的加密方法,直接从页面的源文件中是找不到其 MP3的网址的。以下有两个public class都可独立运行,只要将其构造方法更名为main方法就可以了,同时还需要在给出的JAVA源代码中找到“//播放或下载代码...”这一行,将 其改为“Thread.sleep(1000)"延时,否则同一IP频繁的连接会遭服务器拒绝或引发服务器的防恶意搜索保护。

 

1.获取百度新歌MP3真实地址

  百度新歌的网址是http://xinge.baidu.com/,打开该页面后用查看源文件,搜索“{sid:”,会看到这样的文本:

http://xinge.baidu.com/源文件片断
{sid:'468aecfeaabbd9467fb939a2e80da58a.mp3',al:'今 生无缘',ti:'一天爱一点',si:'易欣 孙莺',cp:'华友金信子 ',da:'2010-08-03',cv:'38d9e957d5bdfb788989f1eb12239d8f.jpg',lrc:'b118977f14893a70ab4652031dd1633d.txt',dl:'511',tl:'281394',ico:0}

其中:“sid:”后面是歌曲连接、“al:”后是唱片集、“ti:”后面是歌曲标题、“si:”后面是歌手。

  • 读取“sid:”后面用一对单引号括起来的字符串,在前面加上 http://xinge.baidu.com/wgns/url/构成歌曲的链接,例如:http://xinge.baidu.com/wgns /url/468aecfeaabbd9467fb939a2e80da58a.mp3,这个链接是用于打开试听窗口的。
  • 试听窗口查看不到源文件,那就编程打开这个歌曲链接的网址并解析其源文件。在用程序接收到的源文件只有一行,在这一行字符串前面加上http://xinge.baidu.com就是MP3的真实网址了,这个网址可用于播放或下载MP3。

源代码如下:

Java代码
  1. /*  
  2.  * XingeBaidu.java - 获取'百度新歌'的MP3真实网址  
  3.  */   
  4. package  jmp123.player;  
  5.   
  6. import  java.io.BufferedReader;  
  7. import  java.io.InputStream;  
  8. import  java.io.InputStreamReader;  
  9. import  java.net.URL;  
  10. import  java.net.HttpURLConnection;  
  11.   
  12. public   class  XingeBaidu {  
  13.     public  XingeBaidu() {  
  14.         String strLine;  
  15.         int  beginIndex, endIndex, idx;  
  16.         System.out.println("连接到百度新歌\n" );  
  17.   
  18.         try  {  
  19.             URL url = new  URL( "http://xinge.baidu.com/" );  
  20.             HttpURLConnection objHttp = (HttpURLConnection) url.openConnection();  
  21.             objHttp.setRequestProperty("User-Agent""mozilla/5.0" );  
  22.             objHttp.setRequestProperty("Connection""Keep-Alive" );  
  23.             InputStream objIS = objHttp.getInputStream();  
  24.             BufferedReader objReader = new  BufferedReader( new  InputStreamReader(objIS));  
  25.   
  26.             while  ((strLine = objReader.readLine()) !=  null ) {  
  27.                 if  ((beginIndex = strLine.indexOf( "{sid:" )) != - 1 ) {  
  28.                     if  ((idx = strLine.indexOf( "al:" )) != - 1   
  29.                             && (endIndex = strLine.indexOf("',ti" )) != - 1   
  30.                             && idx + 4  < endIndex)  
  31.                         System.out.printf("[唱片集:%s]  " ,strLine.substring(idx+ 4 ,endIndex));  
  32.                     if  ((idx = strLine.indexOf( "ti:" )) != - 1   
  33.                             && (endIndex = strLine.indexOf("',si" )) != - 1   
  34.                             && idx + 4  < endIndex)  
  35.                         System.out.printf("%s" , strLine.substring(idx +  4 ,endIndex));  
  36.                     if  ((idx = strLine.indexOf( "si:" )) != - 1   
  37.                             && (endIndex = strLine.indexOf("',cp" )) != - 1   
  38.                             && idx + 4  < endIndex)  
  39.                         System.out.printf("  [歌手:%s]" ,strLine.substring(idx+ 4 ,endIndex));  
  40.                     System.out.printf("\n" );  
  41.   
  42.                     if  ((endIndex = strLine.indexOf( ".mp3" )) != - 1 ) {  
  43.                         strLine = strLine.substring(beginIndex + 6 , endIndex +  4 );  
  44.                         getMP3URL("http://xinge.baidu.com/wgns/url/"  + strLine);  
  45.                     }  
  46.                 }  
  47.             }  
  48.         } catch  (Exception e) {  
  49.             // e.printStackTrace();   
  50.         }  
  51.     }  
  52.   
  53.     private   void  getMP3URL(String surl)  throws  Exception {  
  54.         String strLine;  
  55.         URL url = new  URL(surl);  
  56.         HttpURLConnection objHttp = (HttpURLConnection) url.openConnection();  
  57.         objHttp.setRequestProperty("User-Agent""mozilla/5.0" );  
  58.   
  59.         InputStream objIS = objHttp.getInputStream();  
  60.         BufferedReader objReader = new  BufferedReader( new  InputStreamReader(objIS));  
  61.   
  62.         if  ((strLine = objReader.readLine()) !=  null ) {  
  63.             strLine = "http://xinge.baidu.com"  + strLine;  
  64.             System.out.println(strLine); //打印查找到的MP3的真实网址   
  65.             //播放或下载的代码...   
  66.         }  
  67.         objHttp.disconnect();  
  68.         objHttp = null ;  
  69.         objReader.close();  
  70.         objReader = null ;  
  71.         url = null ;  
  72.     }  
  73. }  
/*
 * XingeBaidu.java - 获取'百度新歌'的MP3真实网址
 */
package jmp123.player;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpURLConnection;

public class XingeBaidu {
	public XingeBaidu() {
		String strLine;
		int beginIndex, endIndex, idx;
		System.out.println("连接到百度新歌\n");

		try {
			URL url = new URL("http://xinge.baidu.com/");
			HttpURLConnection objHttp = (HttpURLConnection) url.openConnection();
			objHttp.setRequestProperty("User-Agent", "mozilla/5.0");
			objHttp.setRequestProperty("Connection", "Keep-Alive");
			InputStream objIS = objHttp.getInputStream();
			BufferedReader objReader = new BufferedReader(new InputStreamReader(objIS));

			while ((strLine = objReader.readLine()) != null) {
				if ((beginIndex = strLine.indexOf("{sid:")) != -1) {
					if ((idx = strLine.indexOf("al:")) != -1
							&& (endIndex = strLine.indexOf("',ti")) != -1
							&& idx + 4 < endIndex)
						System.out.printf("[唱片集:%s]  ",strLine.substring(idx+4,endIndex));
					if ((idx = strLine.indexOf("ti:")) != -1
							&& (endIndex = strLine.indexOf("',si")) != -1
							&& idx + 4 < endIndex)
						System.out.printf("%s", strLine.substring(idx + 4,endIndex));
					if ((idx = strLine.indexOf("si:")) != -1
							&& (endIndex = strLine.indexOf("',cp")) != -1
							&& idx + 4 < endIndex)
						System.out.printf("  [歌手:%s]",strLine.substring(idx+4,endIndex));
					System.out.printf("\n");

					if ((endIndex = strLine.indexOf(".mp3")) != -1) {
						strLine = strLine.substring(beginIndex + 6, endIndex + 4);
						getMP3URL("http://xinge.baidu.com/wgns/url/" + strLine);
					}
				}
			}
		} catch (Exception e) {
			// e.printStackTrace();
		}
	}

	private void getMP3URL(String surl) throws Exception {
		String strLine;
		URL url = new URL(surl);
		HttpURLConnection objHttp = (HttpURLConnection) url.openConnection();
		objHttp.setRequestProperty("User-Agent", "mozilla/5.0");

		InputStream objIS = objHttp.getInputStream();
		BufferedReader objReader = new BufferedReader(new InputStreamReader(objIS));

		if ((strLine = objReader.readLine()) != null) {
			strLine = "http://xinge.baidu.com" + strLine;
			System.out.println(strLine); //打印查找到的MP3的真实网址
			//播放或下载的代码...
		}
		objHttp.disconnect();
		objHttp = null;
		objReader.close();
		objReader = null;
		url = null;
	}
}

 

2.获取搜狗新歌Top100的MP3真实网址

  用上面的方法不能获取搜狗新歌100的MP3真实网址,原因可能是其服务 器有更严格的限制,防止用上面的方法去恶意搜索。前两天调试代码时连接上去,接收到的页面源文件中提示输入验证码,所以就不能用程序去解析其MP3网址 了,晕,接连两天都不行,不知道是前两天调试程序连接频繁搜的太猛了还是别的什么原因,触发了网站的防恶意搜索保护。

http://music.sogou.com/song/newtop_1.html源文件片断
<td width="25"><a οnclick="window.open('http://mp3.sogou.com/down.so?t=%C0%F1%CE%EF&s=%BD%AD%D3%B3%C8%D8&w=02210600','','width=428,height=394,scrollbars=no');uigsPB('consume=phb_down');return false;" href="javascript:void(0);" target="_blank" class="link" title="链接"></a></td>
 

  源代码如下,自己对比一下,就能琢磨出与第一种方法有什么不同了。总的步骤是一样的,仍是两步:

  • 连接到http://music.sogou.com/song/newtop_1.html从接收到的数据流中查找到歌曲链接。打开这个页面的源文件,查找到window.open(,它后面用一对单引号括起来的内容就是歌曲的链接,这个链接是用于打开试听窗口的。
  • 用程序连接到这个歌曲链接,从接收到的数据流中查找以http://开头、以.mp3结尾的字符串,这个字符串就是MP3的真实网址。
Java代码
  1. /*  
  2.  * SogouNewTop.java - 获取'搜狗音乐新歌TOP100'的MP3真实网址  
  3.  */   
  4. package  jmp123.player;  
  5.   
  6. import  java.io.IOException;  
  7. import  java.io.PrintWriter;  
  8. import  java.io.BufferedReader;  
  9. import  java.io.InputStreamReader;  
  10. import  java.net.Socket;  
  11.   
  12. /**  
  13.  * 创建、发送HTTP请求头  
  14.  */   
  15. class  MySocket {  
  16.     private  String strReferer;  
  17.     private  Socket socket;  
  18.     private  PrintWriter pwOut;  
  19.     BufferedReader brIn;  
  20.   
  21.     public  MySocket(String strReferer) {  
  22.         this .strReferer = strReferer;  
  23.     }  
  24.   
  25.     public   void  create(String surl) {  
  26.         int  beginIndex, endIndex, iPort =  80 ;  
  27.         String strHost = surl.substring(7 );  
  28.         endIndex = strHost.indexOf("/" );  
  29.         String strPath = strHost.substring(endIndex);  
  30.         strHost = strHost.substring(0 , endIndex);  
  31.         if ( (beginIndex = strHost.indexOf( ":" )) != - 1 ) {  
  32.             if (endIndex - beginIndex >  1 )  
  33.                 iPort = Integer.parseInt(strHost.substring(beginIndex+1 , endIndex));  
  34.             strHost = strHost.substring(0 , beginIndex);  
  35.         }  
  36.   
  37.         try  {  
  38.             socket = new  Socket(strHost, iPort);  
  39.             pwOut = new  PrintWriter(socket.getOutputStream(),  true );  
  40.   
  41.             // 构建HTTP请求头   
  42.             pwOut.println("GET "  + strPath +  " HTTP/1.1" );  
  43.             pwOut.println("Host:"  + strHost);  
  44.             pwOut.println("Referer:"  + strReferer);  
  45.             pwOut.println("Accept:*/*" );  
  46.             pwOut.println("User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" );  
  47.             pwOut.println("Connection: Keep-Alive" );  
  48.             pwOut.println();  
  49.   
  50.             // 调用socket.getInputStream方法时才发送HTTP请求头   
  51.             brIn = new  BufferedReader( new  InputStreamReader(socket.getInputStream()));  
  52.         } catch  (IOException e) {  
  53.             System.out.println("创建套接字/输入流错误。" );  
  54.             System.exit(1 );  
  55.         }  
  56.     }  
  57.   
  58.     public  BufferedReader getBufferedReader() {  
  59.         return  brIn;  
  60.     }  
  61.       
  62.     public   void  close() {  
  63.         try  {  
  64.             brIn.close();  
  65.             pwOut.close();  
  66.             socket.close();  
  67.         } catch  (IOException e) {  
  68.             System.out.println("关闭套接字错误。" );  
  69.             System.exit(1 );  
  70.         }  
  71.     }  
  72. }  
  73.   
  74. /**  
  75.  * 解析搜狗音乐新歌TOP100页面获取MP3真实网址。  
  76.  */  
  77. public   class  SogouNewTop {  
  78.     private   static   final  String strReferer =  "http://music.sogou.com/song/newtop_1.html" ;  
  79.     private  MySocket htmlSocket =  new  MySocket(strReferer);  
  80.     private  MySocket urlSocket =  new  MySocket(strReferer);  
  81.   
  82.     /*  
  83.      * 查找页面的歌曲链接  
  84.      */   
  85.     public  SogouNewTop()  throws  Exception {  
  86.         System.out.println("连接到搜狗音乐新歌TOP100\n" );  
  87.         String strline = "" ;  
  88.         htmlSocket.create(strReferer);  
  89.         BufferedReader brIn = htmlSocket.getBufferedReader();  
  90.         int  beginIndex, endIndex;  
  91.   
  92.         while  ((strline = brIn.readLine()) !=  null ) {  
  93.             // 1.查找歌曲名(可省略)   
  94.             if  ((beginIndex = strline.indexOf( "consume=phb_song" )) != - 1  ) {  
  95.                 strline = strline.substring(beginIndex);  
  96.                 if  ((beginIndex = strline.indexOf( ">" )) != - 1   
  97.                         && (endIndex = strline.indexOf("<" )) != - 1 ) {  
  98.                     strline = strline.substring(beginIndex+1 , endIndex);  
  99.                     System.out.println("[歌曲名] "  + strline);  
  100.                 }  
  101.                 continue ;  
  102.             }  
  103.   
  104.             // 2.查找歌曲链接   
  105.             if  ((beginIndex = strline.indexOf( "οnclick=\"window.open(" )) != - 1   
  106.                     && (beginIndex = strline.indexOf("http://mp3.sogou.com/down.so" )) != - 1   
  107.                     && (endIndex = strline.indexOf("'," )) != - 1 ) {  
  108.                 strline = strline.substring(beginIndex, endIndex);  
  109.                 getMP3URL(strline);  
  110.             }  
  111.         }  
  112.         htmlSocket.close();  
  113.     }  
  114.   
  115.     /**  
  116.      * 分析歌曲链接找到其真实网址  
  117.      */   
  118.     private   void  getMP3URL(String surl)  throws  Exception {  
  119.         String strline = "" ;  
  120.         urlSocket.create(surl);  
  121.         BufferedReader brIn = urlSocket.getBufferedReader();  
  122.         int  beginIndex, endIndex;  
  123.   
  124.         while  ((strline = brIn.readLine()) !=  null ) {  
  125.             if  ((beginIndex = strline.indexOf( "http://" )) != - 1   
  126.                     && (endIndex = strline.indexOf(".mp3" )) != - 1 ) {  
  127.                 strline = strline.substring(beginIndex, endIndex + 4 );  
  128.                 System.out.println(strline);    //打印MP3的真实地址   
  129.                 //播放或下载的代码放这......;   
  130.                 break ;  
  131.             }  
  132.         }  
  133.   
  134.         urlSocket.close();  
  135.     }  
  136. }  
/*
 * SogouNewTop.java - 获取'搜狗音乐新歌TOP100'的MP3真实网址
 */
package jmp123.player;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * 创建、发送HTTP请求头
 */
class MySocket {
	private String strReferer;
	private Socket socket;
	private PrintWriter pwOut;
	BufferedReader brIn;

	public MySocket(String strReferer) {
		this.strReferer = strReferer;
	}

	public void create(String surl) {
		int beginIndex, endIndex, iPort = 80;
		String strHost = surl.substring(7);
		endIndex = strHost.indexOf("/");
		String strPath = strHost.substring(endIndex);
		strHost = strHost.substring(0, endIndex);
		if( (beginIndex = strHost.indexOf(":")) != -1) {
			if(endIndex - beginIndex > 1)
				iPort = Integer.parseInt(strHost.substring(beginIndex+1, endIndex));
			strHost = strHost.substring(0, beginIndex);
		}

		try {
			socket = new Socket(strHost, iPort);
			pwOut = new PrintWriter(socket.getOutputStream(), true);

			// 构建HTTP请求头
			pwOut.println("GET " + strPath + " HTTP/1.1");
			pwOut.println("Host:" + strHost);
			pwOut.println("Referer:" + strReferer);
			pwOut.println("Accept:*/*");
			pwOut.println("User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)");
			pwOut.println("Connection: Keep-Alive");
			pwOut.println();

			// 调用socket.getInputStream方法时才发送HTTP请求头
			brIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (IOException e) {
			System.out.println("创建套接字/输入流错误。");
			System.exit(1);
		}
	}

	public BufferedReader getBufferedReader() {
		return brIn;
	}
	
	public void close() {
		try {
			brIn.close();
			pwOut.close();
			socket.close();
		} catch (IOException e) {
			System.out.println("关闭套接字错误。");
			System.exit(1);
		}
	}
}

/**
 * 解析搜狗音乐新歌TOP100页面获取MP3真实网址。
 */
public class SogouNewTop {
	private static final String strReferer = "http://music.sogou.com/song/newtop_1.html";
	private MySocket htmlSocket = new MySocket(strReferer);
	private MySocket urlSocket = new MySocket(strReferer);

	/*
	 * 查找页面的歌曲链接
	 */
	public SogouNewTop() throws Exception {
		System.out.println("连接到搜狗音乐新歌TOP100\n");
		String strline = "";
		htmlSocket.create(strReferer);
		BufferedReader brIn = htmlSocket.getBufferedReader();
		int beginIndex, endIndex;

		while ((strline = brIn.readLine()) != null) {
			// 1.查找歌曲名(可省略)
			if ((beginIndex = strline.indexOf("consume=phb_song")) != -1 ) {
				strline = strline.substring(beginIndex);
				if ((beginIndex = strline.indexOf(">")) != -1
						&& (endIndex = strline.indexOf("<")) != -1) {
					strline = strline.substring(beginIndex+1, endIndex);
					System.out.println("[歌曲名] " + strline);
				}
				continue;
			}

			// 2.查找歌曲链接
			if ((beginIndex = strline.indexOf("οnclick=\"window.open(")) != -1
					&& (beginIndex = strline.indexOf("http://mp3.sogou.com/down.so")) != -1
					&& (endIndex = strline.indexOf("',")) != -1) {
				strline = strline.substring(beginIndex, endIndex);
				getMP3URL(strline);
			}
		}
		htmlSocket.close();
	}

	/**
	 * 分析歌曲链接找到其真实网址
	 */
	private void getMP3URL(String surl) throws Exception {
		String strline = "";
		urlSocket.create(surl);
		BufferedReader brIn = urlSocket.getBufferedReader();
		int beginIndex, endIndex;

		while ((strline = brIn.readLine()) != null) {
			if ((beginIndex = strline.indexOf("http://")) != -1
					&& (endIndex = strline.indexOf(".mp3")) != -1) {
				strline = strline.substring(beginIndex, endIndex + 4);
				System.out.println(strline);	//打印MP3的真实地址
				//播放或下载的代码放这......;
				break;
			}
		}

		urlSocket.close();
	}
}

 

  MP3网站的加密方法经常变更,到目前为止这种方法可用,不能保证一直可用。应用示例到http://jmp123.sf.net/ 下载最新的程序(zip压缩包),程序用法见其中的readme.txt。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取网络MP3真实地址 的相关文章

随机推荐

  • 创建型模式5之3-Singleton单例模式的八种写法比较

    单例模式的八种写法比较 单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧
  • 打发时光的102个网站

    1 看看自己具有哪个大明星的脸型 http www play analogia com cgi bin index 2 超有意思的Flash网站 虚拟办公 http agencynet com 3 亲自动手给美女画纹身 http www c
  • nginx 详解反向代理负载均衡

    什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器 使用这种加速模式显然可以提升静态网页的访问速度 因此也可以考虑使用这种技术 让代理服务器将请求 均匀转发给多台内部Web服务器之一上 从而达到负载均衡的目的 这种代理
  • 【blender】材质球参数及各种问题

    目录 材质设置 1 共用一种材质 但是不同颜色 2 关联材质 3 无法绘制贴图 4 材质保存为资产 5 材质描边 材质设置 1 玻璃 1 共用一种材质 但是不同颜色 物体信息节点 gt 仅需改变物体颜色即可 2 关联材质 ctrl L 3
  • 网络安全——命令执行漏洞概述

    一 命令执行漏洞概述 1 基本定义 命令执行漏洞是指攻击者可以随意执行系统命令 分为远程命令执行 远程代码执行 和系统命令执行 2 原理 程序应用有时候需要调用一些执行系统命令的函数 如PHP中的system exec shell exex
  • SpringCloud组件之断路器Hystrix(hoxton版本)

    1 Hystrix 简介 在微服务架构中 根据业务来拆分成一个个的服务 服务与服务之间可以相互调用 RPC 在Spring Cloud可以用RestTemplate Ribbon和Feign来调用 为了保证其高可用 单个服务通常会集群部署
  • WinForm中如何实现panel和SplitContainer相结合进行布局呢

    相信大家都会在winform应用程序中进行布局 通常我们也会使用一下这种布局 如图 以上布局分别采用了Panel 黑色区域 和SplitContainer控件 白色区域 这布局相信大家耳熟能详了 比如VS2010不就是典型这样布局吗 但是需
  • 西瓜书之误差逆传播公式推导、源码解读及各种易混淆概念

    关键词 反向传播 BP caffe源码 im2col 卷积 反卷积 上池化 上采样 公式推导 以前看到一长串的推导公式就想直接跳过 今天上午莫名有耐心 把书上的公式每一步推导自己算一遍 感觉豁然开朗 遂为此记 sigmoid函数求导比rel
  • 最小二乘拟合,L1、L2正则化约束

    最小二乘法 又称最小平方法 是一种数学优化技术 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地求得未知的数据 并使得这些求得的数据与实际数据之间误差的平方和为最小 从维基百科中摘取的最小二乘的拟合曲线 解法 其中Y
  • TSI系统测量参数之:热膨胀

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 4 绝对热膨胀 汽轮机在开机过程中由于受热使其汽缸膨胀 如果膨胀不均匀就会使汽缸
  • 辅助汇编学习记录2

    通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP 它 们 的低 16 位就是 8086 的 AX BX CX DX SI DI SP BP 它们的含义如下 EAX 累加器 EBX 基址寄存器 Base ECX 计数
  • C语言中的短路现象

    短路现象1 比如有以下表达式 a b c 只有a为真 非0 才需要判断b的值 只有a和b都为真 才需要判断c的值 举例 求最终a b c d的值 main int a b c d a 0 b 1 c 2 d a b c printf a d
  • 桥接模式与策略模式的区别

    文章转载自 http www blogjava net wangle archive 2007 04 25 113545 html 桥接 Bridge 模式是结构型模式的一种 而策略 strategy 模式则属于行为模式 以下是它们的UML
  • 【生信】全基因组关联分析(GWAS)原理

    生信 全基因组关联分析 GWAS 原理 文章的文字 图片 代码部分 全部来源网络或学术论文 文章会持续修缮更新 仅供大家学习使用 目录 生信 全基因组关联分析 GWAS 1 前提知识介绍 1 1 最小二乘法 1 2 GWAS的数学原理 1
  • 【笔记】软件测试06——Web自动化

    阅读 石墨文档 七 web自动化测试 GUI自动化测试学习内容 了解自动化测试的相关概念 掌握Selenium Webdriver常用API 掌握自动化测试中的元素定位方法 掌握自动化测试中的元素操作 掌握自动化测试断言操作 掌握unitt
  • 使用合宙Air700e点亮一个LED灯(lua)

    相信很多朋友和我一样都团了9 9的air700e开发板 我猜有很多朋友都是买来吃灰的吧 包括我也是一样 网络上的相关资料并不是很丰富 对于像我这样的小白来说不是很友好 今天给大家演示一下使用air700e演示点灯大法 通常我们见到使用通信模
  • HTML常用标签合集

    今天来讲讲有关html的常用标签 嘎嘎有用 嘎嘎好用 目录 HTML常用标签 一 首先来讲第一种 标题标签 h1 h6 二 第二种 段落标签 p 三 第三种 hgroup标签 四 第四种 强调标签 em strong 五 第五种 引用标签
  • 关于Android向前兼容和向后兼容问题的理解

    最近在和别人交流的的时候涉及到Android开发向前兼容和向后兼容的问题一头雾水 于是乎定下心来好好研究了下 虽然所知也只是些皮毛 但是也总比啥也不知道的好 所以在此总结 一 向前兼容 1 何谓向前兼容 google公司在不断的发步新的an
  • [译] 最佳安全实践:在 Java 和 Android 中使用 AES 进行对称加密

    原文地址 Security Best Practices Symmetric Encryption with AES in Java and Android 最佳安全实践 在 Java 和 Android 中使用 AES 进行对称加密 我将
  • 获取网络MP3真实地址

    MP3网站的歌曲都采用了不同的加密方法 直接从页面的源文件中是找不到其 MP3的网址的 以下有两个public class都可独立运行 只要将其构造方法更名为main方法就可以了 同时还需要在给出的JAVA源代码中找到 播放或下载代码 这一