Avatar billede Slettet bruger
30. januar 2010 - 14:38 Der er 3 kommentarer og
1 løsning

Udskriv title og meta description

Hej.

Jeg leder efter et javascript script.

Scriptet skal kunne skaffe mig <title> og meta-description fra en hvilket som helst url. Lidt ligesom på facebook.. :-)

Der er 200p på højkant.. :-)
Avatar billede intenz Novice
30. januar 2010 - 18:30 #1
Jeg vil ikke tro du kan lave det i javascript. Javascript har ikke adgang til andre domæner end dens eget, så du vil ikke kunne hente noget fra et andet domæne.

Jeg vil tro facebook gør det sådan her:


Klienten: Laver et ajax kald med url'en til deres egen server.

Serveren: Tjekker om de kender URLen og giver den tilbage til klienten hvis de gør.
Ellers henter serveren sidens HTML kode ned, og henter de ting ud den skal bruge. Det gemmer den i databasen til næste gang klienten spørger efter den, og sender så svaret tilbage til klienten .

Klienten: Viser indholdet den fik af serveren til brugeren.


Det er sådan jeg ville gøre det. Jeg tilbyder ikke at lave det for dig :) Ihvertfald kun for rigtige $$$ og ikke point :)
Avatar billede Slettet bruger
30. januar 2010 - 19:14 #2
Hehe, nej nej.. :) Tænkte på om man ville have kunne bruge AJAX til at hente HTML koden og så tjekke det der..

Hvordan ville du så foreslog at jeg tjekkede HTML'en, med Regex, eller?
Avatar billede intenz Novice
31. januar 2010 - 11:47 #3
Ajax er javascript, så der vil du heller ikke kunne tilgå den anden sides indhold, da den ligger undenfor dit eget domæne.

Men ja, noget regex i server-side. I PHP (f.eks.) kan du hente den anden sides HTML kode med:
http://php.net/manual/en/function.file-get-contents.php

Og så hente de ting ud du skal bruge, f.eks. med regex.
Avatar billede Slettet bruger
31. januar 2010 - 14:14 #4
Hej.

Jeg fik det lavet. Dog i en ASP.net udgave.. :-) Ved dog ikke helt hvor godt den virker.. Men her kan du/i se koden.. :-)

HTMLPage.htm
[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        function loadXMLDoc(url) {
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            }
            else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.open("GET", url, false);
            xmlhttp.send(null);
           
            return xmlhttp.responseText;
        }
        function PageLoad(url) {
            document.getElementById('txtTitle').value = loadXMLDoc("Default2.aspx?Load=Title&URL=" + url);
            document.getElementById('txtDescription').value = loadXMLDoc("Default2.aspx?Load=Description&URL=" + url);
        }
        </script>
</head>
<body onload="PageLoad('http://youtube.com')">
    <input type="text" id="txtTitle"><br />
    <input type="text" id="txtDescription"><br />
</body>
</html>
[/code]

Default2.aspx.cs
[code]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = Request.QueryString["URL"];
        if (Request.QueryString["Load"] == "Title")
            Response.Write(FetchTitleFromHTML(readurl(url).ToString()));
        else if (Request.QueryString["Load"] == "Description")
            Response.Write(FetchDescriptionFromHtml(readurl(url).ToString()));
    }

    public string FetchTitleFromHTML(string sHtml)
    {
        string regex = @"(?<=<title.*>)([\s\S]*)(?=</title>)";
        Regex ex = new Regex(regex, RegexOptions.IgnoreCase);
        return ex.Match(sHtml).Value.Trim();
    }

    public string FetchDescriptionFromHtml(string sHtml)
    {
        string regex = @"(?<=<META\s+name=""description""\s+content="").*?(?=""\s*?>)|(?<=<META\s+name=""description""\s+content="").*?(?=""\s*?/>)|(?<=content="").*?(?=name=""Description""/>)|(?<=content="").*?(?=name=""Description"">)";
        Regex ex = new Regex(regex, RegexOptions.IgnoreCase);
        return ex.Match(sHtml).Value.Trim();
   
    }

    public object readurl(string url)
    {
        WebResponse objResponse = default(WebResponse);
        WebRequest objRequest = default(WebRequest);
        string result = null;

        try
        {
            objRequest = System.Net.HttpWebRequest.Create(url);
            objResponse = objRequest.GetResponse();
            StreamReader sr = new StreamReader(objResponse.GetResponseStream());
            result = sr.ReadToEnd();
            //clean up StreamReader

            sr.Close();
        }
        catch (Exception ex)
        {
            string s = ex.ToString();
            //this must be modified

                result = s;
        }

        if (result.Length == 0)
        {
            result = "no result";
        }

        return result;
    }
}
[/code]
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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