AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke HTML einer URL ohne TWebBrowser und Indys
Thema durchsuchen
Ansicht
Themen-Optionen

HTML einer URL ohne TWebBrowser und Indys

Ein Thema von Schwedenbitter · begonnen am 15. Nov 2010 · letzter Beitrag vom 16. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 16:34
Hallo,

ich möchte mich zunächst erklären, weil häufig der Vorwurf kommt, man würde Spam-Bots oder ähnliches programmieren, wenn man eine Frage wie ich stellt. Ich habe hier eine TK-Anlage, die im Netz erreichbar ist und eine html-Oberfläche zur Verfügung stellt. In/mit dieser werden unter anderem auch Faxe als tif-Dateien abgerufen. Für letzteres eignet sich hervorragend die Funktion TDownLoadURL().

Um aber herauszufinden, ob und wo (URL) neue Faxe da sind, muss ich den html-Code der Seite auswerten und zuvor natürlich auslesen. Im Moment mache ich das so:
Delphi-Quellcode:
Uses
  Classes, // für TStringStream
  Forms, // für TApplication
  SHDocVw, // für TWebBrowser
  ActiveX; // für IStream und IPersistStreamInit

Function GetHTMLCode(Const URL: WideString): String;
Var
  WB : TWebBrowser;
  sa : IStream;
  ss : TStringStream;
  ps : IPersistStreamInit;
Begin
  Result:='';
  WB:=TWebBrowser.Create(nil);
  Try
    WB.Navigate(URL);
    While (WB.ReadyState < 3) Do
      Application.ProcessMessages;
    If Assigned(WB.Document) Then
    Begin
      ss:=TStringStream.Create('');
      Try
        ps:=(WB.Document As IPersistStreamInit);
        sa:=TStreamAdapter.Create(ss, soReference) As IStream;
        If Succeeded(ps.Save(sa, True)) Then
          Result:=ss.DataString;
      Finally
        ss.Free;
      End;
    End;
  Finally
    WB.Free;
  End;
End;
Mich stört aber, dass dieser Code das Gegenteil von resourceschonend ist und neben CPU-Last auch unheimlich RAM verbraucht. Ich habe bei meinen Recherchen schon die Indys als mögliche Alternative ausgemacht. Allerdings kann ich die unter TurboDelphi nicht installieren. Ich könnte Komponenten ggf. zwar zur Laufzeit erzeugen. Allerdings wüsste ich zunächst nicht, in welcher Unit ich suchen muss und vielleicht ist das auch mit Kanonen auf Spatzen schießen.

Gibt es eine Möglichkeit, den html-Code einer Webseite auch ohne TWebBrowser und ohne Indys abzufragen?

Ich vermute dies, weil TDownLoadURL() vergleichsweise schlank daherkommt. Ich bin aber daran gescheitert, den entsprechenden Code für mein Problem nutzbar zu machen. Ich finde es auch wenig elegant, den html-Code zunächst als Datei zu speichern und dann wieder zu laden etc. pp.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 16:45
Hallo,

vielleicht hilft Dir dieser Eintrag getHTML aus der CodeLib weiter?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 19:37
Mach ein Sleep(0) in die Schleife. Und was ist ReadyState 3?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 20:35
Und was ist ReadyState 3?
READYSTATE_INTERACTIVE

http://msdn.microsoft.com/en-us/libr...29(VS.85).aspx
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 20:37
Eigentlich wollte ich darauf hinweisen, dass man bessr sprechende Konstanten verwenden sollte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 20:58
ich hätte hier noch eine Version die kein Problem mit Unicode hat.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses ExtActns;
{$R *.dfm}
Function GetTempDir:String;
var
p:Pchar;
begin
  p:=stralloc(255);
  GetTempPath(255,p);
  Result:=p;
  strdispose(p);
end;

Function MakeSaveURL(const AURL:String):String;
begin
  if Pos('http',LowerCase(AURL))=0 then Result := 'http://' +AURL else Result := AURL;
end;


function DownloadURLToFile(const AURL, AFileName : TFileName) : boolean;
begin
  Result:=True;

  with TDownLoadURL.Create(nil) do
  try
    URL := MakeSaveURL(AURL);
    Filename := AFileName;
    try
      ExecuteTarget(nil);
    except
      Result:=False;
    end;
  finally
    Free;
  end;
end;


Function GetURLContentAsString(const AURL:String;Var OK:Boolean):String;
var
  sl:TStringList;
  tmpf:String;
begin
  sl:=TStringList.Create;
  OK := false;
  try
  tmpf := IncludeTrailingBackSlash(gettempdir) + FormatDateTime('~hh_zzz',now) + '.tmp';
  if DownloadURLToFile(AURL,tmpf) then
    begin
       sl.LoadFromFile(tmpf);
       deletefile(PChar(tmpf));
       Result := sl.Text;
       ok := true;
    end;
  finally
   sl.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  b:Boolean;
begin
    Memo1.Text := GetURLContentAsString('http://twitter.com/#!/bummi_w',b);
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 16. Nov 2010, 09:50
Zunächst einmal Danke für Eure zahlreichen Hinweise/Vorschläge!

Ich hatte vergessen zu erwähnen, dass ich natürlich ein Polling machen muss/will. Die TK-Anlage meldet sich leider nicht, wenn ein neues Fax eingegangen ist. Aus diesem Grunde muss ich immer wieder nachsehen.
Die Standard-Software, zur der ich nicht wirklich positives berichten kann, macht ein Polling aller 3 Sekunden. Das hatte ich übernommen und festgestellt, dass es über TWebBrowser eben wegen der Resourcen nicht machbar ist.

@Klaus01
Der Code sieht schon einmal gut aus. Er tut was er soll, auch wenn z.B. 2 Variablen nicht benutzt werden (hRequest : hInternet und datalen : Cardinal). Danke dafür. Ich hatte auch schon gesucht, war aber darauf nicht gestoßen.
Ich werde mal ausgiebig testen, ob sich das zum Pollen eignet.

@Luckie
Du hast Recht in Bezug auf die Konstante. [AUSREDE] Aber ich bin/war am Testen und habe den Code einfach quick und dirty aus mehreren Fundstellen zusammengesucht und "gesäubert".[/AUSREDE] Dann kommt eben so etwas raus. In meinem Programm werde ich später im sauberen Code für meine Nachfolger die Konstante verwenden; ich schwöre.

@Bummi
Den Code habe ich schon. Trotzdem Danke. Ich benutze ihn aber eben wegen des Polling nicht. Das Schreiben auf die Platte ist das langsamste von allem.

Ziel ist es später, meine App in eine vorhandene Server-Software zu integrieren, über die unsere gesamte Bürokommunikation läuft. Das muss skalierbar bleiben und muss daher auf das Schonen von Resourcen getrimmt werden. Natürlich will ich das Ganze in einen Thread auslagern. Aber schon der Grund-Code sollte schlank und schnell sein.
Wenn ich das könnte, würde ich mich in Assembler oder so probieren...

Nochmals Danke.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 16. Nov 2010, 10:57
Mal bei den Indy's suchen?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#9

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 16. Nov 2010, 10:59
...Ich habe bei meinen Recherchen schon die Indys als mögliche Alternative ausgemacht. Allerdings kann ich die unter TurboDelphi nicht installieren. Ich könnte Komponenten ggf. zwar zur Laufzeit erzeugen. Allerdings wüsste ich zunächst nicht, in welcher Unit ich suchen muss und vielleicht ist das auch mit Kanonen auf Spatzen schießen....
Die Indys sind bei Turbo Delphi schon dabei, nur kannst du Sie nicht in der Tool-Palette sehen

Delphi-Quellcode:
uses ..., IdHTTP;

...
...

var
  http: TIdHttp;
  quelltext: String;
begin
  http := TIdHttp.create(nil);
  try
    quelltext := http.get('http://url-oder-ip.zu/deiner/weboberflaeche.html');
  finally
    http.free;
  end;
end;
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: HTML einer URL ohne TWebBrowser und Indys

  Alt 16. Nov 2010, 15:19
Hallo,

ich habe es nun über den Code von dem von Klaus01 genannten Link gelöst und werde deshalb hier nicht mehr weiter fragen. Danke nochmal an alle.

Nun stehe ich aber vor dem nächsten Problem:
Einmal runtergeladen muss ich die Faxe auf der TK-Anlage auch löschen. Dort passen nicht viel in den Speicher. Die Weboberfläche macht das über ein Java-Script, welches ich entsprechend auch ausführen müsste. Ich möchte daher an dieser Stelle nur auf das neue Thema verlinken.

Gruß, Alex

[edit]Bei Bedarf stelle ich meine Unit für das Abrufen der Faxe von der DeTeWe OpenCom X320 per PM zur Verfügung.[/edit]
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz