Titel aus HTML

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Titel aus HTML

Beitrag von Alves »

Wie kann ich aus einer HTML Seite den Seitentitle auslesen?
Beispiel:

Code: Alles auswählen

<html>
<title>HAllo</title>
</html>
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

HAtte ich auch schon dran gdacht, aber ich dachte es gibt was besseres?
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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
Zuletzt geändert von sen-me am 04.06.2006 19:16, insgesamt 1-mal geändert.
Bild
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

das ist die beste methode....... :twisted:
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

OKay ich such mir eine Methode aus, mach ich aber jetzt noch nicht.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Titel aus HTML

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Schmiert bei uni2ansi ab , und im Unicode Modus gibt es eine leere
Box. CoCreateInstance wird erfolgreich ausgefuehrt , woran kann es
liegen ?
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ist das nicht mit Cruise Missiles auf Flöhe geschossen ?

Btw.: Bei mir hier kackt nix ab.
Antworten