Avatar billede janiz Nybegynder
22. maj 2004 - 20:00 Der er 2 kommentarer og
1 løsning

Hent specifik Date fra HTML doc?+MySql

Jeg har brug for et script jeg man fodre med en liste over online html filer med samme format som nedenstående.

Ud fra dette html dokument skal der hentes nogle specifikke data som så skal puttes i min mysql DB.

DB navn: produkter

1)DB felt = titel
her forestiller jeg mig at man kan søge efter start <title> tagget og så hente alt der står inden "-" og så trimme det, så slut resultatet bliver: ”cykel med fine hjul osv”

2)DB felt = Kort_Beskrivelse

Her findes den korte beskrivelse både i Description meta taggen og længere nede i koden mellem de 2 ””, ved ikke hvor det er lettest at hente den ud, men vælg det bedste sted. Hvis ” &amp;” forekommer skal det laves om til & tegnet inden det smides i db’en.
Så slut resultatet bliver: ”dette skal hentes ud & smides i DB feltet Kort_Beskrivelse”

3)DB felt = Lang_Beskrivelse
Denne er lidt tricky, jeg ved ikke hvordan det skal hentes ud, men min idé er at gå efter den første forekomst af et link til min index.php side, da dette link altid vil være at finde i Den lange beskrivelse, og så ud fra dette links placering finde start og slut punkt for den text mængde?
Feks: start <TD>  og slut: <BR>

4)DB felt = Pris
Skulle være let nok, bare søg efter den første forkomst af ordene ”Ny pris” og så hente det næste ord ud og trim det, så det bliver ”350”


Selve URL’en til html filen vil være feks:
http://ww.blabla.dk/produkter/200S/cykel_uden_hjul.html

5)DB felt = Filnavn:
her skal den tage ”cykel_uden_hjul” fra HTML Url’en

6)DB felt = Id
når den skal vide hvilken DB row Id. Den skal vælge skal den gå udfra nummeret i URL’en, så den Row den opretter er = 200



Der kan godt forekomme apostroffer og andre tegn i teksten, jeg ved ikke om mysql vil klage over det ved indsætning?




<HTML>
<HEAD>
<TITLE>cykel med fine hjul osv - blabla</TITLE>
<META content="dette skal hentes ud &amp; smides i DB feltet Kort_Beskrivelse" name=description>

</HEAD>
<BODY><DIV align=center><TABLE width=760>
<TBODY><TR><TD align=middle height=35>
  <FONT size=+0><B>"dette skal hentes ud &amp; smides i DB feltet Kort_Beskrivelse" - produkt fra blabla.dk</B></FONT> </TD></TR>
  <TR><TD align=middle><TABLE cellPadding=5 width=600>
        <TBODY>
        <TR>
          <TD>denne beskrivelses txt skal også hentes ud, den er men burde kunne klares denne beskrivelses txt skal også<A HREF="http://www.blabla.dk/index.php">hentes ud</A>, den er svær men burde kunne klares denne beskrivelses txt skal også hentes ud, den er svær men burde kunne klaresdenne beskrivelses txt skal også hentes ud, den er svær men burde kunne klares?<BR>
<CENTER><FONT SIZE="0"><B>Ny pris 350 Dkr!</FONT></CENTER>
            </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>

</BODY>
</HTML>
Avatar billede janiz Nybegynder
22. maj 2004 - 20:02 #1
meningen er at jeg skal kunne give en liste som denne:
http://ww.blabla.dk/produkter/223S/cykel_uden_hjul.html
http://ww.blabla.dk/produkter/120S/cykel_med_hjul.html
http://ww.blabla.dk/produkter/399S/cykel_hjul.html

og så skal den tage dem én af gangen og oprette hver deres DB row. :)
Avatar billede coderdk Praktikant
23. maj 2004 - 03:17 #2
Proof of concept:

    $txt = <<<HEST
<HTML>
<HEAD>
<TITLE>cykel med fine hjul osv - blabla</TITLE>
<META content="dette skal hentes ud &amp; smides i DB feltet Kort_Beskrivelse" name=description>

</HEAD>
<BODY><DIV align=center><TABLE width=760>
<TBODY><TR><TD align=middle height=35>
  <FONT size=+0><B>"dette skal hentes ud &amp; smides i DB feltet Kort_Beskrivelse" - produkt fra blabla.dk</B></FONT> </TD></TR>
  <TR><TD align=middle><TABLE cellPadding=5 width=600>
        <TBODY>
        <TR>
          <TD>denne beskrivelses txt skal også hentes ud, den er men burde kunne klares denne beskrivelses txt skal også<A HREF="http://www.blabla.dk/index.php">hentes ud</A>, den er svær men burde kunne klares denne beskrivelses txt skal også hentes ud, den er svær men burde kunne klaresdenne beskrivelses txt skal også hentes ud, den er svær men burde kunne klares?<BR>
<CENTER><FONT SIZE="0"><B>Ny pris 350 Dkr!</FONT></CENTER>
            </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>

</BODY>
</HTML>
HEST;

    $url = "http://ww.blabla.dk/produkter/200S/cykel_uden_hjul.html";
    // $indhold = get_file_contents($url);
    $filnavn = basename($url); // vil du ikke have endelsen med? $filnavn = current(split('\.',basename($url)));
    preg_match("/le>([^<]+)<\/.*?<b>([^<]+)<\/.*?<td>(.*?)<center>.*?<b>Ny pris ([0-9]+)/si",$txt,$regs); // $indhold i stedet for $txt du ved
    $titel = $regs[1];
    $kort = $regs[2];
    $lang = $regs[3];
    $pris = $regs[4];
    echo "url: $url<br>filnavn: $filnavn<br>titel: $titel<br>kort besk: $kort<br>lang besk: $lang<br>pris: $pris";

For du nævnte apostroffer mht mysql, før du indsætter kan du evt lave str_replace("'","''",$feltindhold) - det erstatter ' med '' (to enkelt ') så spiser mysql dem uden problemer.
Avatar billede Slettet bruger
23. maj 2004 - 21:18 #3
I stedet for den str_replace() vil det nok være smartere at bruge addslashes() (Se evt. denne gratis artikel om addslashes: http://www.eksperten.dk/artikler/190 ) eller mysql_escape_string()
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