Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: jofa am 16.01.03 - 09:48:26

Titel: HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 16.01.03 - 09:48:26
Hi @all,

ich muss ein Script schreiben, welches mir anhand einer URL den SourceText der HTML Datei in ein Text (oder RT-) Feld schreibt, hat von Euch schon einmal jemand soetwas gemacht oder hat eine IDee bzw. nen link ?

Gruss JoFa

PS: Danach muss der Text geparsed werden um einzelne TAGs in bestimmte Felder zu schreiben
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: ata am 16.01.03 - 09:52:23
... ich habe in meiner LotusScript-Seite unter Datenbanken eine Funktion abgelegt - "ImportFromFile" - mit der kannst du eine HTML-Datei in ein MultipleValue-Feld einlesen...

www.anton-tauscher.de/LotusScript (http://www.anton-tauscher.de/LotusScript)

ata
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 16.01.03 - 10:05:43
Hi ata,

vielen Dank für Deine schnelle Antwort, aber kann ich eine URL als Dateinamen zum Import angeben ?

Ich habe die HTML Datei ja leider nicht in meinem Filesystem liegen, sondern sie ist über TCPIP Port 80 per HTTP (ohne Proxy) zu erreichen ... reicht es wenn ich Dein Script so aufrufe:

--
DIM htmlRTF as Variant

htmlRTF = ImportFromFile( "http://www.ldd.com" )
--

Gruss JoFa
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: ata am 16.01.03 - 10:21:31
... hab ich so noch nicht verwendet, probiers einfach aus...

ata
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: ata am 16.01.03 - 10:55:25
... funktioniert leider nicht  :( :( :(

ata
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 16.01.03 - 11:01:22
Hi ata,

geht leider nicht :-(

Gruss Jofa

PS Dennoch vielen Dank ... muss mal weiter versuchen ...
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: ata am 16.01.03 - 11:05:08
... es gibt Tools, mit denen man Pages aus dem Web sagen kann, vielleicht findest du ja was - WebCopier zum Beispiel - denn wenn du es auf der Platte hast funktioniert meine Funktion ja...

ata
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: Rob Green am 16.01.03 - 11:27:22
evtl. interessiert Euch das:

http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/d411094f7b11f873852566b300714ccb?OpenDocument

Der Trick ist über die Web.nsf bzw. die perweb.nsf zu gehen und dort einzugeben, daß alle HTML Seiten incl. Source Code in einem eigenen Feld gespeichert werden. Der Rest des Auslesens ist dann easy.

unten seht ihr als Anhang einen Screenie von der Einstellung in meiner perweb.nsf
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 21.01.03 - 17:30:42
Hi @all,

also eines habe ich benerkt, dies scheint keine triviale rage gewesen zu sein, aber ich habe dazu zwei Möglichkeiten gefunden:

1. Mit LotsScript und wget für win32 (http://space.tin.it/computer/hherold/  <- aktualisiert) in einer Maske mit einem Feld A als TextList:

---snip---
Sub Click(Source As Button)
   Dim pid As Integer
   
   pid = Shell("wget.exe -F http://www.atnotes.de -Oy:\temp.htm",6)
   
   Dim w As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim test As Variant
   
   test = ImportFromFile( "y:\temp.htm" )
   
   Set uidoc = w.CurrentDocument
   Call uidoc.GotoField( "A" )
   Call uidoc.Inserttext(test)
   
End Sub

Function ImportFromFile( sFile As String ) As Variant
' Grossen Dank an ata (http://www.anton-tauscher.de/LotusScript/startdyn.htm)
' habe nur eine Zeile (Fett markiert) ändern müssen  ;D
    REM Eine Import-Funktion für die Praxis...
    ' # ... Rückgabewert = Array
'   On Error Goto ErrHandle
   ImportFromFile = ""
   If sFile <> "" Then
      Dim sRow As String
      Dim sTxt As String
      Dim fileNum As Integer
      Dim counter As Integer
      fileNum = Freefile()
      counter = -1
      sRow = ""
            ' # ... die Datei zum Lesen öffnen...
      Open sFile For Input As fileNum
      Do While Not Eof( fileNum )  
         Line Input #fileNum, sTxt
         counter = counter + 1
'         Redim Preserve sRow( 0 To counter )
'         sRow( counter ) = sTxt
         sRow = sRow + Chr(13) + Chr(10) + sTxt
      Loop
      Close fileNum' # ... schließen
            ' # ... Array zurückgeben...
      ImportFromFile = sRow  
      Print "Der Import ist abgeschlossen"
   End If
   Exit Function
ErrHandle:
   Close fileNum
   Print "Abbruch - es konnte keine Datei geöffnet werden"
   Exit Function
End Function
---snap---


2. Mit einem JavaAgenten:

---snip---
import lotus.domino.*;
import java.net.*;
import java.io.*;
import java.util.Vector;

public class GrabHTML extends AgentBase {

public void NotesMain()
{
   try
   {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db = agentContext.getCurrentDatabase();
      DocumentCollection dc = db.search("Form = \"RawHTML\"");

      if (dc.getCount() == 1)
      {
         Document doc = dc.getFirstDocument();

         URL url = new URL("http://www.atnotes.de");
         URLConnection conn = url.openConnection();
         conn.connect();
         InputStream is = conn.getInputStream();
         BufferedInputStream bis = new BufferedInputStream(is);

         StringBuffer buffer = new StringBuffer();
   
         int nextChar = 0;
//         String newLine=System.getProperty("line.separator");
         
         Vector stringMultiple = new Vector();

         while((nextChar = bis.read()) != -1)
         {
            if (nextChar == 10)
            {
               stringMultiple.addElement(buffer.toString());
               buffer = new StringBuffer(buffer.capacity());
            }
            else
               if (nextChar != 13)
                  buffer.append((char)nextChar);
         }
         
         stringMultiple.addElement(buffer.toString());
         
         doc.replaceItemValue("HTML", stringMultiple);
         doc.replaceItemValue("Subject", "Raw HTML");
         is.close();
         bis.close();
         doc.save();
      }

   }

   catch(MalformedURLException mal)
   {
      mal.printStackTrace();
   }
   catch(IOException ioe)
   {
      ioe.printStackTrace();
   }
   catch(Exception e)
   {
      e.printStackTrace();
   }
}
}
---snap---

Dazu wird noch eine Form benötigt namens "RawHTML" und den Felder:
- Form als Text
- Subject als Text
- HTML als TextList mit NewLine als Trennzeichen

Viel Spass und thx an ata und Rob :-)

Gruss JoFa

PS: Ich habe mich für Variante zwo entschieden  ;D ;D ;D
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: ata am 21.01.03 - 20:35:01
@JoFa

... das hat mich natürlich neugierig gemacht, und ich wollte es ausprobieren. Die Windows-Version bekomme ich leider nicht zum Laufen, ich erhalte bei wget die Fehlermeldung "File does not exist"

 :(

ata
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: wflamme am 21.01.03 - 23:01:48
Lotusscript:
GetDocumentByURL()-Methode

So einfach ist das! Und die Links der Zielseite kriegst Du auf Wunsch noch dazu als getrenntes multi-value-Item...

PS: Java geht auch, Explorer-Komponenten und div. Winsock-nahe OCXe...

(Schwärm.... ) :D
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 22.01.03 - 08:48:40
Hi ata,

hast ja Recht, ich habe den link aktualisiert: http://space.tin.it/computer/hherold/

Die Version, die ich gelinkt habe ist eine mit SSL, daher benötigst Du noch die entsprechenden LIBS, sind aber alle in dem o.a. Link erreichbar:

- wget mit / ohne SSL
- OpenSSL Libs

Gruss Jofa

PS: Zu der Lösung 1 habe ich noch ein Problem entdeckt, die shell ist oft noch nicht fertig, bevor der Import läuft ...
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 22.01.03 - 08:51:23
Hi wflamme,

mit LotusScript habe ich es versucht, aber bin immer gescheitert und in den diversen Newsgroups (LDD und Google) habe ich meist nur tote Threads gefunden, die auf einen Fehler in Notes schliessen liessen, daher habe ich mich für die o.a. Farianten entschieden :-)

Nun muss ich den HTML Source nur noch parsen um Links zu filtern, die in ein Profil-Doku geschrieben werden um dann als Parameter für ein Java News Aplett dienen  ;D

Gruss JoFa
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: NotesBug am 22.01.03 - 11:34:18
@wflamme

GetDocumentByURL() funktioniert nur wenn auf dem Server der Web Retriever  läuft. Wenn Du die daten ohne diesen Task haben willst, scheint man um einen Java agenten nicht herum zu kommen. Ich habe auf diesem Weg eine XML Datei angefordert und gleich im Java geparst.

NotesBug
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: wflamme am 22.01.03 - 15:39:32
@wflamme

GetDocumentByURL() funktioniert nur wenn auf dem Server der Web Retriever  läuft. Wenn Du die daten ohne diesen Task haben willst, scheint man um einen Java agenten nicht herum zu kommen. Ich habe auf diesem Weg eine XML Datei angefordert und gleich im Java geparst.

Geht AFAIK auch mit lokaler perweb.nsf, diese muß nur in der Abeitsumgebung unter Erweitert /WebRetriever eingetragen sein (die deutschen Namen sind jetzt aus dem Bauch raus, ich habe die US-Version).

Damit funkt das Klasse, wenn auch etwas langsam - ich betreibe mein DominoDarkSide so...

Java hat natürlich bessere Performance, aber die perweb-Lösung ist natürlich saubequem  ;D

BTW: Kennt jemand einen einfachen Java-Weg, um XML-codiertes HTML mit &lt; ... &gt;-Tags in Plain-Text zu wandeln? Probleme:
- Umgang mit ungültigem HTML
- ich will alle hyperlink-Infos behalten, also <a href="..."> darf nicht weggeworfen werden
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: wflamme am 28.01.03 - 07:51:50
BTW: Kennt jemand einen einfachen Java-Weg, um XML-codiertes HTML mit &lt; ... &gt;-Tags in Plain-Text zu wandeln? Probleme:
- Umgang mit ungültigem HTML
- ich will alle hyperlink-Infos behalten, also <a href="..."> darf nicht weggeworfen werden

... hab was gefunden:

http://htmlparser.sourceforge.net/
Titel: Re:HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: jofa am 28.01.03 - 10:33:25
super link, das kann ich gut verwenden :-)

Danke und Gruss JoFa
Titel: Re: HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: pippo am 09.03.07 - 13:04:50
Hallo,
habe den JavaCode bei einer "normalen Seite" getestet. Er hat sofort funktioniert.
> Kompliment!

Nun habe ich aber eine aspSeite, wo ich einen Zeitraum übergeben kann. Als Ergebnis werden Daten geliefert, welche für diesen Zeitraum zutreffen.

Leider funktioniert hier der Agent nicht mehr.

Hat jemand eine Idee wo ich ansetzen kann

Schönen Tag
Titel: Re: HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: flaite am 10.03.07 - 18:54:25
habe den JavaCode bei einer "normalen Seite" getestet. Er hat sofort funktioniert.
> Kompliment!
...
Nun habe ich aber eine aspSeite, wo ich einen Zeitraum übergeben kann. Als Ergebnis werden Daten geliefert, welche für diesen Zeitraum zutreffen.

Leider funktioniert hier der Agent nicht mehr.
Hat jemand eine Idee wo ich ansetzen kann
Ja. Deine funktioniert/funktioniert nicht Dichotomie lädt durchaus gutwillige Mitglieder dieses Forums, nicht gerade ein dir zur helfen.
Kannst du das viellicht mal ein bischen genauer erläutern.
Werden Exception geworfen? Wenn ja, bitte Stacktrace posten. Oder noch besser, du postest deinen Source code.
Titel: Re: HTML per LotusScript anhand der URL in ein Feld als SourceText einlesen
Beitrag von: pippo am 12.03.07 - 11:00:55
Hallo,
jetzt läuft es!

Grund: nicht nur Rechte auf Server erhöhen, sondern auch "Laufzeit-Sicherheitsstufe des Agenten (2. Reiter der Agenteneigenschaften) erhöhen "

Schönen Tag