Skrivet av V_Persie:
Du skulle inte kunna berätta hur du gjorde eller kanske dela med dig av koden? Det skulle uppskattas.
Problemet är att det nog är en 7-8 år sen jag kodade PHP lite mer seriöst, så är ju inte direkt finkod.
Precois som Elgot säger så är det en flerstegsraket:
1. Förstå vad det är för något man ska leta efter
2. Läsa ner den aktuella websidan
3. Matcha mot vad det nu är man letar efter.
Lite snabb efterforskning (och den största bristen i min kod för tillfället) gav följande:
* Adressen är av typen: http://www.dustinhome.se/product/<produktnummer>
Kollar man sedan alla 3 sidor, lager, 1-2 dagar och ej i lager hittar man följande:
<div id="cphMain_divAvl" style="float:left; margin: 2px 6px 0 0;clear:both;" class="notInStL"></div><p class="strong">Ej i lager</p>
<div id="cphMain_divAvl" style="float:left; margin: 2px 6px 0 0;clear:both;" class="inStL"></div><p class="strong">I lager</p>
<div id="cphMain_divAvl" style="float:left; margin: 2px 6px 0 0;clear:both;" class="inStExL"></div><p class="strong">1-2 dagar</p>
Vad man då enkelt ser är att div:en dom (förmodligen orkar inte kolla CSS:en) använder för att visa ikonen för status har 3 olika klasser:
notInStL
inStL
inStExL
Det hela är då alltså inte svårare än att:
1. Hämta ner innehållet
2. matcha mot nån av dom 3 strängarna
EDIT: Givetvis går det att matcha mot "I lager", "ej i lager" osv likaså, gäller bara ha baguetten rätt i handen så man inte matchar "ej i lager" mot "i lager" osv.. gillar därför approachen med att plocka "class" från div:en bättre...
Men tyvärr är detta en lite shaky metod, ett problem är t ex att dom har massa andra "rekommenderade" produkter.
Dock verkar vi ha lite tur, om vi kollar på den koden:
<div id="cphMain_ucMostPopularList_rptProductUpsaleList_divAvail_0" style="display: inline-block; float: left; margin: 0 6px 0 0;" class="inSt" title="I lager"
Den klassen har alltså inte ett L, som jag misstänker står för "LARGE"....
Men det var ren lotto... Hade denna sido-meny använt sig av samma klass så hade det kunnat ta in en osäkerhet på vad det egentligen är vi lyckas matcha mot.
Det finns betydligt bättre sätt att göra detta på, det finns ramverk för att parsa html-källkod och läsa ut info.
En bättre approach vore att explicit läsa ut klassen från div:en med id "cphMain_divAvl" för att vara mer säker på att det är rätt info vi hämtar ut.... Blir lite mer jobb, en bättre regexp eller som sagt använda nån redan färdig kod för detta ändamål.
Som sagt, ugly code
Edit2: körde på Elgots funktion för att förvirra mindre..
<?php
$prod_id = $_GET["prod"];
$url = "http://www.dustinhome.se/product/" . $prod_id;
echo "$url";
echo "<br />";
$str = file_get_contents($url);
if(preg_match('/inStL/', $str)) {
echo "I Lager";
} else if (preg_match('/inStExL/', $str)) {
echo "1-2 dagar";
} else if (preg_match('/notInStL/', $str)) {
echo "Ej i lager";
} else {
echo "fett me error jau!111111";
}
?>