Dane ze strony www

Oglądasz wersję archiwalną tematu "Dane ze strony www" z forum pl.comp.lang.delphi



Amadeuszek - 20 Cze 2006, 09:57
Witam

Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
tabelki do grida

Dzieki




zeman - 20 Cze 2006, 10:05

Witam

Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
tabelki do grida



http://groups.google.pl/group/pl.comp.lang.delphi?hl=pl&lr=&ie=UTF-8 +
idHTTP



Piotr Borowski - 20 Cze 2006, 10:47

Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
tabelki do grida



Wstawiasz:
WebBrowser1 : tWebBrowser
idziesz do interesujacej strony:
WebBrowser1.Navigate('www.coventry.mobstop.com');

a ponizej dwie funkcje, ktore zapisuja tresc strony do pliku.
function DownloadFile(gSourceFile, gDestFile: String): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(gSourceFile), PChar(gDestFile),
0, nil) = 0;
  except
    Result := False;
  end;
end;

function SaveDocToFile(Doc: IDispatch; const Fname: string): HResult;
var
    PFile: IPersistFile;
begin
    PFile := Doc as IPersistFile;
    Result := PFile.Save(StringToOleStr(FName), False);
end;

kiedy strona wczyta sie do konca zostanie wywolana ta metoda, a strony
zostana zapisane do pikow
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
    DownloadFile(Edit1.Text, ChangeFileExt(ParamStr(0), '.txt1'));
    SaveDocToFile(WebBrowser1.Document, ChangeFileExt(ParamStr(0),
'.txt2'));
end;

A potem to juz sie pobaw i wstaw tresc tabelki z pliku do grida ;-)



zeman - 20 Cze 2006, 11:44

| Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
| tabelki do grida

Wstawiasz:
WebBrowser1 : tWebBrowser
idziesz do interesujacej strony:
WebBrowser1.Navigate('www.coventry.mobstop.com');

a ponizej dwie funkcje, ktore zapisuja tresc strony do pliku.
function DownloadFile(gSourceFile, gDestFile: String): Boolean;
begin
 try
   Result := UrlDownloadToFile(nil, PChar(gSourceFile), PChar(gDestFile),
0, nil) = 0;
 except
   Result := False;
 end;
end;

function SaveDocToFile(Doc: IDispatch; const Fname: string): HResult;
var
   PFile: IPersistFile;
begin
   PFile := Doc as IPersistFile;
   Result := PFile.Save(StringToOleStr(FName), False);
end;

kiedy strona wczyta sie do konca zostanie wywolana ta metoda, a strony
zostana zapisane do pikow
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
begin
   DownloadFile(Edit1.Text, ChangeFileExt(ParamStr(0), '.txt1'));
   SaveDocToFile(WebBrowser1.Document, ChangeFileExt(ParamStr(0),
'.txt2'));
end;

A potem to juz sie pobaw i wstaw tresc tabelki z pliku do grida ;-)



to zart ? ;)

Pozwiodronka,
Zeman.




zeman - 20 Cze 2006, 11:49

to zart ? ;)



ok, nie bede sie czepial.. jakas konkretna odpowiedz to jest, przy pewnych
zalozeniach wystarczy, choc czesc tego kodu nie bardzo rozumiem po co.



finkis - 20 Cze 2006, 11:57
Amadeuszek wposcił taką oto wiadomość

Witam
Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
tabelki do grida
Dzieki



przeparsuj htmla (TWebBrowser chyba wystarczy)



Piotr Borowski - 20 Cze 2006, 11:59

ok, nie bede sie czepial.. jakas konkretna odpowiedz to jest, przy pewnych
zalozeniach wystarczy, choc czesc tego kodu nie bardzo rozumiem po co.



gosc pyta jak przerobic strone na grida
nie mam czasu aby pisac cos takiego, ale kiedys sie meczylem jak zapisac
zawartosc strony do pliku i znalazlem dwa rozwiazania

podzielic moimi doswiadczeniami
wydaje mi sie, ze dobranie sie do zrodla strony to najtrudniejsze, reszta to
zabawa z tekstem, przeszukanie strony pod kontem tabeli i wstawienie wynikow
do grida

po za tym jestem zwolennikiem tz. burzy mozgow, pierwsza zasada w takiej
burzy mowi, ze nie wolno krytykowac zadnego pomyslu, jezeli uwazasz, ze cos
jest zle, nie wolno ci tego krytykowac, jedyne co mozesz zrobic to podac
lepsza metode, sposob itp. ;-)



zeman - 20 Cze 2006, 15:50

| ok, nie bede sie czepial.. jakas konkretna odpowiedz to jest, przy
| pewnych zalozeniach wystarczy, choc czesc tego kodu nie bardzo rozumiem
| po co.

gosc pyta jak przerobic strone na grida
nie mam czasu aby pisac cos takiego, ale kiedys sie meczylem jak zapisac
zawartosc strony do pliku i znalazlem dwa rozwiazania

podzielic moimi doswiadczeniami
wydaje mi sie, ze dobranie sie do zrodla strony to najtrudniejsze, reszta
to zabawa z tekstem, przeszukanie strony pod kontem tabeli i wstawienie
wynikow do grida

po za tym jestem zwolennikiem tz. burzy mozgow, pierwsza zasada w takiej
burzy mowi, ze nie wolno krytykowac zadnego pomyslu, jezeli uwazasz, ze
cos jest zle, nie wolno ci tego krytykowac, jedyne co mozesz zrobic to
podac lepsza metode, sposob itp. ;-)



No dobra niech bedzie, choc krytykowac musze, zeby wskazac ze pewien sposob
nie zawsze zdaje egzamin, a mianowicie : UrlDownloadToFile jest ok, tylko ze
on pobiera dane z keszu jesli tam sa... czyli jesli dane w tabeli co
odswiezenie sie zmieniaja, to UrlDownloadToFile zwroci blede zrodla HTMLowe.
Przyklad - jesli robilbym powiedzmy program analizujacy stan licytacji na
allegro (pobieranie aktualnej ceny) i co minute robilbym
UrlDownloadToFile(adres_aukcji) to UrlDownload sie nie nadaje bo bedzie kod
strony pobieral z kaszy. (istnieje jeszcze niby jeden sposob zeby kazac nie
pobierac z keszu ale jest popaprany i na dodatek nie zawsze dziala)

function SaveDocToFile(Doc: IDispatch; const Fname: string): HResult;
z ta funkcja sie zgadzam, dobra do zapisania do pliku

jesli z webbrowsera to jeszcze mozna :

// -----------------------------------------------------
// -- wczytaj zrodlo strony do strumienia
// -----------------------------------------------------
procedure SaveWebBrowserHTMLSrcToStream(WB: TWebBrowser; Stream: TStream);
var
  Doc                 : IHTMLDocument2;
  PersistStreamInit   : IPersistStreamInit;
  Adapter             : TStreamAdapter;
begin
   if not Assigned(Stream) then exit;
   if WB.Document=nil then exit;
   Doc:= WB.Document as IHTMLDocument2;
   OleCheck(Doc.QueryInterface(IPersistStreamInit, PersistStreamInit));
   Adapter  := TStreamAdapter.Create(Stream);
   PersistStreamInit.save(Adapter, true);
   Adapter.Free;
end;
// -----------------------------------------------------

// -----------------------------------------------------
// -- wczytaj zrodlo strony do pliku
// -----------------------------------------------------
procedure SaveWebBrowserHTMLSrcToFile(WB: TWebBrowser; FileName: string);
var
   FStream : TFileStream;
begin
   try
      FStream:= TFileStream.Create(FileName, fmCreate);
      SaveWebBrowserHTMLSrcToStream(WB, FStream);
   except
      on E: EFileStreamError do
         begin {wystapil blad obslugiwania pliku} end;
   end;
   FStream.Free;
end;
// -----------------------------------------------------

// -----------------------------------------------------
// -- wczytaj zrodlo strony do stringa
// -----------------------------------------------------
function GetHTMLSrcFromWebBrowser(WB: TWebBrowser): string;
var
  SStream              : TStringStream;
begin
   try
      SStream:= TStringStream.Create('');
      SaveWebBrowserHTMLSrcToStream(WB, SStream);
   except
      on E: EStreamError do
         begin {wystapil blad obslugiwania strumyka} end;
   end;
   Result   := SStream.DataString;
   SStream.Free;
end;
// -----------------------------------------------------

// -----------------------------------------------------
// -- wczytaj to co widac w przegladarce do stringa
// -----------------------------------------------------
function GetHTMLTextFromWebBrowser(WB: TWebBrowser): string;
var
  Doc                 : IHTMLDocument2;
begin
   if WB.Document=nil then exit;
   Doc:= WB.Document as IHTMLDocument2;
   Result:= Doc.body.innerText;
end;
// -----------------------------------------------------

no ale poza tym ze mozna pobrac zrodlo z WebBrowsera to mozna sie pobawic w
dostep do tagow :
// ------------------------------------------------------
procedure FillInputFieldsInWebBrowser(WB: TWebBrowser);
var
  Doc                 : IHTMLDocument2;
  Coll     : IHTMLElementCollection;
  El        : IHTMLElement;
  i                   : integer;
begin
   if WB.Document=nil then exit;
   Doc:= WB.Document as IHTMLDocument2;
   OleCheck(Doc.all.tags('table').QueryInterface(IHTMLElementCollection,
Coll));
   for i:= 0 to Coll.length-1 do  // dla kazdej tabelki
   begin
      OleCheck(Coll.item(i, EmptyParam).QueryInterface(IHTMLElement, El));
      // tutaj mozna sie dobrac do TR i TD... nie wiem, moze ta tabelka ma
cos charakterystycznego, a moze ma nadane id ? wtedy nie trzeba iterowac po
tabelach.. mozliwosci jest duzo.
   end;
end;

Ja tam bzm i tak uzyl
zrodlo_strony_html := idHTTP.GET(adres_strony);
bez zadnego cudowania jedna linia kodu...

i pozniej najpewniej uzylbym wyrazen regularnych PCRE odpowiednich do
wzszukania zawartosci komorek

Pozwiodronka,
Zeman.



kf - 20 Cze 2006, 18:34
Ja tam bzm i tak uzyl
zrodlo_strony_html := idHTTP.GET(adres_strony);
bez zadnego cudowania jedna linia kodu...



Cudownie ...gdybys jeszcze cial cytaty - nie trzebaby bylo
tyle przewijac aby zobaczyc te jedna linijke kodu ....

pozdrawiam
kf



zeman - 20 Cze 2006, 19:00

| Ja tam bzm i tak uzyl
| zrodlo_strony_html := idHTTP.GET(adres_strony);
| bez zadnego cudowania jedna linia kodu...

Cudownie ...gdybys jeszcze cial cytaty - nie trzebaby bylo
tyle przewijac aby zobaczyc te jedna linijke kodu ....



a co wg Ciebie bylo cytatem w moim poprzednim poscie ? ;)



Amadeuszek - 21 Cze 2006, 00:43




Witam

Moze ktos zostawi przyklad jak z dowolnej strony sciagnac dane z dowolnej
tabelki do grida

Dzieki



DZIEKUJE WSZYSTKIM SERDECZNIE ZA TAK SZYBKA ODPOWIEDZ NA MOJ APEL O POMOC.

Sprawa jednak byla prosta prosze o przyklad a nie fragmenty kodu kiedy
przegladam to zaczynam sie zastanawiac czego mi w tym brakuje moze
dodatkowego komponentu moze czegos innego jako przyklad rozumie sie
dzialajacy fragment programu:

{ROZPOCZYNAJACY SIE OD}unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
{ZAKONCZONY} end.

od poprostu cala filozofia :)
programowac umiecie to widac ale jak to zawsze nastudiach powtarzaja :
"CZYTAJCIE UWARZNIE TRESC ZADANIA"



PaSkol - 21 Cze 2006, 02:44

Sprawa jednak byla prosta prosze o przyklad a nie fragmenty kodu kiedy
przegladam to zaczynam sie zastanawiac czego mi w tym brakuje moze
dodatkowego komponentu moze czegos innego jako przyklad rozumie sie
dzialajacy fragment programu:



Znaczy się ... gotowca byś chciał? Skoro się wybrało taki nick (pseudonim) to
chyba do czegoś zobowiązuje?

W wątku jest wyraźnie wymieniony z nazwy komponent jakiego należy użyć (czyli
niczego Ci nie brakuje). Korzystając z systemu pomocy Delphi można się
dowiedzieć reszty, kolejną porcję wiedzy zapewnia folder z przykładowymi
źródłami. Dokładając do tego wszystkiego Document Object Model (jak się zna
JavaScript jest prościej, jeśli nie - można doczytać na MSDN-ie) ma się
wszystko, co do szcześcia potrzeba. Jak korzystać z DOM z poziomu TWebBrowser
podał Kolega zeman.

programowac umiecie to widac ale jak to zawsze nastudiach powtarzaja :
"CZYTAJCIE UWARZNIE TRESC ZADANIA"




wyślecie".



Lukasz Sokol - 26 Cze 2006, 02:18


[...]

od poprostu cala filozofia :)
programowac umiecie to widac ale jak to zawsze nastudiach powtarzaja :
"CZYTAJCIE UWARZNIE TRESC ZADANIA"



Panu już dziękujemy.
Właśnie wylądował pan w moim KF.

el es


Co jest grane? Biurotrix warszawski a sprawa domeny WWW.WARSZAWA.pl - kolejna odslona...
Serwer z dostepem 115 kbit/s moze oferowac platne konta WWW?
KK Getin - jest już podgląd do rachunku karty w www.gb24.pl
odrzucanie na poziomie przyjmowania listu na domenę www.mojadomena.pl
Birotrixowo-polityczna unifikacja i integracja stron www ?
Dostep do konta pocztowego tylko przez www
Morena przy przychodni - co to?
  • plyta tatu
  • biuro norwegian szczecin
  • v rally
  • technikum ceramiczne
  • pekla torebka stawowa
  • port irda
  • EFS STYPENDIA
  • obudowa drewniana na studnie
  • nagrywarki dvd 3
  • Zbiór wiadomości z for dyskusyjnych || Strona Główna