|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- const
- ts_key = 'ytrf_ts';
- lts_key = 'ytrf_lts';
-
- procedure InitScriptBuffer;
- begin
- if ScriptBuffer = '' then begin
- ScriptBuffer := '<' + ts_key + '=0>_<' + lts_key + '=0>';
- end;
- end;
-
- procedure SaveIntValue(const key: string; const value: Integer);
- var
- val_expr, val_repl: string;
- begin
- val_expr := '<' + key + '=(\d+)>';
- val_repl := '<' + key + '=' + IntToStr(value) + '>';
- ScriptBuffer := RegExprReplaceMatchSubStr(ScriptBuffer, val_expr, val_repl);
- end;
-
- function GetIntValue(const key: string): Integer;
- var
- val_expr, val_str: string;
- begin
- val_expr := '<' + key + '=(\d+)>';
- val_str := RegExprGetMatchSubStr(ScriptBuffer, val_expr, 1);
- if (val_str <> '') then begin
- Result := StrToInt(val_str);
- end else begin
- Result := 0;
- end;
- end;
-
- function DownloadUrl(const AUrl: AnsiString): string;
- var
- VResponseCode: Cardinal;
- VResponseHeader, VResponseData: AnsiString;
- VRequestUrl, VRequestHeader, VPostData: AnsiString;
- begin
- Result := '';
- if Assigned(Downloader) then begin
- VRequestUrl := AUrl;
- VRequestHeader := '';
- VPostData := '';
- VResponseHeader := '';
- VResponseData := '';
- VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, VPostData, VResponseHeader, VResponseData);
- if VResponseCode = 200 then begin
- Result := VResponseData;
- end;
- end;
- end;
-
- function IsNeedUpdateTimeStamp(const ADelta: Integer): Boolean;
- var
- ts, lts: Integer;
- begin
- ts := GetUnixTime;
- lts := GetIntValue(lts_key);
- if (ts > lts + ADelta) then begin
- SaveIntValue(lts_key, ts);
- Result := True;
- end else begin
- Result := False;
- end;
- end;
-
- function GetTimeStamp(const ADelta: Integer): Integer;
- var
- ts: Integer;
- ts_val: string;
- stat_js: string;
- begin
- ts := 0;
- if IsNeedUpdateTimeStamp(ADelta) then begin
- stat_js := DownloadUrl('http://jgo.maps.yandex.net/trf/stat.js');
- if stat_js <> '' then begin
- ts_val := RegExprGetMatchSubStr(stat_js, 'timestamp:"(\d+)"', 1);
- if ts_val <> '' then begin
- ts := StrToInt(ts_val);
- SaveIntValue(ts_key, ts);
- end;
- end;
- end else begin
- ts := GetIntValue(ts_key);
- end;
- Result := ts;
- end;
-
- begin
- InitScriptBuffer;
- if GetZ <> 0 then begin
- ResultURL := GetURLBase + IntToStr(GetX) + '&y=' + IntToStr(GetY) +
- '&z=' + IntToStr(GetZ-1) + '&tm=' + IntToStr(GetTimeStamp(60));
- end else begin
- ResultURL := '';
- end;
- end.
|