Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

GetUrlScript.txt 2.2 KiB

il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
il y a 54 ans
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. function GetCode(const url: AnsiString): Cardinal;
  2. var
  3. VResponseCode: Cardinal;
  4. VResponseHeader, VResponseData: AnsiString;
  5. begin
  6. Result := 1;
  7. if Assigned(Downloader) then begin
  8. VResponseHeader := '';
  9. VResponseData := '';
  10. VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData);
  11. Result := VResponseCode;
  12. end;
  13. end;
  14. var
  15. BaseUrl: string;
  16. code: Cardinal;
  17. z_ok, z_no: integer;
  18. r: integer;
  19. begin
  20. ResultURL := '';
  21. z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть
  22. z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет
  23. // Масштаба нет - говорить не о чем
  24. if getz >= z_no then exit;
  25. // Выбор зеркала
  26. r := random(3);
  27. case r of
  28. 0: BaseUrl := GetURLBase;
  29. 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru');
  30. 2: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 't.caucasia.ru');
  31. end;
  32. // Проверяем наличие масштаба
  33. if getz > z_ok then begin
  34. code := GetCode(BaseUrl+'z'+inttostr(getz)+'/');
  35. // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное"
  36. // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется.
  37. if code = 404 then z_no := getz else z_ok := getz;
  38. // Сохраняем актуализированные границы для последующих вызовов
  39. ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no);
  40. // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем
  41. if getz >= z_no then exit;
  42. end;
  43. // Ок, качаем тайлик
  44. ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg';
  45. end.