Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet 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
-
... 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
-
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
-
... hab ich so noch nicht verwendet, probiers einfach aus...
ata
-
... funktioniert leider nicht :( :( :(
ata
-
Hi ata,
geht leider nicht :-(
Gruss Jofa
PS Dennoch vielen Dank ... muss mal weiter versuchen ...
-
... 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
-
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
-
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
-
@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
-
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
-
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 ...
-
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
-
@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
-
@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 < ... >-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
-
BTW: Kennt jemand einen einfachen Java-Weg, um XML-codiertes HTML mit < ... >-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/
-
super link, das kann ich gut verwenden :-)
Danke und Gruss JoFa
-
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
-
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.
-
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