Avatar billede hansen Nybegynder
10. juli 2000 - 16:41 Der er 13 kommentarer og
1 løsning

Hent sideoags med W3Socket

Er der en der kan hjælpe med at sætte et script sammen som kan hente en specifik urls <META NAME="description" ..., TITLE, og <META NAME="keywords"...
for efterfølgende at vise dem i et formsæt på siden.

Komponent der er til rådighed på server er W3SOCKET fra http://www.dimac.se
Avatar billede tigerdyr Nybegynder
10. juli 2000 - 17:06 #1
Jeg ville nu nok bruge FileSystemObject... Open for Reading, læs en linie af gangen og søg linien igennem efter <META NAME="KeyWords" osv.
Avatar billede ortrak Nybegynder
11. juli 2000 - 02:56 #2
okay - here it goes. En længere smøre.


Jeg har lavet det så du selv burde være i stand til at gøre med dine outputs som du vil:
Jeg har brugt www.altavista.com som eksempel.






<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<SCRIPT LANGUAGE=JSCRIPT RUNAT=SERVER>
  /*
 
      HTTPSocket
      by Joshua J Baker - josh@cobaltcreative.com
      Designed for the Socket.dll by Dimac
     
  */
 
  function HTTPSocket_2(URL){
      /* Define the main properties */
      this.URL = URL;
      this.Port = 80;
      this.Method = "GET";
      this.Protocol = "HTTP";
      this.Headers = new Object();
      this.FullContent = "";
      this.Head = "";
      this.Content = "";
      this.SendBuffer = "";
      this.StoreBuffer = "";
      this.Version = "1.0";
      this.TimeOut = 10000;
     
      /* Parse the URL */     
      URL = URL.split(":");
      switch (URL.length) {
        case 3:
        this.Protocol = URL[0].toUpperCase ();
            this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Port = parseInt(URL[2]).toString ();
            this.Query = URL[2].substring (this.Port.length);
      break;
        case 2:
        this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Protocol = (URL[1].indexOf("//")==0?URL[0]:this.Protocol).toUpperCase ();
            this.Port = URL[1].indexOf("//")==0?this.Port:parseInt(URL[1]).toString ();
            this.Query = URL[1].indexOf("//")==0?URL[1].substring(2+this.Host.length): (URL[1].split("/").length>1?URL[1].substring (this.Port.length):"/");
    break;
        case 1:
        this.Host = URL[0].split("/")[0]
        this.Query = URL[0].indexOf("/")<URL[0].length-1&&URL [0].indexOf("/")!=-1?URL[0].substring (this.Host.length):"/";
      }
     
      this.AddHeader = function(Name, Value){
        this.Headers[Name] = Value;
      }
     
      this.RemoveHeader = function(Name) {
        this.Headers[Name] = false;
      }
     
      this.Execute = function() {
        this.SendBuffer = this.Method + " " + this.Query + " " + this.Protocol + "/" + this.Version + "\n";
        for (prop in this.Headers)
        this.SendBuffer += !this.Headers[prop]?"":prop + ": " + this.Headers[prop] + "\n";
        this.SendBuffer += "\n";
        var Socket = Server.CreateObject ("Socket.TCP");
          Socket.TimeOut = this.TimeOut;
      Socket.Host = this.Host + ":" + this.Port;
        Socket.Open ();
        Socket.SendText (this.SendBuffer);
Socket.WaitForDisconnect ();
        this.StoreBuffer = Socket.Buffer;
    Socket.Close ();
        var j = this.StoreBuffer.indexOf("\n\r\n"), k = this.StoreBuffer.indexOf ("\n\n");
        this.Head = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(0, j - 1):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(0, k):this.StoreBuffer;
    this.Content = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(j + 3):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(k + 3):this.StoreBuffer;
    return this.Content;
      }
  }
 
  function HTTPSocket(URL){
      /* For creating a HTTPSocket in VBScript */
      return new HTTPSocket_2(URL);
  }




</SCRIPT>

<%
Set Sock = HTTPSocket("www.altavista.com")
Sock.AddHeader "User-Agent", "My Browser"
Output = Sock.Execute()
output = LCase(output)


do while not AtEndOfSearch
if temppos = "" then
temppos = 1
end if

startpos = InStr(temppos, output, "<meta")

if startpos <> 0 then
endpos = InStr(startpos, output, ">")
if endpos <> 0 then

curmetatag = Mid(output, startpos, endpos-startpos+1)
if InStr(curmetatag, "description") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 9
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-description:</b> " & curmetawords & "<br><br>"
end if
end if

else
if InStr(curmetatag, "keywords") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 10
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-keywords:</b> " & curmetawords & "<br><br>"
end if
end if


end if
end if


temppos = endpos
end if
else
AtEndOfSearch = True
end if

loop
%>

</body>
</html>





/ortrak
Avatar billede hansen Nybegynder
11. juli 2000 - 09:45 #3
Hej Ortrak
Det virker fint med Altavista, men tilsyneladende ikke med andet ???

Er der en naturlig forklaring ?

Hilsen Hansen
Avatar billede ortrak Nybegynder
11. juli 2000 - 12:11 #4
Hej Anders

Jeg prøvede med nogle forskellige sites, og de fleste fungerede fint. De som ikke virkede, var pga. problemer med index-filen. Der er jo mange sites der ikke har deres meta-tags i default index-filen, men derimod på en anden side, som der redirectes til fra index-siden.
Desuden var der nogen webservere som ikke tillod at man ikke angav et specifikt fil-navn.
En løsning kunne måske være at skrive www.etellerandet.dk/index.html , www.etellerandet.dk/index.htm, www.etellerandet.dk/default.asp, osv.

Hvor mange sites har du prøvet?


/ortrak
Avatar billede hansen Nybegynder
11. juli 2000 - 13:16 #5
Hej Ortrak
Hvis jeg prøver på Jubii.dk og Altavista.com, tv2.dk så virker det fint, men prøver jeg f.eks. på voksenforsjov.dk, netcoders.dk, aspin.com, activeserverpages.dk, cgiresource.com m.f., når jeg kigger koden igennem, så virker det som alt er som det skal være !

Kan den ikke se forskel på store/små bogstaver - "indlejrede" tag eller uden ?

Kan den også fange det mellem TITLE taggen ?

Fortsat god dag
Hilsen Hansen
Avatar billede hansen Nybegynder
11. juli 2000 - 13:18 #6
Prøver lige igen !
---
Hej Ortrak
Hvis jeg prøver på Jubii.dk og Altavista.com, tv2.dk så virker det fint, men prøver jeg f.eks. på voksenforsjov.dk, netcoders.dk, aspin.com, activeserverpages.dk, cgiresource.com m.f. så duer den ikke, når jeg kigger kildekoden igennem, så virker det som alt er som det skal være !

Har også prøvet med at skrive url/default.asp osv...

Kan den ikke se forskel på store/små bogstaver - "indlejrede" tag eller uden ?

Kan den også fange det mellem TITLE taggen ?

Fortsat god dag
Hilsen Hansen
Avatar billede ortrak Nybegynder
11. juli 2000 - 13:42 #7
hele outputtet bliver lavet om til små bogstaver.

Den kan også godt fange TITLE-tagget med nogle enkelte modifikationer.


BTW: Jeg gik lige ind på netcoders.dk. Der er ingen meta-tags i sourcen. Det er jo nok derfor den ikke kan finde dem :-]


/ortrak
Avatar billede hansen Nybegynder
12. juli 2000 - 10:00 #8
Hej Ortrak
Er det noget du kan lave det med TITLE taggen ?

Hilsen Hansen
Avatar billede ortrak Nybegynder
12. juli 2000 - 10:22 #9
yup. Du får den lidt senere. Er lige på arbejde.


/ortrak
Avatar billede hansen Nybegynder
12. juli 2000 - 12:58 #10
Fint, pointene er på næsten vej.

Takker.
Avatar billede ortrak Nybegynder
12. juli 2000 - 15:32 #11
så er Title også inkluderet:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<SCRIPT LANGUAGE=JSCRIPT RUNAT=SERVER>
  /*
 
      HTTPSocket
      by Joshua J Baker - josh@cobaltcreative.com
      Designed for the Socket.dll by Dimac
     
  */
 
  function HTTPSocket_2(URL){
      /* Define the main properties */
      this.URL = URL;
      this.Port = 80;
      this.Method = "GET";
      this.Protocol = "HTTP";
      this.Headers = new Object();
      this.FullContent = "";
      this.Head = "";
      this.Content = "";
      this.SendBuffer = "";
      this.StoreBuffer = "";
      this.Version = "1.0";
      this.TimeOut = 10000;
     
      /* Parse the URL */     
      URL = URL.split(":");
      switch (URL.length) {
        case 3:
        this.Protocol = URL[0].toUpperCase ();
            this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Port = parseInt(URL[2]).toString ();
            this.Query = URL[2].substring (this.Port.length);
      break;
        case 2:
        this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Protocol = (URL[1].indexOf("//")==0?URL[0]:this.Protocol).toUpperCase ();
            this.Port = URL[1].indexOf("//")==0?this.Port:parseInt(URL[1]).toString ();
            this.Query = URL[1].indexOf("//")==0?URL[1].substring(2+this.Host.length): (URL[1].split("/").length>1?URL[1].substring (this.Port.length):"/");
    break;
        case 1:
        this.Host = URL[0].split("/")[0]
        this.Query = URL[0].indexOf("/")<URL[0].length-1&&URL [0].indexOf("/")!=-1?URL[0].substring (this.Host.length):"/";
      }
     
      this.AddHeader = function(Name, Value){
        this.Headers[Name] = Value;
      }
     
      this.RemoveHeader = function(Name) {
        this.Headers[Name] = false;
      }
     
      this.Execute = function() {
        this.SendBuffer = this.Method + " " + this.Query + " " + this.Protocol + "/" + this.Version + "\n";
        for (prop in this.Headers)
        this.SendBuffer += !this.Headers[prop]?"":prop + ": " + this.Headers[prop] + "\n";
        this.SendBuffer += "\n";
        var Socket = Server.CreateObject ("Socket.TCP");
          Socket.TimeOut = this.TimeOut;
      Socket.Host = this.Host + ":" + this.Port;
        Socket.Open ();
        Socket.SendText (this.SendBuffer);
Socket.WaitForDisconnect ();
        this.StoreBuffer = Socket.Buffer;
    Socket.Close ();
        var j = this.StoreBuffer.indexOf("\n\r\n"), k = this.StoreBuffer.indexOf ("\n\n");
        this.Head = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(0, j - 1):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(0, k):this.StoreBuffer;
    this.Content = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(j + 3):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(k + 3):this.StoreBuffer;
    return this.Content;
      }
  }
 
  function HTTPSocket(URL){
      /* For creating a HTTPSocket in VBScript */
      return new HTTPSocket_2(URL);
  }




</SCRIPT>

<%
Set Sock = HTTPSocket("www.altavista.com")
Sock.AddHeader "User-Agent", "My Browser"
output = Sock.Execute()
oldoutput = output
output = LCase(output)


do while not AtEndOfSearch
if temppos = "" then
temppos = 1
end if

startpos = InStr(temppos, output, "<meta")

if startpos <> 0 then
endpos = InStr(startpos, output, ">")
if endpos <> 0 then

curmetatag = Mid(output, startpos, endpos-startpos+1)
if InStr(curmetatag, "description") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 9
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-description:</b> " & curmetawords & "<br><br>"
end if
end if

else
if InStr(curmetatag, "keywords") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 10
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-keywords:</b> " & curmetawords & "<br><br>"
end if
end if


end if
end if


temppos = endpos
end if
else
AtEndOfSearch = True
end if

loop


startpos = InStr(output, "<title>")
if startpos <> 0 then
endpos = InStr(output, "</title>")
if endpos <> 0 then
curtitle = Mid(oldoutput, startpos+7, endpos-startpos)
response.write "<b>titel:</b> " & curtitle & "<br><br>"
end if
end if
%>

</body>
</html>





/ortrak

Avatar billede ortrak Nybegynder
12. juli 2000 - 15:36 #12
har lige rettet en lille bug.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<SCRIPT LANGUAGE=JSCRIPT RUNAT=SERVER>
  /*
 
      HTTPSocket
      by Joshua J Baker - josh@cobaltcreative.com
      Designed for the Socket.dll by Dimac
     
  */
 
  function HTTPSocket_2(URL){
      /* Define the main properties */
      this.URL = URL;
      this.Port = 80;
      this.Method = "GET";
      this.Protocol = "HTTP";
      this.Headers = new Object();
      this.FullContent = "";
      this.Head = "";
      this.Content = "";
      this.SendBuffer = "";
      this.StoreBuffer = "";
      this.Version = "1.0";
      this.TimeOut = 10000;
     
      /* Parse the URL */     
      URL = URL.split(":");
      switch (URL.length) {
        case 3:
        this.Protocol = URL[0].toUpperCase ();
            this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Port = parseInt(URL[2]).toString ();
            this.Query = URL[2].substring (this.Port.length);
      break;
        case 2:
        this.Host = URL[1].indexOf("//")==0?URL[1].substring(2).split("/")[0]:URL [0];
          this.Protocol = (URL[1].indexOf("//")==0?URL[0]:this.Protocol).toUpperCase ();
            this.Port = URL[1].indexOf("//")==0?this.Port:parseInt(URL[1]).toString ();
            this.Query = URL[1].indexOf("//")==0?URL[1].substring(2+this.Host.length): (URL[1].split("/").length>1?URL[1].substring (this.Port.length):"/");
    break;
        case 1:
        this.Host = URL[0].split("/")[0]
        this.Query = URL[0].indexOf("/")<URL[0].length-1&&URL [0].indexOf("/")!=-1?URL[0].substring (this.Host.length):"/";
      }
     
      this.AddHeader = function(Name, Value){
        this.Headers[Name] = Value;
      }
     
      this.RemoveHeader = function(Name) {
        this.Headers[Name] = false;
      }
     
      this.Execute = function() {
        this.SendBuffer = this.Method + " " + this.Query + " " + this.Protocol + "/" + this.Version + "\n";
        for (prop in this.Headers)
        this.SendBuffer += !this.Headers[prop]?"":prop + ": " + this.Headers[prop] + "\n";
        this.SendBuffer += "\n";
        var Socket = Server.CreateObject ("Socket.TCP");
          Socket.TimeOut = this.TimeOut;
      Socket.Host = this.Host + ":" + this.Port;
        Socket.Open ();
        Socket.SendText (this.SendBuffer);
Socket.WaitForDisconnect ();
        this.StoreBuffer = Socket.Buffer;
    Socket.Close ();
        var j = this.StoreBuffer.indexOf("\n\r\n"), k = this.StoreBuffer.indexOf ("\n\n");
        this.Head = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(0, j - 1):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(0, k):this.StoreBuffer;
    this.Content = ((j < k && j > -1)||(j > -1 && k == -1))?this.StoreBuffer.substring(j + 3):((k < j && k > -1)||(k > -1 && j == -1))?this.StoreBuffer.substring(k + 3):this.StoreBuffer;
    return this.Content;
      }
  }
 
  function HTTPSocket(URL){
      /* For creating a HTTPSocket in VBScript */
      return new HTTPSocket_2(URL);
  }




</SCRIPT>

<%
Set Sock = HTTPSocket("www.altavista.com")
Sock.AddHeader "User-Agent", "My Browser"
output = Sock.Execute()
oldoutput = output
output = LCase(output)


do while not AtEndOfSearch
if temppos = "" then
temppos = 1
end if

startpos = InStr(temppos, output, "<meta")

if startpos <> 0 then
endpos = InStr(startpos, output, ">")
if endpos <> 0 then

curmetatag = Mid(output, startpos, endpos-startpos+1)
if InStr(curmetatag, "description") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 9
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-description:</b> " & curmetawords & "<br><br>"
end if
end if

else
if InStr(curmetatag, "keywords") <> 0 then

metastart = InStr(curmetatag, "content")
if metastart <> 0 then
metaend = InStr(metastart, curmetatag, ">")
if metaend <> 0 then
metastart = metastart + 9
curmetawords = Mid(curmetatag, metastart, metaend - metastart-1)
response.write "<b>meta-keywords:</b> " & curmetawords & "<br><br>"
end if
end if


end if
end if


temppos = endpos
end if
else
AtEndOfSearch = True
end if

loop


startpos = InStr(output, "<title>")
if startpos <> 0 then
endpos = InStr(output, "</title>")
if endpos <> 0 then
curtitle = Mid(oldoutput, startpos+7, endpos-startpos)
response.write "<b>titel:</b> " & curtitle & "<br><br>"
end if
end if
%>

</body>
</html>








Avatar billede cyigen Nybegynder
28. januar 2001 - 21:55 #13
hvad virker denne kode til?
altså søger den bare igennem altavista.com også finder de samme resultater som i altavista?
Avatar billede grabit Nybegynder
29. januar 2001 - 12:25 #14
Jeg har også været på udkik efter noget lignene. Et koncept som moreover.com er meget interessant! Desuden arbejder metaportal.com også med noget som kunne blive spændende!

Interessant script!

Hvis jeg uploader det til vores ASP server kommer det kun en blank side frem!
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