unit uYahooMusic;
{作者,束继涛,转载请保留原注释!!ponent, JvTrayIcon, Menus,PerlRegEx, Gauges, IdAntiFreezeBase,
IdTCPServer,StrUtils, WinSkinData, IdAntiFreeze;
type
TfYahooMusic = class(TForm)
pnl1: TPanel;
pnl2: TPanel;
edt1: TEdit;
btn1: TButton;
rb1: TRadioButton;
xpmn1: TXPMan;
rb2: TRadioButton;
rb3: TRadioButton;
img1: TImage;
wndwsmdplyr1: TWindowsMediaPlayer;
pnl3: TPanel;
btn2: TButton;
btn3: TButton;
TrackBar1: TTrackBar;
IdHTTP1: TIdHTTP;
chk1: TCheckBox;
jvtrycn1: TJvTrayIcon;
pm1: TPopupMenu;
N1: TMenuItem;
tmr1: TTimer;
lv1: TListView;
mmo1: TMemo;
mmo3: TMemo;
btn4: TButton;
Gauge1: TGauge;
pm2: TPopupMenu;
N2: TMenuItem;
IdAntiFreeze1: TIdAntiFreeze;
IdHTTP2: TIdHTTP;
edt2: TEdit;
lbl1: TLabel;
function GetStringBetween(const FullStr, StrLeft, StrRight: String): string;
procedure btn2Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure chk1Click(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure lv1Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdHTTP2Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdHTTP2WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure btn1Click(Sender: TObject);
private
function GetNextPage: string;
function GetHTML: string;
{ Private declarations }
public
{ Public declarations }
end;
var fYahooMusic: TfYahooMusic; sEncodeURI:string; Data : TMemoryStream; //Create,Destroy 略过 httpclient: TIdHTTP; iPaGe:Integer; iGeMing:string; DllHandle: THandle; DllPointer: Pointer; bxiazhai:Boolean; implementation //function GetHtmlDll(sZHI,text,r:string): String;external'GetHtml.dll'; //在此声明引入dll函 数,注意dll与
程序在同一路径下 {$R *.dfm}
function TfYahooMusic.GetStringBetween(const FullStr, StrLeft, StrRight: String): string; var i,n:integer; begin i:=pos(StrLeft,FullStr)+length(StrLeft); n:=pos(StrRight,FullStr)-length(StrLeft)-1; Result:=copy(FullStr,i,n); end; procedure TfYahooMusic.btn2Click(Sender: TObject); begin //wndwsmdplyr1.URL:=mmo2.Text; end; procedure TfYahooMusic.TrackBar1Change(Sender: TObject); var
t,v:Longint;
begin
// if a=0 then Exit;
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl waveOutSetVolume(0,v);
end;
24);
procedure TfYahooMusic.chk1Click(Sender: TObject);
var
xml: OleVariant;
Words:string;
a,sZhi,r: string;
p1, p2: Integer;
begin
xml := CreateOleObject('Microsoft.XMLHTTP');
xml.Open('GET', 'music.yahoo/s?q='+edt1.Text+'&;m=10', False);
xml.Send;
r := xml.responseText;
mmo1.Clear;
mmo1.Lines.Add(r);
mmo1.SelStart:= 0;
mmo1.SetFocus;
p1 := Pos('
1. 曲名: p2 := Pos('', mmo1.Text); // 找到 h2 结束标签
mmo3.Text := Copy(mmo1.Text, p1+270, p2-1380);
end;
procedure TfYahooMusic.TrackBar2Change(Sender: TObject);
var
i:Integer;
begin
end;
procedure TfYahooMusic.btn3Click(Sender: TObject);
begin
wndwsmdplyr1.controls.pause;
end;
procedure TfYahooMusic.N1Click(Sender: TObject);
begin
if fYahooMusic.Showing then
begin
fYahooMusic.Hide
end
else
fYahooMusic.Show;
end;
procedure TfYahooMusic.lv1Click(Sender: TObject);
begin
IF lv1.SelCount=0 then
Begin
Exit;
end;
wndwsmdplyr1.URL:=lv1.Selected.Caption;
edt2.Text:=RightStr(lv1.Selected.Caption,6) ;
end;
function TfYahooMusic.GetNextPage: string;
var
xml: OleVariant;
a,sZhi,r: string;
i,i1,i2,p1, p2: Integer;
item:OleVariant;
sc: OleVariant;
Words:string;
reg: TPerlRegEx;
num: Integer; //用 num 来计数
begin
if rb1.Checked=True then
begin
sZhi:='&;m=0';
end;
IF rb2.Checked=True then
begin
sZhi:='&;m=5';
end;
IF rb3.Checked=True then
begin
sZhi:='&;m=4';
end;
xml := CreateOleObject('Microsoft.XMLHTTP');
xml.Open('GET',
'music.yahoo/s?q='+sEncodeURI+''+edt1.Text+''+szhi+''+'page='+''+INTTOSTR(IPAGE)+'', False);
xml.Send;
r := xml.responseText;
reg := TPerlRegEx.Create();
reg.Subject := r; // /url=(.*)(mp3|wma)+/i
reg.RegEx :='http%3A%2F%2F.*\.(mp3|WMA)"'; //http%3A%2F%2F.*\.(mp3|WMA)"
num := 0;
while reg.MatchAgain do //MatchAgain 是下一个
begin
//sc.Eval('unescape('''+mmo2.Text+''')');
sc := CreateOleObject('MSScriptControl.ScriptControl.1');
sc.Language :='javascript';
R:=Copy(reg.MatchedText,0,Length(reg.MatchedText)-Length('"'));
R:=sc.Eval('unescape('''+R+''')');
// ShowMessage(''+R+'');
lv1.Items.Add.Caption:=R;
//lv1.Items.Add.Caption:=Copy(reg.MatchedText,Length(reg.MatchedText),Length('"'));
// lv1.Items:=Copy(reg.MatchedText,reg.MatchedText,reg.MatchedText-2);
Inc(num);
end;
// ShowMessage(IntToStr(num)); //6 FreeAndNil(reg);
end;
procedure TfYahooMusic.btn4Click(Sender: TObject);
begin
GetNextPage;
Inc(iPaGe);
end; procedure TfYahooMusic.N2Click(Sender: TObject); var stream:TMemoryStream; begin IF lv1.SelCount=0 then Begin ShowMessage('不能下载'); Exit; end; IF edt2.Text='' then Begin ShowMessage('歌名不能为空'); Exit; end; IdAntiFreeze1.OnlyWhenIdle:=False; stream:=TMemoryStream.Create; try idhTtp2.get(lv1.Selected.Caption,stream); stream.savetofile(ExtractFileDir(ParamStr(0))+'\download\'+edt2.Text); stream.Free; MessageBox(handle,'下载完毕!','提示',MB_ICONINFORMATION + MB_OK); Gauge1.MinValue:=0; Gauge1.Progress:=0; // Inc(iGeMing) except MessageBox(handle,'网络出错!','提示',MB_ICONERROR + MB_OK); stream.Free; Exit; end; end; procedure TfYahooMusic.FormCreate(Sender: TObject);
begin
//iGeMing:=0;
end;
procedure TfYahooMusic.IdHTTP2Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Gauge1.Progress:=AWorkCount;
end;
procedure TfYahooMusic.IdHTTP2WorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
Gauge1.MaxValue:=AWorkCountMax;
Gauge1.MinValue:=0;
Gauge1.Progress:=0
end;
procedure TfYahooMusic.btn1Click(Sender: TObject);
var
szhi,text,r:string;
xml: OleVariant;
begin
GetHTML;
end;
function TfYahooMusic.GetHTML: string;
var
xml: OleVariant;
a,sZhi,r: string;
i1,i2,p1, p2: Integer;
item:OleVariant;