Avatar billede george Nybegynder
04. september 2009 - 09:36 Der er 23 kommentarer og
1 løsning

Hvordan kan jeg checke om der er sket ændringer på et site

Jeg ved ikke om det er den rigtige kategori at stille nedenstående spørgsmål, jeg kan bare forstille mig at der skal bruges noget JavaScript til at løse opgaven.

Jeg har en side hvor jeg henter nogle informationer, disse informationer bliver opdateret hvert minut.

Er der nogen måde hvorpå jeg kan checke om der er sket ændringer på siden og herefter kan sende mig en sms besked hvis der er?
Avatar billede Slettet bruger
04. september 2009 - 09:44 #1
Den teknologi du skal bruge hedder AJAX. Du kan se en guide om det her:
http://www.w3schools.com/Ajax/Default.Asp

Du skal hente siden og gemme den i en variabe. Efter, f.eks. 5 minutter kan du så hente siden igen, gemme den i en variabel, og så sammenligne de to variabler. Hvis de er forskellige har siden ændret sig.

Og ja, jeg ved godt at nogle af ekspertens brugere ikke er så glade for W3Cschools, men jeg syntes nu de gør deres arbejde ganske glimrende.
Avatar billede george Nybegynder
04. september 2009 - 09:53 #2
Tak for hurtig response på mit spørgsmål.

Det syntes jeg faktisk også at de gør. Jeg bruger den tit hvis jeg ikke kan huske noget om f.eks CSS eller andet.

Jeg checker lige siden og ser om jeg kan finde ud af det.
Avatar billede george Nybegynder
04. september 2009 - 10:14 #3
Hej Kimsey0,

Det er vist ikke bare noget jeg lige kan lave, har ikke arbejdet med Ajax før.

Der må være nogen der har lavet sådan noget før eller noget lignende.
Avatar billede olebole Juniormester
04. september 2009 - 13:48 #4
<ole>

kimsey0 >> Undskyld, men w3schools.com er generelt fyldt med udeladelser, mangler og seriøse fejl. Det er udenfor diskusion, og vi har her på Eksperten gang på gang påvist rigtigheden af dette udsagn med eksempler på 4-6 åbenlyse og alvorlige fejl på én side. Det er et voldsomt antal, når man tager i betragtning, hvor lidt der står på hver side (udover reklamerne). Det er en cash cow ... ikke noget godt undervisnings site.

Hans såkaldte Ajax tutorial er oven i købet noget af det værste på sitet! Dér lærer man i hvert fald ikke, hvad Ajax er - eller hvordan det bruges!
Hvis man synes, han gør det ganske glimrende, kan det kun bero på manglende viden om Ajax. Hans 'artikler' og 'tutorials' er næsten ligeså elendige som html.dk's ... og html.dk har ellers alle rekorder for dårlig, misvisende og fejlfyldt information!

george >> Det her kan du i øvrigt ikke bruge Ajax til, da XMLHttpRequests ikke fungerer cross domain. Du skal nok løse det via serverscripting

/mvh
</bole>
Avatar billede george Nybegynder
04. september 2009 - 14:20 #5
Ok tak for det. Så spilder jeg da ikke min tid på at Google ting med Ajax.

Når du skriver serverscripting mener du så PHP eller ASP?

Du skulle vel ikke være faldet over noget kode der kunne minde om det jeg søger? :-)
Avatar billede psychopixi Nybegynder
04. september 2009 - 22:02 #6
#5
Serverscripting kan både være PHP, ASP og andre scipts, der køres af serveren frem for i brugens browser.
Avatar billede Slettet bruger
04. september 2009 - 23:19 #7
Olebole, ja, du har ret. Jeg glemte det om cross-domain AJAX.
Hvilken side vil du anbefale mig at henvise til som alternativ, hvis jeg altså ikke selv skal til at skrive en guide?

---

En let måde at gøre det i PHP er ved hjælp af library'et cURL. Jeg kan desværre ikke henvise dig til en side om brugen af det, men du kan se den officielle manual her:
http://dk.php.net/curl

Desuden kan jeg godt bikse et eksempel på dets brug sammen hvis du ønsker?
Avatar billede george Nybegynder
04. september 2009 - 23:45 #8
Meget gerne kimsey0. Jeg er bestemt ikke PHP mand, så jeg kan ikke selv gøre det.
Avatar billede Slettet bruger
05. september 2009 - 13:33 #9
Her kommer så et eksempel:

<?php
$url = 'http://www.google.dk/'; //Sidens URL.
$ch = curl_init($url); //Opret cURL objekt.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Return svaret, i stedet for status.

$svar = curl_exec($ch); //Hent siden.
$info = curl_getinfo($ch); //Hent headers fra serveren.
curl_close($ch); //Luk forbindelse igen.

if($info['http_code'] == 200) { //Hvis det lykkedes at oprette forbindelse:
    //Hent side fra sidste gang den blev læst. Dette kan gøres med en fil eller database.
    $fil = file_get_contents('google.txt');
    //Gem siden i fil eller database.
    $fil_put_contents('google.txt', $svar);
   
    //Sammenlign de to versioner.
    if ($fil == $svar) {
        //Send en SMS hvis de er forskellige.
        echo "Siden har ændret sig.";
    } else {
        echo "Siden har ikke ændret sig.";
    }
} else {
    //Der skete en fejl, prøv igen.
    echo "Siden kunne ikke hentes.";
}
?>

Bemærk at eksemplet ikke sender en SMS, da det kræver en service der understøtter det.
Avatar billede george Nybegynder
05. september 2009 - 14:14 #10
Tak Jakob,

Jeg prøver det lige.
Avatar billede olebole Juniormester
05. september 2009 - 15:42 #11
kimsey0 >> Jeg kender desværre ikke en god begynder tutorial om Ajax - men jeg kender en masse rigtig dårlige  :o|

Der er ikke grund til at gemme hele filen:


<?php
$hash = hash_file("sha256", "http://www.google.com/");
// Gem $hash i et varchar felt på 64 tegn
?>



- og senere:


<?php
$hash = hash_file("sha256", "http://www.google.com/");
$oldHash = [SQL_QUERY];
if ($oldHash<>$hash) {
    // Der er sket ændringer
}
?>

Avatar billede Slettet bruger
05. september 2009 - 19:11 #12
Ole, ja, du har helt ret. Jeg prøvede bare at holde det som et simpelt eksempel, og ikke som en hel virkende side. Desuden vil det nok være smart at sortere lidt i indholdet, f.eks. med en regexp, da f.eks. reklamer godt kan ændre sig ved hver indlæsning, og derfor indikere at siden har ændret sig, uden at den i virkelighede har.
Avatar billede olebole Juniormester
05. september 2009 - 19:30 #13
Det har du helt ret i. Det kræver ofte en hel del parsing og vedligeholdelse af reglerne for denne, men er nødvendig. Desværre kan man ikke påregne, at indehaveren af siden sørger for, last modified siger noget begavet, så der er nok ikke anden vej  :o|
Avatar billede Slettet bruger
05. september 2009 - 20:57 #14
Nej, det kan man desværre ikke stole på.
Avatar billede george Nybegynder
09. september 2009 - 14:58 #15
Hej Jacob,

Hvorfor får jeg fejlen "siden kunne ikke hentes"?
Avatar billede george Nybegynder
09. september 2009 - 15:59 #16
Jeg har prøvet mig lidt frem og tilbage og har nu givet folder og fil skriverettigheder så nu får jeg denne fejl:

Internal Server Error(500 Internal Server error)
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@johnnylai.me and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Hvad skal jeg gøre for at slippe af med den fejl?
Avatar billede olebole Juniormester
09. september 2009 - 16:07 #17
Du retter vel bare fejlen i linje 143  ;o)
Avatar billede george Nybegynder
09. september 2009 - 16:23 #18
olebole, jeg formoder du tager gas på mig nu ;-)
Avatar billede Slettet bruger
09. september 2009 - 17:54 #19
Jep, det gør han, men han har en pointe.
Vi kan ikke hjælpe dig med at rette fejlen hvis vi ikke kan se koden, så kom med den :P
Avatar billede george Nybegynder
09. september 2009 - 20:43 #20
Jamen det er jo din egen kode, der er ikke 143 linjer kode.

Men jeg kopierer da gerne din kode herind igen :o)

<!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" xml:lang="en" lang="en">

<head>
  <title></title>
</head>

<body onLoad=setTimeout('location.reload(true)',10000);>

<?php
$url = 'http://www.strignanosforexsignals.com/members/signals.php?action=today&next=1'; //Sidens URL.
$ch = curl_init($url); //Opret cURL objekt.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Return svaret, i stedet for status.

$svar = curl_exec($ch); //Hent siden.
$info = curl_getinfo($ch); //Hent headers fra serveren.
curl_close($ch); //Luk forbindelse igen.

if($info['http_code'] == 200) { //Hvis det lykkedes at oprette forbindelse:
    //Hent side fra sidste gang den blev læst. Dette kan gøres med en fil eller database.
    $fil = file_get_contents('content.txt');
    //Gem siden i fil eller database.
    $fil_put_contents('content.txt', $svar);

    //Sammenlign de to versioner.
    if ($fil == $svar) {
        //Send en SMS hvis de er forskellige.
        echo "Siden har ændret sig.";
    } else {
        echo "Siden har ikke ændret sig.";
    }
} else {
    //Der skete en fejl, prøv igen.
    echo "Siden kunne ikke hentes.";
}
?>

</body>

</html>
Avatar billede Slettet bruger
09. september 2009 - 20:54 #21
Fejlen opstår fordi siden kræver at du logger ind.
Det er muligt at logge ind med cURL, men det er besværligt, da det kræver at du bruger SSL, sender de rigtige headers og gemmer cookies.
Jeg har ikke selv meget erfaring med det, så jeg kan desværre ikke rigtig hjælpe dig, men prøv at søge på Google og se om du ikke kan finde noget.
Avatar billede george Nybegynder
09. september 2009 - 21:00 #22
Om Jakob, tak for hjælpen.

Kom med svar så du kan få din points.
Avatar billede Slettet bruger
09. september 2009 - 23:03 #23
Jeg håber du finder ud af det :)
Avatar billede george Nybegynder
09. september 2009 - 23:28 #24
Det tror jeg desværre 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
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