Crawler probleem, prijs ophalen webshop error
Alleen kom ik nu niet meer verder.
Mijn code:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
return false;
}
$content = "";
while(!feof($fp)) {
$content .= fgets($fp, 1024);
}
preg_match_all("/([$][0-9]*[,]*[.][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
echo $prices[0][0]."<br />";
fclose($fp);
?>
ini_set('display_errors',1);
error_reporting(E_ALL);
if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
return false;
}
$content = "";
while(!feof($fp)) {
$content .= fgets($fp, 1024);
}
preg_match_all("/([$][0-9]*[,]*[.][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
echo $prices[0][0]."<br />";
fclose($fp);
?>
Met preq_match_all probeer ik de prijs eruit te halen. Ik weet niet precies hoe het werkt heb even gekeken op http://php.net/manual/en/function.preg-match-all.php maar zie niet wat ik fout doe.
Ik krijg deze error:
Quote:
Notice: Undefined offset: 0 in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\crawler.php on line 15
Dus een probleem met de array?
Is er een andere methode om de data die ik wil, dus alleen de prijs uit de pagina te sorteren en deze dan declareren.
Dit is de $content:
http://img266.imageshack.us/img266/219/crawlerg.png
Gewoon een hele pagina zonder css, images enz.
Alvast bedankt!
In de eerste plaats toont de handleiding die je zelf gevonden had welke mogelijke return-statussen preg_match_all() kan hebben. Test daarom op te mogelijkheden false (fout opgetreden) of 0 (geen resultaten gevonden). (Ik heb het geprobeerd en het laatste blijkt het geval te zijn.)
In de tweede plaats heb je de regular expression kennelijk van een Amerikaanse website gehaald, want die zoekt bedragen die met een "$" beginnen:
"[$][0-9]*[,]*[.][0-9]{2}"
Dat betekent: een "$" gevolgd door een cijfer dat 0 of meer keer voorkomt (*) gevolgd door een komma die 0 of meer keer voorkomt (*) (dat lijkt me niet juist) gevolgd door een punt, gevolgd door twee cijfers.
Als ik die ombouw naar "€[0-9]*\.[0-9]{2})" (wat het volgens mij zou moeten zijn) dan levert dat nog niets op. Ik denk dat dit te maken heeft met het verveldende Euro teken, dat op verschillende manieren gecodeerd kan zijn.
Daarom zoek ik in het volgende voorbeeld op 1 of meer cijfers, gevolgd door een punt of een komma en dan twee cijfers. Dat werkt.
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
return false;
}
$content = "";
while(!feof($fp)) {
$content .= fgets($fp, 1024);
}
fclose($fp);
$status = preg_match_all("/([0-9]+[.,][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
if ($status === false ) {
echo "Er is een fout opgetreden\n";
} elseif ($status == 0) {
echo "Er zijn geen resultaten\n";
} else {
echo '<pre>';
print_r($prices);
echo '</pre>';
}
?>
ini_set('display_errors',1);
error_reporting(E_ALL);
if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
return false;
}
$content = "";
while(!feof($fp)) {
$content .= fgets($fp, 1024);
}
fclose($fp);
$status = preg_match_all("/([0-9]+[.,][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
if ($status === false ) {
echo "Er is een fout opgetreden\n";
} elseif ($status == 0) {
echo "Er zijn geen resultaten\n";
} else {
echo '<pre>';
print_r($prices);
echo '</pre>';
}
?>
Mijn probleem is hierbij opgelost.