Seite 1 von 2

Titel aus HTML

Verfasst: 04.06.2006 18:33
von Alves
Wie kann ich aus einer HTML Seite den Seitentitle auslesen?
Beispiel:

Code: Alles auswählen

<html>
<title>HAllo</title>
</html>

Verfasst: 04.06.2006 18:42
von #NULL
ich würde mal tippen auf art und weise eines menschen: du such den string bzw das tag "<title>", und liest dann alle zeichen aus, bis du auf den string/das tag "</title>" stößt.

Verfasst: 04.06.2006 18:50
von Alves
HAtte ich auch schon dran gdacht, aber ich dachte es gibt was besseres?

Verfasst: 04.06.2006 19:14
von sen-me
Nein gibt es nicht...
Aber ich würds nicht ganz so machen wie beschrieben...

Weil manche Pages haben kein <title>... und vll haben manche kein <title> aber später im body haben sie <title> (quelltext z.b. auf tut seiten)

ich würde nach <head> und </head> suchen und den abschnitt bearbeiten, ob da<title> drin is

Verfasst: 04.06.2006 19:14
von winduff
das ist die beste methode....... :twisted:

Verfasst: 04.06.2006 19:25
von Alves
OKay ich such mir eine Methode aus, mach ich aber jetzt noch nicht.

Verfasst: 04.06.2006 23:35
von AND51
Such doch einfach nach <title>, egal, wo es steht. dann schneidest du es bis </title> aus, mit Mid().
Du liest das Dokument mit ReadString() oder so ein und speicherst es in string$, ich schreibe hier nämlich nur den Kern:

Code: Alles auswählen

If FindString(string$, "<title>", 1)
   titel$=Mid(string$, FindString(string$, "<title>", 1) + 7,  FindString(string$, "</title>", 1)
EndIf
So wird im gesamten HTML text gesucht, Ausnahme: der Titel wird dynamisch generiert, z. B. so:

Code: Alles auswählen

<script language="JavaScript">
   document.title="Meine homepage";
</script>
Da eigentlich kein Zeilenumbruch im Titel vorkommt (und selbst wenn, es würde nichts ausrichten oder du speicherst alle zeilen in einem String, um dieses Prob zu umgehen), kannst du dies beruhigt einsetzen.


Es gibt aber eine alternative Methode, todsicher: Du öffnest sie in einem Browser und liest den Titel, gehookt mit API natürlich, aus.

Re: Titel aus HTML

Verfasst: 05.06.2006 01:07
von Kiffi
> Wie kann ich aus einer HTML Seite den Seitentitle auslesen?

das geht recht einfach, wenn man ein wenig VBScript verwendet:

Code: Alles auswählen

Procedure.s GetHtmlTitleVbs(URL$)
  
  Dummy$ = "Set myIE= CreateObject(" + Chr(34) + "InternetExplorer.Application" + Chr(34) + ")" + #crlf$
  Dummy$ + "Do While myIE.Busy" + #crlf$
  Dummy$ + "Loop" + #crlf$
  Dummy$ + "myIE.Visible = 0" + #crlf$
  Dummy$ + "myIE.Navigate " + Chr(34) + URL$ + Chr(34) + #crlf$
  Dummy$ + "Do While myIE.ReadyState <> 4" + #crlf$
  Dummy$ + "Loop" + #crlf$
  Dummy$ + "Set oDoc = myIE.Document" + #crlf$
  Dummy$ + "myTitle = oDoc.title" + #crlf$
  Dummy$ + "Set oDoc = Nothing" + #crlf$
  Dummy$ + "Set myIE = Nothing" + #crlf$
  
  ProcedureReturn Dummy$
  
EndProcedure

Structure xVARIANT
  Type.w
  Reserved1.w
  Reserved2.w   
  Reserved3.w
  String.l
EndStructure

#VT_BSTR = 8
x.xVARIANT\Type = #VT_BSTR

Procedure.l Ansi2Uni(ansi.s)
  Size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
  Dim unicode.w(Size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), Size)
  ProcedureReturn @unicode() 
EndProcedure

Procedure.s Uni2Ansi(*Unicode.l)
  Size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
  ansi.s=Space(Size)
  WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, Size, #Null, #Null)
  ProcedureReturn ansi 
EndProcedure

Enumeration ; ScriptControlStates
  #Initialized = 0
  #Connected = 1
EndEnumeration

; DispInterfaces

Interface IScriptProcedure Extends IDispatch
  get_Name(a)
  get_NumArgs(a)
  get_HasReturnValue(a)
EndInterface

Interface IScriptProcedureCollection Extends IDispatch
  get__NewEnum(a)
  get_Item(a,b,c,d,e)
  get_Count(a)
EndInterface

Interface IScriptModule Extends IDispatch
  get_Name(a)
  get_CodeObject(a)
  get_Procedures(a)
  AddCode(a)
  Eval(a,b)
  ExecuteStatement(a)
  Run(a,b,c)
EndInterface

Interface IScriptModuleCollection Extends IDispatch
  get__NewEnum(a)
  get_Item(a,b,c,d,e)
  get_Count(a)
  Add(a,b,c)
EndInterface

Interface IScriptError Extends IDispatch
  get_Number(a)
  get_Source(a)
  get_Description(a)
  get_HelpFile(a)
  get_HelpContext(a)
  get_Text(a)
  get_Line(a)
  get_Column(a)
  Clear()
EndInterface

Interface IScriptControl Extends IDispatch
  get_Language(a)
  put_Language(a)
  get_State(a)
  put_State(a)
  put_SitehWnd(a)
  get_SitehWnd(a)
  get_Timeout(a)
  put_Timeout(a)
  get_AllowUI(a)
  put_AllowUI(a)
  get_UseSafeSubset(a)
  put_UseSafeSubset(a)
  get_Modules(a)
  get_Error(a)
  get_CodeObject(a)
  get_Procedures(a)
  _AboutBox()
  AddObject(a,b,c)
  Reset()
  AddCode(a)
  Eval(a,b)
  ExecuteStatement(a)
  Run(a,b,c)
EndInterface

CoInitialize_(0)

If CoCreateInstance_(?CLSID_ScriptControl,0,1,?IID_IScriptControl,@Object.IScriptControl) = 0
  
  Object\Reset()
  Object\put_Language(Ansi2Uni("vbscript"))
  Object\AddCode(Ansi2Uni(GetHtmlTitleVbs("http://www.purebasic.fr/german/index.php"))) ; !!! URL anpassen

  Object\Eval(Ansi2Uni("myTitle"),@x)
  myTitle.s = Uni2Ansi(x\String)

  Object\Reset()

  Object\release()
  
EndIf

CoUninitialize_()

MessageRequester("HTML-Title", myTitle)

DataSection
CLSID_ScriptControl:
Data.l $0E59F1D5
Data.w $1FBE,$11D0
Data.b $8F,$F2,$00,$A0,$D1,$00,$38,$BC
   
IID_IScriptControl:
Data.l $0E59F1D3
Data.w $1FBE,$11D0
Data.b $8F,$F2,$00,$A0,$D1,$00,$38,$BC
EndDataSection
Die Stelle, die Du lediglich ändern muss, ist mit !!! gekennzeichnet.

Das 'embedded VBScript', welches ich hier nur geringfügig angepasst
habe, ist übrigens von Bingo.

Grüße ... Kiffi

Verfasst: 05.06.2006 01:16
von edel
Schmiert bei uni2ansi ab , und im Unicode Modus gibt es eine leere
Box. CoCreateInstance wird erfolgreich ausgefuehrt , woran kann es
liegen ?

Verfasst: 05.06.2006 09:41
von HeX0R
Ist das nicht mit Cruise Missiles auf Flöhe geschossen ?

Btw.: Bei mir hier kackt nix ab.