2016-2017年delphi源码雅虎音乐
unit uYahooMusic;
{作者,束继涛,转载请保留原注释~~HTTP:\\www.vifachina.com,作者QQ 32240972} interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan, jpeg, OleCtrls,WinSock, WMPLib_TLB, ComCtrls,
IdBaseComponent, SHDocVw,IdComponent, ComObj, IdTCPConnection,
IdTCPClient,mshtml, ActiveX, IdHTTP, idURI,WinInet,MMSystem,
JvComponent, 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 24);
waveOutSetVolume(0,v);
end;
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', ''+edt1.Text+'&m=10', False);
xml.Send;
r := xml.responseText;
mmo1.Clear;
mmo1.Lines.Add(r);
mmo1.SelStart:= 0;
mmo1.SetFocus;
p1 := Pos('
1. 曲名:', 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',
''+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;
sc: OleVariant;
Words:string;
reg: TPerlRegEx;
num: Integer; //用 num 来计数
begin
if fYahooMusic.rb1.Checked=True then
begin
sZhi:='&m=0';
end;
IF fYahooMusic.rb2.Checked=True then
begin
sZhi:='&m=5';
end;
IF fYahooMusic.rb3.Checked=True then
begin
sZhi:='&m=4';
end;
xml := CreateOleObject('Microsoft.XMLHTTP');
xml.Open('GET',
''+sEncodeURI+''+fYahooMusic.edt1.Text+''+szhi+'', False);
xml.Send;
r := xml.responseText;
reg := TPerlRegEx.Create();
reg.Subject := r;
reg.RegEx :='http%3A%2F%2F.*\.(mp3|WMA)"';
num := 0;
fYahooMusic.lv1.Items.Clear;
while reg.MatchAgain do //MatchAgain 是下一个
begin
sc := CreateOleObject('MSScriptControl.ScriptControl.1');
sc.Language :='javascript';
R:=Copy(reg.MatchedText,0,Length(reg.MatchedText)-Length('"'));
R:=sc.Eval('unescape('''+R+''')');
fYahooMusic.lv1.Items.Add.Caption:=R;
Inc(num);
end;
Inc(iPaGe);
end;
end.