打算做一个mp3搜索器,请高手指点迷津 ( 积分: 100 )

  • 主题发起人 主题发起人 dngjzx
  • 开始时间 开始时间
D

dngjzx

Unregistered / Unconfirmed
GUEST, unregistred user!
原理是这样的,在一文本框中输入 歌曲名或歌手名 点搜索按钮 软件自动到
搜索这个页面的
http://search.sogua.com/search/search_mk.asp?search=music&key=歌名&fmp3=1&frm=0&fwma=1&fasf=0
所有链接,并挑出其中有用的链接(指mp3或wma文件的链接)显示在一个listbox中,双击listbox中的一项,可以使用软件自带的播放控件播放文件,

请问高手除了Thttpscan和Spider控件外,还有没有其它相关的简单好用的控件,
还有播放控件我还是用D7中system页的MediaPlayer总感觉这个控件的功能太简单达不到我的要求(显示缓冲,进度控制,显示mp3信息等),请高手多多帮忙
 
原理是这样的,在一文本框中输入 歌曲名或歌手名 点搜索按钮 软件自动到
搜索这个页面的
http://search.sogua.com/search/search_mk.asp?search=music&key=歌名&fmp3=1&frm=0&fwma=1&fasf=0
所有链接,并挑出其中有用的链接(指mp3或wma文件的链接)显示在一个listbox中,双击listbox中的一项,可以使用软件自带的播放控件播放文件,

请问高手除了Thttpscan和Spider控件外,还有没有其它相关的简单好用的控件,
还有播放控件我还是用D7中system页的MediaPlayer总感觉这个控件的功能太简单达不到我的要求(显示缓冲,进度控制,显示mp3信息等),请高手多多帮忙
 
嫌分少,不要这样吧,回答有用的话,可以再加100分
 
不是有现成的嘛,干嘛还要自己写
 
呵呵,我初学delphi对啥都感兴趣,
 
把一个http://xxxxx.htm存下来不难吧。。。不会的话找下载软件的源码
之后就是字符串的分析了
一般的HTML链接是 <A HERF="http://xxxxxxxx.mp3">歌名</A>
找到类似的字段 把 歌名 放在 列表里
点击列表的时候就打开IE 链接http://xxxxxxxx.mp3就行了。。。
就是个文本搜索。。。
不过得具体网站具体分析

在线播放的话 只能用Windows MediaPlayer ActiveX 1.0
其他的都有这样那样的问题

DSpack在线播放显示已下载缓冲的方法 希望有知道的告知。。。
我可以加分
 
有了一个idhttp控件,有人说用spider我用D7没有安装成功不知道是不是版本问题,有人说用httpscan我用了,速度不行,而且使用多线程后会被mp3搜索引擎封IP(www.sogua.com就会封ip),下面是一位delphi大虾写的代码,蛮好的,就是有点小问题(得到的标题可能会是<font size=12 >阴天</font>,就是说font属性没有去掉,另外递归段的程序好像也有问题的),高手有兴趣改进一下贴上来

var
maxlayer:integer;//用于设定搜索层数(声明为全局变量)

//递归提取网页链接函数
procedure TForm1.GetLink(url:string;layer:integer);
var
source:string;
link:string;
linkText:string;
linkDir:string;
symEnd:char;
i,j:integer;
begin
source:=IdHTTP1.Get(url); //得到url的源码
try
while (Pos('<A',uppercase(source))>0) do
begin
i:=Pos('<A',uppercase(source)); //得到<A> 标记的位置
j:=Pos('</A>',uppercase(source));
//剔除<A>之前的</A>
while j<i do
begin
source[j]:='x';
j:=Pos('</A>',uppercase(source));
end;

source:='x'; //破坏当前<A>标记
//考虑原样显示标记<pre>
if (i>Pos('<PRE>',uppercase(source))) and (i<Pos('</PRE>',uppercase(source))) then
begin
continue;
end;
//判断HREF是否在<A>中
while Pos('HREF=',uppercase(source))<i do
source[Pos('HREF=',uppercase(source))]:='x';
while source<>'>' do
i:=i+1;
if i<Pos('HREF=',uppercase(source)) then
continue;
//条件成立,开始读取Link和Text
//破坏当前</A>标记
//1.读取Link
i:=Pos('HREF=',uppercase(source));
i:=i+5;
link:='';
if (source='"') or (source='''') then
begin
symEnd:=source;
i:=i+1;
end
else symEnd:=' ';
while (source<>symEnd)and (source<>'>') do
begin
link:=link+source;
i:=i+1;
end;
//2.读取Text
while source<>'>' do
i:=i+1;
i:=i+1;
linkText:='';
while i<j do
begin
linkText:=linkText+source;
i:=i+1;
end;
//保存Link和Text代码在这插入
listbox1.Items.Add(linktext);
listbox2.items.Add(link);
//***************************
//递归调用
try
if layer<MaxLayer then
begin
if (Pos('MAILTO:',uppercase(link))=0) then
begin //判断该链接是否需要递归
if Pos('HTTP://',uppercase(link))>0 then
GetLink(link,layer+1)
else
begin
linkDir:=url;
while linkDir[length(linkDir)]<>'/' do
begin
linkDir[length(linkDir)]:=' ';
linkDir:=trimright(linkDir);
end;
GetLink(linkDir+link,layer+1);
end;
end;
end;
except//对不必递归的链接进行容错
end;
end;
finally
end;
end;
 
经我修改后,字符显示也正常了,就是提取的速度慢了,不知道如何做成多线程,以加快搜索速度
 
你的想法怎么和我一样啊,可惜我用Idhttp到现在还没有实现。
好像不支持域中的代理服务器,郁闷。 我看看你的用的控件是否可以,借鉴一下,哈哈~[:D]
 
很简单啊,就看看我贴的原码就可以了,主要就这一个函数
用了idhttp控件,就是速度太慢,正在找方法加快提取速度
 
简单,先看看那个网页里面的那个搜索按钮的属性,里面有‘http://search.sogua.com/search/search_mk.asp?search=music&key=歌名’
然后用自己的歌曲名来代替嘛

ShellExecute(handle,nil, pchar('http://search.sogua.com/search/search_mk.asp?search=music&key=' + '很爱很爱你'), nil,nil,SW_SHOWNORMAL);
记得
uses ShellAPI;
 
能不能来个高手啊?
怎么这么多混分的,7456
 
你这个也通过不了域中的代理,我用了那个控件的Demo也是不可以的,昏倒~~
 
算了,结了吧,灰心了,还得靠自己啊
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部