Text von eine Website kopieren?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: Text von eine Website kopieren?

BeitragMi, Apr 18, 2012 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich möchte gerne einen Text von einer Internet-Seite kopieren um ihn dann in einem Windows-Fenster anzeigen zu lassen. Dabei soll wirklich nur der Menschen-lesbare Teil (ohne die html-tags, etc.) kopiert werden.
Außerdem sollen noch befehle wie <b></b>, <u></u> oder <i></i> erkannt und ausgeführt werden...
Wie geht das? (Sorry, hatte bisher noch nicht soviel mit "online-zeug" in blitzmax zu tun und weiß daher auch nicht wonach ich suchen sollte Embarassed )
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

BladeRunner

Moderator

BeitragMi, Apr 18, 2012 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Du must Dir 'nur' einen eigenen Renderer für HTML schreiben, so geht das.
Lange Variante der Antwort:
Liess die Seite ein, filtere sämtliche Tags und interpretiere sie nach ihrer Bedeutung. Im Endeffekt erstellst Du also einen Parser. Dir sollte bewusst sein dass dies eine sehr komplexe Aufgabe ist.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ZEVS

BeitragMi, Apr 18, 2012 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Längere Variante der Antwort:
Ich würde es wie folgt machen. Du kannst die Schritte 1-3 aber auch mit BRL.httpstream überspringen:
1. Netzwerkvebindung herstellen. Die Dokumentation zu CreateTCPSocket & CO ist ausreichend. Bei BNetEx entsprechend TTcpStream.
2. HTTP-Header senden. Der folgende Text sollte reichen, um die Website http://host/path aufzurufen
Code: [AUSKLAPPEN]
GET /path HTTP/1.0
Host: host
Connection: Close

(mit Leerzeile am Ende).
3. Auslesen. Wenn es keine Weiterleitung o.ä. gibt, dann kannst du den HTTP-Header (Text bis zur ersten Leerzeile) überspringen.
4. HTML verarbeiten. Das ist wohl der schwierigste Teil. Je nach Anspruch kann der Aufwand hierbei ausarten.
Da ich nicht denke, dass du vorhast, einen Browser zu schreiben, kannst du z.B. den ganzen HTML-Header weglassen. Außerdem kannst du alles, was zwischen <!-- und --> steht, entfernen (am besten über String.Find und danach über Slices die Teile aneinanderfügen, die nicht dazugehören).
Du suchst dann das Dokument nach "<body" ab und beginnst von hier an, abwechselnd nach "<" und ">" zu suchen und so Tags und Inhalte rauszufiltern. Was zwischen den Tags <script> und </script> bzw. <style> und </style> steht, solltest du auch überspringen. Das Herausfiltern der von dir dargestellten Tags geht dann relativ einfach.
Die Anzeige läuft dann einfach über DrawText, ggf. nach dem Setzen eines anderen ImageFonts.

Schwächen dieses Modells:
- Es kann kein CSS. Hierdurch werden die Formatierungen nur durch die entsprechenden HTML-Tags erkannt, was bei manchen Websites fehlschlagen könnte.
- Das Layout wurde vernachlässigt. Man sollte nach Block-Elementen einen Zeilenumbruch einfügen, manuelle Zeilenumbrüche sollten auch erkannt werden, aber leider basieren viele Layouts auch auf Tabellen und CSS. Soviel zum Thema "ausarten"
- Manche Websites haben es nicht so mit accessability. Das heißt, vieles wird z.B. nach JavaScript ausgelagert, wo es wenig verloren hat.

Du musst daher im konkreten Fall schauen, welche Schwächen des Modells ungeeignet sind.
ZEVS

Propellator

BeitragMi, Apr 18, 2012 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
MaxGUI bietet ein HTMLView Gadget an, welches, wahrscheinlich durch irgend ein IE-Dingsbums, oder sonstwas, HTML ganz easy darstellen kann, und scheinbar auch plattformunabhängig (Also verwendet es eventuell eine andere Methode auf anderen Plattformen). Siehe dazu CreateHTMLView().
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

CO2

ehemals "SirMO"

BeitragMi, Apr 18, 2012 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, habe nun das HTML-View-Gadget ausprobiert, und das ist genau das, was ich haben wollte Very Happy... Ich habe das ganze mit der startseite dieses Portals gemacht und bei der htmlview die styleparameter "HTMLVIEW_NOCONTEXTMENU" und "HTMLVIEW_NONAVIGATE" angegeben. Trotzdem sind Buttons, etc noch auf der Seite, kann ich irgendwie die Links ausstellen, also das diese nicht mehr angezeigt werden?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Propellator

BeitragMi, Apr 18, 2012 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest als quick'n'dirty Lösung die Website erst in einen String downloaden, dann nach allen Angaben von href innerhalb des a-tags suchen und den Wert dieser Eigenschaft auf "#" setzen.
HTMLVIEW_NONAVIGATE dient eher dazu, dass der Benutzer keine Vorwärts/Zurück Buttons hat.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group