delphi – 如何下载所有问题和答案的ask.fm特定用户墙源代码?
发布时间:2020-12-15 09:13:58 所属栏目:大数据 来源:网络整理
导读:我正在尝试从用户个人资料中下载所有问题和答案,但是有一个问题,如果用户有大量问题我必须点击“显示更多”来扩展该列表.如果我尝试下载例如这个人的问题和答案: http://ask.fm/UnaRamekic(随机选择),我只会得到那些被展示的,我点击后显示更多的那些没有被
我正在尝试从用户个人资料中下载所有问题和答案,但是有一个问题,如果用户有大量问题我必须点击“显示更多”来扩展该列表.如果我尝试下载例如这个人的问题和答案:
http://ask.fm/UnaRamekic(随机选择),我只会得到那些被展示的,我点击后显示更多的那些没有被获取请求检索.我怎么能得到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; 解决方法
警告:
这种做法很蹩脚,非常危险.它类似于Show more按钮发布表单数据,但它使用while循环(接收所有页面),重复直到找到响应中的确切常量(在代码中它是LastPageResponse常量),所以当响应内容页面的页面将被更改一段时间,而常量不会出现在响应中,你会发现自己处于无限循环中. 在GetAllQuestions函数中,您可以指定: > AUser – 是URL的斜杠后面的用户名 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |