gpt4 book ai didi

delphi - 如何下载ask.fm特定用户墙源代码以及所有问题和答案?

转载 作者:行者123 更新时间:2023-12-03 15:33:12 26 4
gpt4 key购买 nike

我正在尝试下载用户个人资料中的所有问题和答案,但有一个问题,如果用户有大量问题,我必须单击“显示更多”来展开该列表。如果我尝试下载例如此人的问题和答案:http://ask.fm/UnaRamekic (随机选择),我只会得到那些显示的问题,那些在我单击显示更多后显示的问题不会通过 get 请求检索。如何获取 ICS 或 Indy 组件的所有问题。谢谢。

我的代码:

procedure TForm1.sButton1Click(Sender: TObject);
begin
With HttpCli1 do begin
URL := sedit1.Text;
RequestVer := '1.1';
RcvdStream := TMemoryStream.Create;
try
Get;
except
ShowMessage('There has been an error , check your internet connection !');
RcvdStream.Free;
Exit;
end;

RcvdStream.Seek(0,0);
Memo1.Lines.LoadFromStream(RcvdStream);
RcvdStream.Free;
end;
end;

最佳答案

警告:

这种方法很蹩脚而且相当危险。它发布表单数据的方式与“显示更多”按钮类似,但它使用 while 循环(接收所有页面),该循环会重复执行,直到找到响应中的确切常量(在代码中为 LastPageResponse 常量) ),所以当页面的响应内容有时会发生变化并且该常量不会出现在响应中时,您会发现自己陷入了无限循环。

GetAllQuestions 函数中,您可以指定:

  • AUser - 是 URL 中斜杠后面的用户名
  • AFromDate - 是您想要获取结果的开始日期时间
  • AStartPage - 是您想要获取结果的 AFromDate 日期时间的起始页

GetAllQuestions 函数返回基本用户的页面,后跟换行符分隔从基本页面到您指定的时间和页面的所有页面范围内的内容。忘记注意到,您需要以与基本页面不同的方式解析附加内容,因为它不是 HTML 内容。

uses
IdHTTP;

implementation

function GetAllQuestions(const AUser: string; AFromDate: TDateTime;
AStartPage: Integer = 1): string;
var
Response: string;
LastPage: Integer;
TimeString: string;
HTTPClient: TIdHTTP;
Parameters: TStrings;
const
LineBreaks = sLineBreak + sLineBreak;
LastPageResponse = '$("#more-container").hide();';
begin
Result := '';
HTTPClient := TIdHTTP.Create(nil);
try
Result := HTTPClient.Get('http://ask.fm/' + AUser) + LineBreaks;
Parameters := TStringList.Create;
try
LastPage := AStartPage;
TimeString := FormatDateTime('ddd mmm dd hh:nn:ss UTC yyyy', AFromDate);
Parameters.Add('time=' + TimeString);
Parameters.Add('page=' + IntToStr(LastPage));
while LastPage <> -1 do
begin
Parameters[1] := 'page=' + IntToStr(LastPage);
Response := HTTPClient.Post('http://ask.fm/' + AUser + '/more',
Parameters);
if Copy(Response, Length(Response) - Length(LastPageResponse) + 1,
MaxInt) = LastPageResponse
then
LastPage := -1
else
LastPage := LastPage + 1;
Result := Result + Response + LineBreaks;
end;
finally
Parameters.Free;
end;
finally
HTTPClient.Free;
end;
end;

以及用法:

procedure TForm1.Button1Click(Sender: TObject);
begin
try
Memo1.Text := GetAllQuestions('TLama', Now);
except
on E: Exception do
ShowMessage(E.Message);
end;
end;

关于delphi - 如何下载ask.fm特定用户墙源代码以及所有问题和答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com