Odswiezenie adresu do porbania

0

Hej wszystkim

mały(?) problem ze sciaganiem pliku z sieci

potrzebuje sciagac kursy walut ze strony NBP
wykorzystuję z powodzeniem

URLDownloadToFile(nil, 'http://www.nbp.pl/kursy/kursya.html', 'd:\plik.txt', 0, nil)

poroblem jednak jest taki ze delphi nie oswieza mi strony z któej sciagam, kursy zmeniają sie koło południa, jednak programik scigami mi dane jak za pierwszym razem, jednak po wejsciu na stronę NBP (gdzie widze ze kurs sie juz zmienił) i zamknięciu przegladarki program sciagnie juz nowe dane.

Jakim sposobem zastąpić odswizenie recznym uruchomieniem przegladarki??

Jesli ktos ma jakis pomysł, bede wdzieczny

0

Użyj DeleteUrlCacheEntry z wininet do wymazania pliku z pamięci podręcznej. Przy następnym URLDownloadToFile plik będzie pobrany na nowo.

0

A musisz mieć ten plik koniecznie na dysku? Ja polecam zapisać go do pamięci poniżdza funkcją, co
korzysta z modułu WinInet. Następnie taki plik można wczytać do na przykład StringListy i używając
odpowiedniego kodu odpowiednio sparsować uzyskując kursy czy jakieś tam inne żądane informacje.

procedure DownloadToStream(const URL: string; const Strumien: TStream);
var
  Buffer : array[1..1024] of Byte;
  hSession, hURL : HINTERNET;
  dwRead : DWORD;
  pBuf : Pointer;
  dwBufLen : DWORD;
  dwIndex : DWORD;
begin
  hSession := InternetOpen('Wstaw tutaj żądany UserAgent',
  INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  Application.ProcessMessages;

  try
    hURL := InternetOpenURL(hSession, PChar(URL), nil, 0,
    INTERNET_FLAG_RELOAD, 0);
    Application.ProcessMessages;

    dwBufLen := 1024;
    dwIndex := 0;
    GetMem(pBuf, dwBufLen);

    HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                              pBuf, dwBufLen, dwIndex);

    FreeMem(pBuf, dwBufLen);
    try
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
        Strumien.WriteBuffer(Buffer, dwRead);
        Application.ProcessMessages;
      until dwRead = 0;
    finally
      InternetCloseHandle(hSession);
    end;
  finally
    InternetCloseHandle(hURL);
  end;
end;

Przykład użycia (ważne jest właśnie aby przed pobraniem i po nim ustawić pozycję Streama na zero):

var
  MemStream : TMemoryStream;
  OutputSL : TStringList;
begin
// ...
    MemStream := TMemoryStream.Create;
    MemStream.Position := 0;
    DownloadToStream('http://adres.strony.net', MemStream);
    MemStream.Position := 0;
    OutputSL := TStringList.Create;
    OutputSL.LoadFromStream(MemStream);
    MemStream.Free;
// ...
0

Dziex

w sumie WinInet DeleteUrlCacheEntry mi chyba wystarczy....:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1