Avatar billede thenegotiator Nybegynder
07. marts 2004 - 17:09 Der er 32 kommentarer

Hent META-tags

Hej Eksperter.

Jeg står og mangler en kode(KOMPLET!), som der kan liste alle META-NAMES fra en HTML-kode.
På de fleste HTML-sider på nettet, er der META-tags øverst i HTML-koden. Det er disse META-tags, jeg er interesseret i. Jeg kunne forstille mig, at alle META-NAMES bliver listet i en LISTBOX(eller lign.), og når man trykker på navnet, vil CONTENT(indholdet), af det valgte navn blive vist.

Koden skal kunne udføres, om der bliver brugt " eller ej, eller om name kommer før content, eller omvendt.

Eksempel:
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Med "
<meta name="description" content="Beskrivelse">
<meta content="Nøgleord" name="keywords" >


Uden "
<meta name=description content=Beskrivelse>
<meta content=Nøgleord name=keywords >

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Jeg håber at spørgsmålet er forståligt, ellers må i gerne sige til!!

Jeg vil gerne give 400 for et godt svar(ved at oprette endnu er spm), da det er lidt trikky.

På forhånd tak :-)
Avatar billede thesurfer Nybegynder
07. marts 2004 - 17:43 #1
-- Ifølge Ekspertens regel §2.1.15 må der ikke udloves mere end 200 points:
[ Det er ikke tilladt at] "udlove mere end 200 point for et spørgsmål ved at dele det over flere spørgsmål."

-- Hvad bruger du til at downloade siden med?:
1) Microsoft Internet Control
2) Winsock
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 17:47 #2
Jeg bruger et API-KALD. Det er ikke noget problem at downloade den med. Men mit problem er egentlig at jeg skal kunne sotere alle META-tags'ne. Og det kunne være fedt, hvis nogen kunne komme med en komplet kode....
Avatar billede thesurfer Nybegynder
07. marts 2004 - 18:08 #3
kigger lige på det..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 18:26 #4
Lyder godt ;)
Avatar billede thesurfer Nybegynder
07. marts 2004 - 18:49 #5
Jeg har fået den her til at virke (med ""):
<meta name="description" content="Beskrivelse">
<meta content="Nøgleord" name="keywords" >

Den er svær uden "".. man skal vist bruge noget i stil med: Like "[a-zA-Z0-9]"

Jeg kigger videre på det..

Vil du ha' den nuværende kode?
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 18:52 #6
Ja, nu når du har brugt tid på det, vil jeg da gerne kigge på den ;)

Men jeg går ud fra, at du har lagt mærke til, at den skal kunne virke, uanset om Name eller Content kommer først??
Avatar billede thesurfer Nybegynder
07. marts 2004 - 18:54 #7
Ja, det har jeg.. og det tager jeg også højde for..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 18:55 #8
Okay, alle tiders :D
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:02 #9
' Til eksemplet er brugt:
'
' Command-knap, navn: Command1
' ListBox, navn: lstKey
' TextBox, navn: txtVal
'
' "D1" og "D2" = "Delimiter" 1 og 2, dvs seperatorer

Dim st, streng, tmp, tmpName, tmpValue As String ' strenge
Dim ast, astreng ' arrays ("a" = array)
Dim i As Integer ' tæller

' Et klik på Command1-knappen simulerer, at der er hentet en side ned.
' Jeg arbejder med et indhold, der ligner indholdet af "streng" (test-data)
'
' dobbelt ", dvs "", opfattes af VB som et enkelt " i en streng

Private Sub Command1_Click()
lstKey.Clear
streng = "<meta name=""description"" content=""Beskrivelse""><meta content=""Nøgleord"" name=""keywords"">"

ast = Split(streng, "<meta")
streng = ""
For i = LBound(ast) + 1 To UBound(ast)

tmp = ast(i)
tmpName = Mid(tmp, InStr(tmp, "name="))
tmpValue = Mid(tmp, InStr(tmp, "content="))


' hent "name" (navnet, derfor "tmpName")
If Mid(tmpName, Len("name=") + 1, 1) = Chr(34) Then
  tmpName = Mid(tmpName, Len("name=") + 2)
  tmpName = Left(tmpName, InStr(tmpName, Chr(34)) - 1)
  lstKey.AddItem tmpName
  streng = streng & tmpName
End If


'' hent "content" (værdien, derfor "tmpValue")
If Mid(tmpValue, Len("content=") + 1, 1) = Chr(34) Then
  tmpValue = Mid(tmpValue, Len("content=") + 2)
  tmpValue = Left(tmpValue, InStr(tmpValue, Chr(34)) - 1)
  streng = streng & "D1" & tmpValue & "D2"
End If


' slet indholdet af navnet og værdien
tmpName = ""
tmpValue = ""
Next

' fjern det sidste "D2"
streng = Left(streng, Len(streng) - 2)
End Sub

Private Sub lstKey_Click()

astreng = Split(streng, "D2")

For i = LBound(astreng) To UBound(astreng)
  If lstKey.List(lstKey.ListIndex) = Left(astreng(i), InStr(astreng(i), "D1") - 1) Then
    txtVal.Text = Mid(astreng(i), InStr(astreng(i), "D1") + 2)
  End If
Next

End Sub
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:10 #10
Det er et fint eksempel. Men mit problem er, hvis jeg møder en side, hvor der for eksempel opstår denne situation:

<      meta            name= "Name"          content  = "Content"  >

Jeg ved godt, at jeg ikke omtalte det i spørgsmålet, men det kunne være fedt, hvis det var muligt at få det til at virke, også i denne situation... :)

Det jeg mener bl.a. er, at < og meta ikke står ved siden af hinanden...
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:15 #11
"<" og "meta" skal, så vidt jeg ved, stå ved siden af hindanden.. ellers opfattes det ikke som et meta-tag, af browseren..

Det her virker med min kode:
<meta              name="Navnet"            content="værdien"      >

..og jeg har muligvis fixed den med 'uden ""'-problem..
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:18 #12
anuller det med 'fixet uden ""'-linien :)
forløbigt.. arbejder videre på det..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:19 #13
Ja, det er rigtigt nok. Det virker med det eksempel du viser. Men hvad nu hvis der opstår denne situantion??

<    meta    ....


Men jeg vil da gerne se dit sidste kode... :)
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:20 #14
Okay, havde ikke lige læst det du skrev med browseren.. :$
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:25 #15
Helt præsist, hvad bruges META-tags til?
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:31 #16
det kan bruges til informationer :)
F.eks., hvem sidens forfatter er, hvilket sprog, hvad siden indeholder, osv.. i gamle dage kiggede søgemaskinerne i meta-tagsne, for at se om de siderne havde det, der var søgt efter..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:36 #17
Okay, men hvad skal man så egentlig med dem idag?
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:40 #18
De virker stadig som beskrevet.. og er ikke begrænset til det jeg har skrevet.. :)
Søgemaskinerne bruger bare andre metoder..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:43 #19
Okay, men hvorda står det til med koden?
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:50 #20
Det går ok.. men der er et lille problem med "uden"..
Koden checker om tegnet er mellem:
a-z
A-Z
0-9

Dvs, "æ,ø,å" ikke er inklusiv.. jeg skal have fundet enmåde at fikse det på..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:52 #21
Kan man så ikke lave et lille trik med ASC eller CHR koden??
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:54 #22
Man kan gøre sådan her: "[a-zA-Z0-9,æ,Æ,ø,Ø,å,Å]"
Avatar billede thesurfer Nybegynder
07. marts 2004 - 19:55 #23
Men jeg tror at det er bedre med asc/chr koder..
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:57 #24
Okay, jeg har ikke arbejdet med LIKE før, så jeg ved egentlig ikk rigtig hvordan den virker... :D

Men er det muligt at man kan lave et ARRAY som der ser ca sådan ud:

Name1, Content1
Name2, Content2

Altså i stedet for at der står et ord på vær ARRAY- linie, står der i stedet for 2 ord, adskildt af et komma...
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 19:58 #25
Sidder lige og ekspermentere med det selv :)
Avatar billede thesurfer Nybegynder
07. marts 2004 - 20:01 #26
Kigger lige på det der med asc/chr og array.. her er noget kode der duer med og/eller uden "":

Option Explicit ' man SKAL definere/dimme variablerne = undgå stavefejl!

' Til eksemplet er brugt:
'
' Command-knap, navn: Command1
' ListBox, navn: lstKey
' TextBox, navn: txtVal
'
' "D1" og "D2" = "Delimiter" 1 og 2, dvs seperatorer

Dim streng, tmp, tmp2, tmp3, tmpName, tmpValue As String ' strenge
Dim ast, astreng ' arrays
Dim i, j As Integer ' tæller

Private Sub Command1_Click()
lstKey.Clear
streng = "<meta name=description content=""Beskrivelse""><meta content=Nøgleord name=""keywords"">"
'MsgBox streng

ast = Split(streng, "<meta")
streng = ""
For i = LBound(ast) + 1 To UBound(ast)

tmp = ast(i)
tmpName = Mid(tmp, InStr(tmp, "name="))
tmpValue = Mid(tmp, InStr(tmp, "content="))

' hent "name"
If Mid(tmpName, Len("name=") + 1, 1) = Chr(34) Then
  tmpName = Mid(tmpName, Len("name=") + 2)
  tmpName = Left(tmpName, InStr(tmpName, Chr(34)) - 1)
  lstKey.AddItem tmpName
  streng = streng & tmpName
Else
  tmp2 = ""
  tmp3 = Mid(tmpName, InStr(tmpName, "=") + 1)

  For j = 1 To Len(tmp3)
    If Mid(tmp3, j, 1) Like "[a-zA-Z0-9,æ,Æ,ø,Ø,å,Å]" Then
      tmp2 = tmp2 & Mid(tmp3, j, 1)
    Else
      Exit For
    End If
  Next
 
  tmpName = tmp2
  lstKey.AddItem tmpName
  streng = streng & tmpName
End If


'' hent "content"
If Mid(tmpValue, Len("content=") + 1, 1) = Chr(34) Then
  tmpValue = Mid(tmpValue, Len("content=") + 2)
  tmpValue = Left(tmpValue, InStr(tmpValue, Chr(34)) - 1)
  streng = streng & "D1" & tmpValue & "D2"
Else
  tmp2 = ""
  tmp3 = Mid(tmpValue, InStr(tmpValue, "=") + 1)

  For j = 1 To Len(tmp3)
    If Mid(tmp3, j, 1) Like "[a-zA-Z0-9,æ,Æ,ø,Ø,å,Å]" Then
      tmp2 = tmp2 & Mid(tmp3, j, 1)
    Else
      Exit For
    End If
  Next

  tmpValue = tmp2

  streng = streng & "D1" & tmpValue & "D2"
End If

'streng = streng & tmpName & "D1" & tmpValue & "D2"
Next
tmpName = ""
tmpValue = ""
streng = Left(streng, Len(streng) - 2)
End Sub

Private Sub lstKey_Click()
astreng = Split(streng, "D2")

For i = LBound(astreng) To UBound(astreng)
  If lstKey.List(lstKey.ListIndex) = Left(astreng(i), InStr(astreng(i), "D1") - 1) Then
    txtVal.Text = Mid(astreng(i), InStr(astreng(i), "D1") + 2)
   
  End If
Next
End Sub
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 20:12 #27
Det ser enort godt ud.. :D

Men kan problemet løses, hvis dette sker:

<meta name      =      "Navn"    content  =          "Indhold">

Altså at der er flere mellemrum mellem NAME og "NAVN"...
Avatar billede thesurfer Nybegynder
07. marts 2004 - 20:16 #28
Er det tilladt?
Avatar billede thenegotiator Nybegynder
07. marts 2004 - 20:25 #29
Det aner jeg ikke. Men lad mig sige det på den måde, at Frontpage kan læse det :)
Avatar billede thesurfer Nybegynder
07. marts 2004 - 20:36 #30
Jeg bliver nød til at smutte.. jeg kigger på det igen, enten i aften eller i morgen eftermiddag..
Avatar billede sjh Nybegynder
08. marts 2004 - 01:11 #31
du kan løse problemet med mellemrum sådan.. (måske ikke den mest geniale måde at gøre det på) ;)


Private Sub Form_Load()
  Me.Caption = SuperTrim("  <  meta      name = ""Navnet""      content = ""værdien""  >  ")
End Sub

Public Function SuperTrim(ByVal strText As String) As String
Dim strOut As String
  strOut = strText
  Do Until InStr(strOut, "  ") = 0
    strOut = Replace(strOut, "  ", " ")
  Loop
  strOut = Replace(strOut, " =", "=")
  strOut = Replace(strOut, "= ", "=")
  strOut = Replace(strOut, "< ", "<")
  SuperTrim = Replace(strOut, " >", ">")
End Function
Avatar billede thesurfer Nybegynder
08. marts 2004 - 16:11 #32
Jeg tror at det ville være meget nemmere med noget RegExp.. men det kender jeg ikke godt nok.. eller, næsten ikke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester