Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 4709
Viser til min tidligere post: http://freak.no/forum/showthread.php?t=191855

Nå har Vegvesenet oppdatert litt på siden og den gamle koden klarer ikke og hente ut noe.

Har prøvd og lese en del på regex og preg_match uten og komme noen annen vei en og klø meg enda mere i hode.

Noen som kan hjelpe og få koden til og passe på den nye siden?

Gammel kode under:
og ny link til eu-sjekken: http://www.vegvesen.no/Kjoretoy/Eie+...nummer=PP12345

Kode

<?php 
function eu_godkjenning( $regnr ) 
{ 
    $html = file_get_contents('http://www.vegvesen.no/Kjoretoy/Eie+og+vedlikeholde/Periodisk+kjoretoykontroll/Kontrollfrist?registreringsnummer=' . $regnr); 
    if ( $html === False ) 
        return False; 
     
    $regex = "/<table\sclass=\"resultattabell\".+? 
             <th>Merke\sog\smodell:.+?<td>(.+?)<\/td>.+? 
             <th>Registreringsnummer:.+?<td>(.+?)<\/td>.+? 
             <th>Registreringsår:.+?<td>(.+?)<\/td>.+? 
             <th>Sist\sgodkjent:.+?<td>(.+?)<\/td>.+? 
             <th>Frist\sfor\skontroll:.+?<td>(.+?)<\/td>.+? 
             <\/table>/xism"; 
              
    $res = preg_match( $regex, $html, $match ); 
    if ($res == 0) 
        return False; 
     
    return array 
           ( 
                "merke"             => $match[1], 
                "regnummer"         => $match[2], 
                "registreringsår"   => $match[3], 
                "sistegodkjenning"  => $match[4], 
                "frist"             => $match[5] 
           ); 
} 

// eksempel: 
// vil gi False om du ikke skifter til et gyldig regnr. 
var_dump( eu_godkjenning("dittregher") ); 
?>
Du har ikke prøvd å bare fjerne semikolonene?
Trådstarter
Sitat av Starra Vis innlegg
Du har ikke prøvd å bare fjerne semikolonene?
Vis hele sitatet...
Jupp men funka ikke
Er vel bare å bytte ut tabellnavnet?

Kode

<?php
function eu_godkjenning($regnr) {
    $html = file_get_contents('http://www.vegvesen.no/Kjoretoy/Eie+og+vedlikeholde/Periodisk+kjoretoykontroll/Kontrollfrist?registreringsnummer=' . $regnr);
    if ($html === false)
        return false;

    $regex = "/Merke\sog\smodell.*<td>(.*)<\/td>.*" .
                "Registreringsnummer.*<td>(.*)<\/td>.*".
                "Understellsnummer.*<td>(.*)<\/td>.*".
                "Registreringsår.*<td>(.*)<\/td>.*".
                "Sist\sgodkjent.*<td>(.*)<\/td>.*".
                "Frist\sfor\skontroll.*<td>(.*)<\/td>/is";

    $res = preg_match($regex, $html, $match);
    if ($res == 0 || $res === false)
        return false;

    return array (
        "merke"             => $match[1],
        "regnummer"         => $match[2],
        "understellsnr"     => $match[3],
        "registreringsår"   => $match[4],
        "sistegodkjenning"  => $match[5],
        "frist"             => $match[6]
    );
}

$nr = eu_godkjenning("PP12345");
var_dump($nr);
?>
Denne skal fungere. Legg merke til at det er lagt til et nytt element i arrayet som returneres: understellsnr. Vet ikke om dette ikke eksisterte før, eller om dere valgte å overse det, men da er det i så fall bare å la være å legge det inn i arrayet som returneres
Har prøvd og lese en del på regex og preg_match uten og komme noen annen vei en og klø meg enda mere i hode.
Vis hele sitatet...
Regex er veldig lite ideelt og bruke på html/xml,det er en grunn til at "parser" for html/xml eksisterer.
Forklart her av bobince i et av de beste om mest artige svarene på stackoverflow.

Når går det rimelig greit og bruke en hackish løsning som dette når siden kun inneholder spesifikk og lite info som dette.
På en større side med mer info vil regex være veldig smertefullt og bruke.

PHP har mange "parser",nå bruker jeg ikke PHP noe særlig.
Kan skrive et raskt eksempel med en parser jeg kan godt BeautifulSoup(Python)

Kode

from bs4 import BeautifulSoup
from urllib2 import urlopen

url = urlopen('url adress')
soup = BeautifulSoup(url)
tag_stat = soup.find_all('th');tag_result = soup.find_all('td')
car_result = zip(tag_stat,tag_result)
for info in car_result:
    print '{}: {}'.format(info[0].text.encode('latin-1'),info[1].text)
Output:

Kode

Merke og modell: VOLKSWAGEN TARO  2.4 D
Registreringsnummer: PP 12345
Understellsnummer: WV2ZZZ7AZS9502546
Registreringsår: 1995
Sist godkjent: 25.01.2013
Frist for kontroll: 31.05.2015
▼ ... flere år senere ... ▼
Hei.

Henger meg litt på denne. Jeg vil gjerne hente ut når fristen for neste kontroll, evt all informasjonen som er mulig å hente, men da via javascript, lar dette seg gjøre? Typiske hente dette ut, og legge inn i "custome code/embed code" i det verktøyet jeg jobber i.

Dvs, jeg vil at bruker på siden skal taste inn regnr, og programmet, gi da ut dataene for dette.

//Takk
Sitat av jim10 Vis innlegg
Hei.

Henger meg litt på denne. Jeg vil gjerne hente ut når fristen for neste kontroll, evt all informasjonen som er mulig å hente, men da via javascript, lar dette seg gjøre? Typiske hente dette ut, og legge inn i "custome code/embed code" i det verktøyet jeg jobber i.

Dvs, jeg vil at bruker på siden skal taste inn regnr, og programmet, gi da ut dataene for dette.

//Takk
Vis hele sitatet...
Du får ikke gjort det med bare javascript på grunn av Access-Control-Allow-Origin, men med litt serverkode vil du kunne lage deg en embedløsning ja.
Takk for svar.

Har du noen forslag på hvordan jeg skal få ut denne dataen å vise den for brukeren på en god måte, og da ikke med PHP, noe løsningen jeg bruker ikke støtter?
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av jim10 Vis innlegg
Takk for svar.

Har du noen forslag på hvordan jeg skal få ut denne dataen å vise den for brukeren på en god måte, og da ikke med PHP, noe løsningen jeg bruker ikke støtter?
Vis hele sitatet...
Du må gjere det serverside. Du kan ikkje gjere det klientside. Du kan gjere det i det språket du måtte ønske. Om du ikkje har mogelegheit for det der du er i dag, så bytt plass.
Mulig du kan få til noe med en cors-proxy ala: https://cors-anywhere.herokuapp.com/...reringsnummer= men vet ikke hvor stabilt det er.
Trådstarter
Hent fra regnr.info i stedet?