Heute beschäftige ich mich mit dem parsen von HTML Code und dem Auslesen von Tags.
Als Beispiel nehme ich hier diesen Blog
<cfscript>
http url=“https://muellermh.wordpress.com“ method=“get“ result=“x“ {};
stMatch = reFind(‚<h1.*?>(.*?)</h1>‘,x.fileContent,1,true);
strMatch = mid(x.fileContent,stMatch.pos[2],stMatch.len[2]);
dump(var=“#strMatch#“,label=“dump“,format=“html“,abort=true);
</cfscript>
Erklärung:
die Funktion http ruft die Webseite auf und speichert eine Strucktur des Ergebnisses in der Varibale x ab.
Die Strucktur beinhaltet nicht nur den Content sondern auch noch weitere Information zum eigentlichen Request.
Daher greifen wir in der Funktion refind, welche das eigentlich durchsuchen des HTML Codes übernimmt, auf die Strucktur x.fileContent zurück, da sich hier der HTML Content befindet.
Das true am Ende der reFind Funktion, ist verantwortlich dafür das ein Array mit Längen und Positionen zurückgeliefert wird in denen sich die Übereinstimmungen befinden. Pos[1] und Len[1] ist in diesem Fall der komplette H1 Tag und erst ab Position [2] finden wir den Inhalt des Tags.
Die Funktion mid „schneidet“ den HTML Code ab der Position bis zur Länge des gefundenen Eintrags aus dem Code aus und übergibt dieses an strMatch.
Nun steht in strMatch der Inhalt des ersten gefundenen H1 Tags.
Um nun alle Tags zu finden muss eine Schleife durchlaufen werden.
Dabei wird der While Schleife die aktuelle Position im Text übergeben und gegen die Länge des Contents geprüft.
Sollte keine Übereinstimmung gefunden werden können, bricht die Whileschleife ab.
<cfscript>
aMatch=[];
http url=“https://muellermh.wordpress.com“ method=“get“ result=“x“ {};
iPos = 1;
while (iPos<= len(x.fileContent))
{
stMatch = reFind(‚<h1.*?>(.*?)</h1>‘,x.fileContent,1,true);
if(arrayLen(stMatch.len) < 2) {
break;
}
arrayAppend(aMatch, mid(x.fileContent,stMatch.pos[2],stMatch.len[2]));
iPos = stMatch.pos[2]+stMatch.len[2];
}dump(var=“#aMatch#“,label=“dump“,format=“html“,abort=true);
</cfscript>