import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class SongList {
//歌手列表
private List<Song> songList;
//当前页面最大分页数
private int maxPage = 2;
//是否取得页面最大分页数
private boolean bool = false;
//已添加的歌曲信息
private HashSet<String> sondListed = new HashSet<String>();
public SongList(String singer){
this.songList = spiderBySinger(singer);
}
public List<Song> getSongList(){
return songList;
}
/**
* 根据歌手名称去爬页面,取得歌曲信息
*/
private List<Song> spiderBySinger(String singer){
ArrayList<Song> sosoList = new ArrayList<Song>();
Spider spider = new Spider();
for (int i = 1; i < maxPage ;i++){
String content = spider.getURLContentByUrl("http://music.soso.com/music.cgi?w=" + singer + "&pl=&co=&ch=s.m.res&sc=mus&sz=&clz=wma&pg="+i);
setMaxPageByContent(content);
sosoList.addAll(this.getSongListByContent(content));
}
sondListed.clear();
return sosoList;
}
/**
* 根据内容设置当前页面最大分页数
*/
private void setMaxPageByContent(String content){
if (!bool){
String s = ContentPattern.getStringByContentPattern(content, "<script language=\"javascript\">splitResNum(.*?);</script>");
if (s != null && !s.equals("")){
s = Replace.YYReplace(s, "(", "");
s = Replace.YYReplace(s, ")", "");
int i = Integer.parseInt(s)/20 + 1;
if (i > 50){
maxPage = 50;
}else{
maxPage = i;
}
}
bool = true;
}
}
/**
* 获得歌曲列表
*/
private ArrayList<Song> getSongListByContent(String content){
ArrayList<Song> list = new ArrayList<Song>();
Iterator<String> iterator = ContentPattern.getListByContentPattern(content, "<form id=(.*?)<tr>").iterator();
while(iterator.hasNext()){
Song song = getSongByContent(iterator.next());
if (song.getName() == null){
}else{
list.add(song);
}
}
return list;
}
/**
* 根据页面内容提取歌曲信息
*/
private Song getSongByContent(String content){
Song song = new Song();
//获得歌曲名称
String name = ContentPattern.getStringByContentPattern(content, "name=\"song\"\\s+value=\"(.*?)\">");
//判断是否已添加此歌曲
if(sondListed.contains(name.trim())){
return song;
}else{
sondListed.add(name.trim());
//获得歌曲文件地址
String address = ContentPattern.getStringByContentPattern(content, "name=\"url\"\\s+value=\"(.*?)\">");
//获得歌手
String singer = ContentPattern.getStringByContentPattern(content, "name=\"singer\"\\s+value=\"(.*?)\">");
//获得专辑
String special = ContentPattern.getStringByContentPattern(content, "name=\"album\"\\s+value=\"(.*?)\">");
song.setAddress(address);
song.setName(name);
song.setSpecial(special);
song.setSinger(singer);
return song;
}
}
}
import java.util.HashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ContentPattern {
/**
* 获得列表根据原内容和正则表达式
*/
public static HashSet<String> getListByContentPattern(String content, String pattern){
HashSet<String> list = new HashSet<String>();
// 用正则表达式编译链接的匹配模式。
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(content);
while(m.find()){
String s = m.group(1).trim();
if(!list.contains(s))
list.add(s);
}
return list;
}
/**
* 内容,根据内容和正则表达式
*/
public static String getStringByContentPattern(String content, String pattern){
String s = "";
// 用正则表达式编译链接的匹配模式。
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(content);
if(m.find()){
s = m.group(1).trim();
}
return s;
}
}
public class Song {
//歌曲名称
private String name;
//歌手名
private String singer;
//专辑
private String special;
//地址
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public String getSpecial() {
return special;
}
public void setSpecial(String special) {
this.special = special;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
分享到:
- 2007-11-07 10:42
- 浏览 2240
- 评论(2)
- 论坛回复 / 浏览 (1 / 3167)
- 查看更多
相关推荐
如果你需要从网络上寻找歌曲地址,可以访问如百度音乐(http://mp3.baidu.com/)或搜搜音乐(http://music.soso.com/)这样的平台。在搜索框内输入你想添加的歌曲名或歌手名,选择MP3格式,然后进行试听。在试听...
标题中的“Excel工具-SoSo插件_excel_excelSOSO_soso”暗示了这是一个关于Excel增强功能的插件,特别是针对需要高效处理数据的用户。SoSo插件可能提供了额外的函数、自动化工具或者数据分析功能,以提升Excel的实用...
Beta 5.1 刷搜搜经验必备工具"表明这是一个针对SOSO搜索引擎的经验获取工具的测试版本。这个工具的主要功能是帮助用户自动刷取在搜搜平台上的搜索和点击经验,从而可能提高用户的账号等级或者获得某种奖励。 描述...
【搜搜移动大厅源码】是一个关于开发移动应用的项目,主要使用Java语言编写,针对的是Soso(可能是指搜索引擎SOSO或者类似的平台)的移动端功能实现。这个源码库包含了详细的编程指导和每行代码的注释,对于学习和...
综合以上信息,我们可以推测这款软件是一个集成式音乐播放器,它整合了网易云音乐、腾讯音乐等多个平台的内容,通过一个统一的界面提供服务。用户可以通过下载并运行"soso.music.Setup.1.3.0.exe"进行安装,而"有...
《搜搜搜信息采集专家1.0中文免费版:高效新闻采集工具详解》 在数字化信息时代,数据的获取和处理成为了企业和个人获取竞争优势的重要手段。"搜搜搜信息采集专家1.0中文免费版"是一款针对特定网站新闻进行采集的...
SOSO地图API是腾讯地图提供的一个功能丰富的地理信息系统开发工具包,允许开发者在网页中嵌入地图,并提供了一系列的地图操作和地理编码服务。本文将通过一个具体的实例来详细解析SOSO地图API的应用方法,帮助读者...
《搜搜搜软件搜索引擎 v1.0:网页信息检索与数据库管理详解》 "搜搜搜软件搜索引擎 v1.0"是一款专为用户提供网页搜索功能的工具,它整合了先进的信息检索技术,能够自动在互联网上抓取相关数据并将其存储至数据库中...
总的来说,Soso地图API为开发者提供了丰富的地图功能,结合C#的编程能力,可以构建出各种地图应用,如导航系统、地理信息系统、位置服务等。正确理解和使用Soso地图API,可以让开发者在开发过程中事半功倍,提高效率...
描述中的 "canon and soso canon and soso canon and soso" 看起来像是重复强调,但没有提供具体信息。这可能是为了唤起某种音乐氛围,或者是在描述音乐作品中反复出现的主题或情感。 标签 "canon and soso" 进一步...
2. 脚本之家.url:.url文件通常用于存储网页链接,这个文件可能指向一个关于Google搜搜源代码的讨论、教程或者资源页面,提供更深入的信息和上下文。 3. 服务器软件.url:同样,这个文件可能链接到一个与搜索引擎...
在搜搜移动大厅中,序列化可能被用于多种场景,例如将用户的个性化设置、会话信息、游戏进度等信息保存到文件或数据库中,以便在应用重启后能够从上次停止的地方继续。对于搜搜移动大厅这类可能涉及复杂业务逻辑和...
基于以上信息,我们可以预期Word工具 SoSo 1.0可能涵盖以下功能和知识点: 1. **便捷操作**:插件可能提供了快速访问的工具栏或者快捷键,使用户能一键完成常用操作,如格式调整、图片处理、文字替换等。 2. **...
2.后台搜歌引擎共3套,sogou(搜狗),baidu(百度),以及soso(搜搜). 3.歌词引擎2套,分别来自红叶歌词网和百度. 4.写真系统包括桌面壁纸,套图,qq头像等,后台主引擎默认为sogou. 5.专辑列表功能,后台数据取自搜狗音乐大本...
在信息技术迅猛发展的今天,高效管理和利用文本信息已经成为提升工作效率...无论是编写代码、撰写报告还是整理数据,【SoSo】文本收集器都能发挥出其强大的文本收集、管理和快速调用功能,让文本处理变得更加得心应手。
在这个系统中,"SOSO"(可能是"搜搜"的拼音缩写)采用了百度数据库作为其数据来源,这意味着它依赖于百度已经爬取并处理过的海量网页信息。这种设计可以避免重复抓取工作,节省计算资源,并利用百度的数据优势提供更...
【Java初级项目SOSO/搜搜移动大厅】是一个适合初学者进行实践的Java编程项目,旨在帮助学习者掌握基础的Java技术,并了解如何应用于实际的业务场景中。在这个项目中,你将有机会运用到Java语言的核心特性,如类、...
这些文档通常会列出系统需求、安装过程中的注意事项、可能遇到的问题及解决方法,对于初学者尤其有用。 最后,"一些问题解答" 文件可能是常见问题和解决方案的集合,包含了用户在使用SoSo 12.0时可能会遇到的疑惑,...
在寻找合适的网络歌曲时,可以通过SOSO或百度等搜索引擎进行搜索并复制在线链接。此外,如果你的空间没有安装播放器,也不必担心,你仍然可以在主页工具条上的播放器中播放音乐。但同时也要注意,为了保证音乐播放器...