Avatar billede mini-me Nybegynder
29. august 2008 - 18:45 Der er 12 kommentarer og
1 løsning

Undersøg om URL er aktiv/online

Hej,

Jeg skal lave mig en RSS-reader til at fremvise nogle nyheder fra diverse sites, det er umiddelbart ikke nogen større opgave, men nu til the tricky part.

RSS-readeren skal køre på en lokal pc, og så pr. eks. 20 minut opdatere sitet, for at læse de seneste rss feeds. Men hvis der ikke er forbindelse til det RSS feed, skal den ikke reloade siden.

Kan dette laves i javascript? If so how?
Avatar billede w13 Novice
29. august 2008 - 19:44 #1
Jaeh, med noget AJAX ind over kunne det måske.
Avatar billede montago Praktikant
30. august 2008 - 00:03 #2
1. hvorfor skal den reloade siden ??... med AJAX kan du reloade den enkelte RSS

JS -> Server : "hent RSS http://151515.dk/rss"
a:
  Server -> JS : "200 OK + RSS" -> Opdater side
b:
  JS-Fejl : "404 file not found / Server offline"


hvis du skal have noget script siger du til...
Avatar billede mini-me Nybegynder
30. august 2008 - 11:51 #3
Montago: Jeg kunne godt tænke mig lidt script :)

Var ikke klar over at du blot kunne reloade den enkelte RSS - så det er jo super. Men vil du ikke lige lave noget script.
Avatar billede montago Praktikant
30. august 2008 - 19:03 #4
hmm...

hvor meget kan du finde ud af ??
hvad sprog bruger du ?

ved du hvad XSLT er ? :
http://www.w3schools.com/xsl/xsl_transformation.asp

ved du hvordan man laver et AJAX kald til PHP/ASP/ASPX ?? :
http://www.w3schools.com/xml/xml_http.asp

ved du hvordan man laver http-request fra serveren og ud ? :
http://www.w3schools.com/xml/xml_http.asp (samme kode næsten)


hvis jeg skal være ærlig gider jeg ik lave noget kode alligevel... har for travlt med meget andet for tiden...

men det du skal er :

1. Lave et script som kan lave et "GET" ned til serveren
2. lave et server script som kan hente din RSS fra kilden
3. lave en XSL-XSLT transformation af RSS'en endten på klienten (Javascript) eller på serveren
4. Insætte den nye HTML i et element på siden (innerHTML)
Avatar billede mini-me Nybegynder
01. september 2008 - 14:32 #5
Hej,

Har kigget på de links, men kan ikke rigtig få noget til at virke hvis jeg vil hente eks.: rss feeds fra TV2.

Anyone der kan hjælpe med noget kodE?
Avatar billede mini-me Nybegynder
01. september 2008 - 16:21 #6
Jeg har faktisk fundet noget kode der gør alt det jeg har brug for - MEN, det er koblet op mod en PHP side, er der nogen der kan hjælpe med at få det til at virke med ASP?

http://www.javascriptkit.com/dhtmltutors/ajaxticker/ajaxticker4.shtml
Avatar billede montago Praktikant
01. september 2008 - 17:03 #7
Denne kode kan bruge som GET-Proxy fra Javascript og ud i verden :

<%
IF Request.QueryString("URL") <> "" THEN
    set xmlHttp = Server.CreateObject("MSXML2.XMLHTTP")
    xmlHttp.open "GET", Request.QueryString("URL") , false
    xmlHttp.send()
   
    Response.Clear()
    Response.Write( xmlHttp.responseText )
    Response.End()
END IF
%>

i JS skal du så blot bede om at hente indholdet fra en RSS adresse.
med denne funktion:

function LoadURL(action,url,postbody,delegateReturn)
{
    var xmlhttp = false;
   
    try {     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {    xmlhttp = false; } }
   
    if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
        try {             xmlhttp = new XMLHttpRequest();
        } catch (e) {    xmlhttp = false;    }
    }
    if (!xmlhttp && window.createRequest) {
        try {            xmlhttp = window.createRequest();
        } catch (e) {    xmlhttp = false;    }
    }
   
    if ( xmlhttp )
    {
        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState==4){
                if (xmlhttp.status==200){
                    delegateReturn( xmlhttp.responseText );
                }else{
                    alert("Error: " + xmlhttp.status + "\n\nURL: "+URL);
                }
            }
        }
        try{
            xmlhttp.open(action,url, false);
            xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
            xmlhttp.send(postbody);
        }catch(e){
            alert("xmlhttp error: \n"+e.message);
        }
    }else{
        alert("Your browser does not support XMLHTTP.");
    }
}


kaldes sådan her:

function GetUrlHandler(str){
  document.getElementById("MitOutputDIV").innerHTML = str;
}

var query = encodeURIComponent("http://www.google.com");
LoadURL("GET", "?URL=" + query, null, GetUrlHandler);


NB: ikke testet...
Avatar billede mini-me Nybegynder
01. september 2008 - 17:04 #8
Virker dette også i firefox??
Avatar billede mini-me Nybegynder
01. september 2008 - 17:27 #9
Det virker ikke hverken IE elle FF.

Der kommer ikke noget ind i min div.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>RSS FEED 2008</title>
  </head>
  <body>
   
<%
IF Request.QueryString("URL") <> "" THEN
    set xmlHttp = Server.CreateObject("MSXML2.XMLHTTP")
    xmlHttp.open "GET", Request.QueryString("URL") , false
    xmlHttp.send()
 
    Response.Clear()
    Response.Write( xmlHttp.responseText )
    Response.End()
END IF
%>

<script language="javascript">
function LoadURL(action,url,postbody,delegateReturn)
{
    var xmlhttp = false;
 
    try {    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {    xmlhttp = false; } }
 
    if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
        try {            xmlhttp = new XMLHttpRequest();
        } catch (e) {    xmlhttp = false;    }
    }
    if (!xmlhttp && window.createRequest) {
        try {            xmlhttp = window.createRequest();
        } catch (e) {    xmlhttp = false;    }
    }
 
    if ( xmlhttp )
    {
        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState==4){
                if (xmlhttp.status==200){
                    delegateReturn( xmlhttp.responseText );
                }else{
                    alert("Error: " + xmlhttp.status + "\n\nURL: "+URL);
                }
            }
        }
        try{
            xmlhttp.open(action,url, false);
            xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
            xmlhttp.send(postbody);
        }catch(e){
            alert("xmlhttp error: \n"+e.message);
        }
    }else{
        alert("Your browser does not support XMLHTTP.");
    }
}
</script>

<script language="javascript">
function GetUrlHandler(str){
  document.getElementById('printRSS').innerHTML = str;
}

var query = encodeURIComponent("http://nyhederne.tv2.dk/rss/nyhederne.xml");
LoadURL("GET", "?URL=" + query, null, GetUrlHandler);

</script>

    <div id="printRSS" style="width:1000px; height:100px; border:1px solid #e2e2e2;">
       
    </div>
   
  </body>
</html>
Avatar billede montago Praktikant
01. september 2008 - 18:29 #10
det jo fordi dit DIV er placeret EFTER script tagget...

hvis du putter scriptet op i Head og bruger onload til at kalde LoadURL virker det... ELLER flytter DIV'en op over script tagget...

det virker hos mig med de rettelser...
Avatar billede montago Praktikant
04. september 2008 - 14:42 #11
Hey...

Virker det hele som det skal ?

med XSLT kan man lave et "Stylesheet" i XSL som formatere din RSS on-the-fly ... dette kan gøres med Javascript eller i ASP/PHP... det smarteste er nok at gøre det på serveren, inden du modtager det på klienten.
Avatar billede mini-me Nybegynder
04. september 2008 - 14:58 #12
Hej,

spørgsmålet tog jo lige lidt en drejning men det virker dog ikke i IE 7.0.

I princippet så var det ideen at jeg skulle hente:

Overskrift
+ Brødtekst
+ Evt. billede

Fra tv2s RSS og vise dem som en "lys-Avis" så den kører i en ramme på eks. 200x1000px og skifter mellem de forskellige nyheder.

Men det lød som om du havde travlt med en masse så må enten lige oprette et nyt spørgsmål eller selv arbejde videre med det jeg har fået.
Avatar billede montago Praktikant
04. september 2008 - 18:52 #13
hmm... jeg har "for travlt" til at lave hele løsningen... men vil gerne give dig råd og vejledning i hvordan du strikker det sammen bedst muligt.


Nu ved jeg ikke om du vil hente nyheder fra flere ressourcer, men det smarteste er nok at hente XML'en og vidersende den som XML fra ASP -->
Response.Contenttype = "text/xml"

Javascriptet skal så ændres en smule, så man ved at man modtager et XML dokument i stedet for en string. Herved åbnes muligheden for at plukke data ud af XML dokumentet som et object ==> Super smart :-D


tag et kig på den her kode / resultat...

//--------------------------------------------------

<%
IF Request.QueryString("URL") <> "" THEN
    set xmlHttp = Server.CreateObject("MSXML2.XMLHTTP")
    xmlHttp.open "GET", Request.QueryString("URL") , false
    xmlHttp.send()

    Response.Clear()
    Response.ContentType = "text/xml"
    Response.Write( xmlHttp.responseText )
    Response.End()
END IF
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>RSS FEED 2008</title>
    <script language="javascript" type="text/javascript">
    function LoadURL(action,url,postbody,delegateReturn, isXML)
    {
        var xmlhttp = false;
   
        try {    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {    xmlhttp = false; } }
   
        if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
            try {            xmlhttp = new XMLHttpRequest();
            } catch (e) {    xmlhttp = false;    }
        }
        if (!xmlhttp && window.createRequest) {
            try {            xmlhttp = window.createRequest();
            } catch (e) {    xmlhttp = false;    }
        }
   
        if ( xmlhttp )
        {
            xmlhttp.onreadystatechange = function()
            {
                if (xmlhttp.readyState==4){
                    if (xmlhttp.status==200){
                        if(isXML)    delegateReturn( xmlhttp.responseXML );
                        else        delegateReturn( xmlhttp.responseText );
                    }else{
                        alert("Error: " + xmlhttp.status + "\n\nURL: "+URL);
                    }
                }
            }
            try{
                xmlhttp.open(action,url, false);
                xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
                xmlhttp.send(postbody);
            }catch(e){
                alert("xmlhttp error: \n"+e.message);
            }
        }else{
            alert("Your browser does not support XMLHTTP.");
        }
    }
    function init()
    {
        var query = encodeURIComponent("http://nyhederne.tv2.dk/rss/nyhederne.xml");
        LoadURL("GET", "?URL=" + query, null, GetUrlHandler, true);
    }
   
    function N(x,n)
    {
        return x.getElementsByTagName(n);
    }
    function V(x,n)
    {
        return N(x, n)[0].childNodes[0].nodeValue;
    }
   
    function GetUrlHandler(xmlDOC)
    {
        var Nyheder = N(xmlDOC,"item");
        var html = "";
       
        for(var i=0, Nyhed; Nyhed = Nyheder[i]; i++)
        {
            var title = V(Nyhed, "title");
            var description = V(Nyhed, "description");
            var pubdate = V(Nyhed, "pubDate");
           
            html += "<table style='float:left;width:200px;height:200px;'>" +
                "<tr><td>" + title + "</td></tr>" +
                "<tr><td style='overflow:auto;'>" + description + "</td></tr>" +
                "<tr><td>" + pubdate + "</td></tr>" +
                "</table>"
        }
        document.getElementById("printRSS").innerHTML = html;
    }
    </script>
  </head>
  <body onload="init();">
    <div id="printRSS" style="width:1000px; height:100px; border:1px solid #e2e2e2;">
    </div>
  </body>
</html>
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