Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: oson00 am 12.12.06 - 12:50:27

Titel: HTML Seiten auslesen
Beitrag von: oson00 am 12.12.06 - 12:50:27
Hallo,

ich habe eine Datenbank, in der ich einen Agenten erstellt habe, der von einem User per Aktionsbutton aufgerufen wird. Der Agent verbindet sich mit einer Internetseite und holt von dort die gesamte aufgerufenen Seite.

Ich lese die Daten aus dem Web per db.GetDocumentByURL

Wenn die Datenbank lokal liegt, funktioniert das ganze auch problemlos. Sobald die Datenbank auf dem Server installiert ist, funktioniert die Abfrage nur, wenn der Web Retriever Task auf dem Server gestartet ist.

Kann ich das ganze umgehen. Ich würde ungern den Server-Task starten, sondern lieber den Zugriff direkt vom Notes-Client ausführen lassen. Gibt es dafür eine Möglichkeit?
Titel: Re: HTML Seiten auslesen
Beitrag von: m3 am 12.12.06 - 12:55:37
1) Es gibt keine Internetseiten (http://www.leyrer.priv.at/martin/Ein_Tag_im_Leben/200611_Internetseiten.html)!

2) Du darfst halt die db von db.GetDocumentByURL nicht am Server öffnen, sondern immer nur lokal. Siehe auch die Designer-Hilfe:

Zitat
Instantiates a document in the database on which it is called and returns a NotesDocument object for it.  This method is typically used for either the Server Web Navigator or Personal Web Navigator database, but can be called on any database object.
Titel: Re: HTML Seiten auslesen
Beitrag von: oson00 am 12.12.06 - 12:58:29
1) Wie heißt es korrekt? Webseite? HTML-Seite? Datei, die über den Internet-Dienst WWW bereitgestellt wird?

2) OK, das habe ich ja nun auch schon gemerkt. Kann ich das irgendwie umgehen. Ggf. einen anderen Befehl nutzen o.ä.?
Titel: Re: HTML Seiten auslesen
Beitrag von: m3 am 12.12.06 - 13:01:11
1) Webseite, web page, Dokument im World Wide Web

2) Nein.
Titel: Re: HTML Seiten auslesen
Beitrag von: Jenson am 12.12.06 - 14:53:28
beteilige mich nur vorsichtig an dieser Diskussion :-), aber ich glaube das sowas in einem Java-Agenten machbar ist, ohne dass da ein Task auf dem Server laufen muss, oder?

Wir haben da mal was zu gemacht, ist allerdings ne Weile her und die genaue Info wie das damals war habe ich nicht mehr im kopf.

Jenson
Titel: Re: HTML Seiten auslesen
Beitrag von: MadMetzger am 12.12.06 - 15:01:28
Mit einem Java Agenten kann man das machen, ich habe da in einem Buch mal ein Programmierbeispiel zu gelesen. Das Buch heißt "Java unter Lotus Domino" von Thomas Ekert. Ich weiß aber nicht, ob es rechtens ist, diesen Code hier einfach abzutippen.

Aber zum Prinzip funktioniert das per HttpUrlConnection, die dann einen InputStream zurückliefert, den man als String auslesen kann.
Titel: Re: HTML Seiten auslesen
Beitrag von: tower2 am 15.12.06 - 06:01:35
Hier ein Besipiel:

Die Parameter (url etc) werden dem Agenten per Dokument übergeben.

Java-Agent:
Code
import lotus.domino.*;
import java.io.*; 
import java.net.*;

public class JavaAgent extends AgentBase {

	public void NotesMain() {

		try {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
			Database db = agentContext.getCurrentDatabase();
			Agent agent = agentContext.getCurrentAgent();
			Document pdoc = db.getDocumentByID(agent.getParameterDocID());
			Document ndoc = db.createDocument();
			URL url=null;

			try {

			url = new URL(pdoc.getItemValueString("url"));

				}

				catch (Error e) {e.printStackTrace();

			}

    			// Create the Connection
    			URLConnection connection = url.openConnection ();
    			// Setup the connection parameters and request properties
    			connection.setDoOutput (false);
    			// Get the URL contents
    			String contentLine; String contents = "";
    			BufferedReader reader = new BufferedReader (new InputStreamReader
			(connection.getInputStream()));
    			while (null != (contentLine = reader.readLine ())) {contents += contentLine;
			}
 			//System.out.println(contents) ; 
			ndoc.replaceItemValue ("form", "DISK");
			ndoc.replaceItemValue ("disknr", pdoc.getItemValueString("disknr"));			
			ndoc.replaceItemValue ("url", pdoc.getItemValueString("url"));
    			ndoc.replaceItemValue ("disktext", contents);
  			ndoc.save(true,false);	 
		} catch(Exception e) {e.printStackTrace();
		}
	}
}