📄 unit2.pas
字号:
unit Unit2;
interface
uses
Classes,StdCtrls,Windows,SysUtils,IdHTTP,WinInet;
var
CS:TRTLCriticalSection; //定义全局临界区
type
T1 = class(TThread)
procedure AlexaGet(num:integer);
private
TmpM1,TmpM2: TMemo;
TmpNum: integer;
//procedure AlexaGet(num:integer);
protected
procedure Execute; override;
public
constructor Create(M1,M2: TMemo; Num: integer);
end;
//procedure AlexaGet(num:integer);
implementation
uses Unit1;
{ T1 }
constructor T1.Create(M1,M2: TMemo; Num: integer);
begin
TmpNum := Num; // 传递参数
TmpM1 :=M1; // 绑定控件
TmpM2 :=M2;
FreeOnTerminate := True; // 自动删除
//InitializeCriticalSection(CS); //初始化临界区
inherited Create(False); // 直接运行
end;
function GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end;
procedure T1.Execute;
begin
//EnterCriticalSection(cs);
if terminated then exit;
AlexaGet(TmpNum); //进入临界区
//LeaveCriticalSection(CS); //退出临界区
//sleep(20); //线程挂起;
end;
{procedure AlexaGet;
var
Search: TidHttp;
Values,url,Alexaurl: String;
snum,enum,i: integer;
begin
try
Search:= Tidhttp.Create(nil);
Search.ReadTimeout:= 30000;
for i:=1 to Form1.Memo1.Lines.Count do
begin
Application.ProcessMessages;
url:= Form1.memo1.Lines[i];
if (pos('net',Form1.memo1.Lines[i])>0) or (pos('com',Form1.memo1.Lines[i])>0) then
begin
snum:= pos('.',Form1.memo1.Lines[i]);
url:= copy(url,1,snum+4);
end;
Alexaurl:= 'http://data.alexa.com/data?cli=10&dat=snba&url='+url;
try
Values:= Search.Get(Alexaurl);
except
break;
end;
Form1.ProgressBar1.StepIt;
if (pos('POPULARITY',values)>0) then
begin
snum:= pos('POPULARITY',values);
Values:= copy(values,snum,length(values)-snum);
snum:= pos('TEXT',values);
enum:= pos('/>',values);
Values:= copy(values,snum+6,enum-snum-7);
Form1.Memo2.lines.add(url+' 排名为:'+values);
end;
Form1.GroupBox2.Caption:= '已经检测完'+inttostr(i)+'个网址';
end;
finally
Search.Free;
end;
end;}
procedure T1.AlexaGet(num:integer);
var
Search: TidHttp;
Values,url,Alexaurl: String;
snum,enum,i: integer;
begin
try
i:= num;
//Search.ReadTimeout:= 30000;
url:= TmpM1.Lines[i];
{if (pos('net',Form1.memo1.Lines[i])>0) or (pos('com',Form1.memo1.Lines[i])>0) then
begin
snum:= pos('.',Form1.memo1.Lines[i]);
url:= copy(url,1,snum+4);
end;}
try
Search:= Tidhttp.Create(nil);
Alexaurl:= url;
Values:= GetWebPage(Alexaurl);
except
Search.Free;
end;
Form1.ProgressBar1.StepIt;
if (pos('input',values)>0) and (pos('<!DOCTYPE HTML PUBLIC',values)=0)then
begin
// snum:= pos('POPULARITY',values);
//Values:= copy(values,snum,length(values)-snum);
//snum:= pos('TEXT',values);
//enum:= pos('/>',values);
//Values:= copy(values,snum+6,enum-snum-7);
TmpM2.lines.add(inttostr(i)+'|'+url);
end;
finally
Search.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -