Voor mijn stage opdracht moet ik een systeem bouwen wat van ebay de nieuwe veilingen afhaalt en deze in een CSV plaatst.
Eerst de pagina waar het over gaat: http://cgi3.ebay.nl/ws/eB...erPage&userid=pcekerkrade
het gaat dus om de tabel met veilingen.
omdat je maar een gedeelte van de "Mij" pagina op eBay zelf kan vormgeven kunnen de regelnummers varieren (ebay kan het bovenste gedeelte aanpassen) heb ik eerste een scriptje gemaakt wat het begin/einde bepaald:
en dan een script wat de regels herkent en omzet naar het gewenste formaat:
het probleem is nu de laatste 2 kolommen van de tabel, ik heb geen idee hoe ik die kan matchen met regexp (nouja, heb ik wel, maar dat zou dan alles matchen aangezien in die 2 kollomen alles kan staan (a-z, 0-9 etc. etc.)
dit is de html code van 1 regel in de tabel, de html tags en atributen zijn op dit punt in het script al gestript.
in de laatste kolom staat nu "Beschikbaar" (het is een "Nu Kopen" aanbieding) maar er kan ook de naam staan van de hoogste bieder.
Wat heb ik al geprobeert:
met "!preg_match()" iets printen als het de patterns van de vorige regels niet matched, maar dat werkt ook niet helemaal lekker, er worden kolommen dubbel geprint.
ik hoop dat jullie wat goeie tips hebben voor me zodat ik verder kan
------------------------EDIT------------------------
Ik heb het inmiddels opgelost, ik heb de HTML tags niet van te voren weggehaalt maar na de regexp, met html is er namelijk wel verschil tussen de regels
maargoed, code zegt meer :P:
toch appart, ik heb echt uren vastgezeten met dit probleem, maar door het effe "van me af te schrijven" kom je spontaan op een idee hoe ik ook kan doen
Eerst de pagina waar het over gaat: http://cgi3.ebay.nl/ws/eB...erPage&userid=pcekerkrade
het gaat dus om de tabel met veilingen.
omdat je maar een gedeelte van de "Mij" pagina op eBay zelf kan vormgeven kunnen de regelnummers varieren (ebay kan het bovenste gedeelte aanpassen) heb ik eerste een scriptje gemaakt wat het begin/einde bepaald:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $ebay_artikel = fopen("http://cgi3.ebay.nl/ws/eBayISAPI.dll?ViewUserPage&userid=pcekerkrade", "r"); $r = 1; while (!feof($ebay_artikel)) { $buffer = fgets($ebay_artikel, 4096); if (preg_match('/Lijst met objecten die ik nu verkoop \(kijk in onze winkel voor alle artikelen !!\)/', $buffer)) { $begin = $r + 26; } if (preg_match('/die dit lid momenteel aanbiedt\./', $buffer) && empty($eind)) { $eind = $r - 1; } $r++; } fclose($ebay_artikel); |
en dan een script wat de regels herkent en omzet naar het gewenste formaat:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| $ebay_artikel = file("http://cgi3.ebay.nl/ws/eBayISAPI.dll?ViewUserPage&userid=pcekerkrade"); $nieuwe_veilingen = fopen("nieuwe_veilingen", "w+"); for($r = $begin; $r < $eind; $r++) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('/\011/', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('/Beschikbaar /', 'Beschikbaar', $ebay_artikel[$r]); if(!preg_match('/^\(.*/', $ebay_artikel[$r])) { $ebay_artikel[$r] = $ebay_artikel[$r] . "; "; if(!empty($ebay_artikel[$r])) { if(preg_match('/[0-9]{10}/', $ebay_artikel[$r])) { if($r !== $begin + 1) { fwrite($nieuwe_veilingen, "\n" . $ebay_artikel[$r]); } else { fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } } if(preg_match('/[0-3][0-9]-[a-z]{3}-[0-1][0-9]; /', $ebay_artikel[$r])) { $pattern = array('/jan/', '/feb/', '/mrt/', '/apr/', '/mei/', '/jun/', '/jul/', '/aug/', '/sep/', '/okt/', '/nov/', '/dec/'); $replace = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); $ebay_artikel[$r] = preg_replace($pattern, $replace, $ebay_artikel[$r]); $ebay_artikel[$r] = date("Y-m-d", mktime(0, 0, 0, substr($ebay_artikel[$r], 3, 2), substr($ebay_artikel[$r], 0, 2), substr($ebay_artikel[$r], 7, 2))) . "; "; fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } if(preg_match('/[0-3][0-9]-[a-z]{3}-[0-1][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]; /', $ebay_artikel[$r])) { $pattern = array('/jan/', '/feb/', '/mrt/', '/apr/', '/mei/', '/jun/', '/jul/', '/aug/', '/sep/', '/okt/', '/nov/', '/dec/'); $replace = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); $ebay_artikel[$r] = preg_replace($pattern, $replace, $ebay_artikel[$r]); $ebay_artikel[$r] = date("Y-m-d H:i:s", mktime(substr($ebay_artikel[$r], 9, 2), substr($ebay_artikel[$r], 12, 2), substr($ebay_artikel[$r], 15, 2), substr($ebay_artikel[$r], 3, 2), substr($ebay_artikel[$r], 0, 2), substr($ebay_artikel[$r], 7, 2))) . "; "; fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } if(preg_match('/[0-9]*,[0-9]{2}; /', $ebay_artikel[$r])) { $ebay_artikel[$r] = substr($ebay_artikel[$r], 4); $ebay_artikel[$r] = str_replace(',', '.', $ebay_artikel[$r]); fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } } } } fclose($nieuwe_veilingen); |
het probleem is nu de laatste 2 kolommen van de tabel, ik heb geen idee hoe ik die kan matchen met regexp (nouja, heb ik wel, maar dat zou dan alles matchen aangezien in die 2 kollomen alles kan staan (a-z, 0-9 etc. etc.)
dit is de html code van 1 regel in de tabel, de html tags en atributen zijn op dit punt in het script al gestript.
HTML:
1
2
3
4
5
6
7
8
9
| </tr> <tr bgcolor=""> <td align="left"><a href="http://cgi.ebay.nl/ws/eBayISAPI.dll?ViewItem&item=6763481499">6763481499</a></td> <td align="left">25-apr-05</td> <td>05-mei-05 10:56:12</td> <td align="right">EUR 139,95</td> <td>Portable harddisk en kaarlezer/copier in een !! OP=OP !</td> <td align="left"><a href="http://cgi.ebay.nl/ws/eBayISAPI.dll?ViewItem&item=6763481499">Beschikbaar </a></td> </tr> |
in de laatste kolom staat nu "Beschikbaar" (het is een "Nu Kopen" aanbieding) maar er kan ook de naam staan van de hoogste bieder.
Wat heb ik al geprobeert:
met "!preg_match()" iets printen als het de patterns van de vorige regels niet matched, maar dat werkt ook niet helemaal lekker, er worden kolommen dubbel geprint.
ik hoop dat jullie wat goeie tips hebben voor me zodat ik verder kan
------------------------EDIT------------------------
Ik heb het inmiddels opgelost, ik heb de HTML tags niet van te voren weggehaalt maar na de regexp, met html is er namelijk wel verschil tussen de regels
maargoed, code zegt meer :P:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| $ebay_artikel = file("http://cgi3.ebay.nl/ws/eBayISAPI.dll?ViewUserPage&userid=pcekerkrade"); $nieuwe_veilingen = fopen("nieuwe_veilingen", "w+"); for($r = $begin; $r < $eind; $r++) { $ebay_artikel[$r] = preg_replace('/\011/', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('/Beschikbaar /', 'Beschikbaar', $ebay_artikel[$r]); if(!preg_match('/^\(.*/', $ebay_artikel[$r])) { if(!empty($ebay_artikel[$r])) { if(preg_match('/>[0-9]{10}</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); if($r !== $begin + 1) { fwrite($nieuwe_veilingen, "\n" . $ebay_artikel[$r] . "; "); } else { fwrite($nieuwe_veilingen, $ebay_artikel[$r]. "; "); } } if(preg_match('/>[0-3][0-9]-[a-z]{3}-[0-1][0-9]</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); $pattern = array('/jan/', '/feb/', '/mrt/', '/apr/', '/mei/', '/jun/', '/jul/', '/aug/', '/sep/', '/okt/', '/nov/', '/dec/'); $replace = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); $ebay_artikel[$r] = preg_replace($pattern, $replace, $ebay_artikel[$r]); $ebay_artikel[$r] = date("Y-m-d", mktime(0, 0, 0, substr($ebay_artikel[$r], 3, 2), substr($ebay_artikel[$r], 0, 2), substr($ebay_artikel[$r], 7, 2))) . "; "; fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } if(preg_match('/>[0-3][0-9]-[a-z]{3}-[0-1][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); $pattern = array('/jan/', '/feb/', '/mrt/', '/apr/', '/mei/', '/jun/', '/jul/', '/aug/', '/sep/', '/okt/', '/nov/', '/dec/'); $replace = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); $ebay_artikel[$r] = preg_replace($pattern, $replace, $ebay_artikel[$r]); $ebay_artikel[$r] = date("Y-m-d H:i:s", mktime(substr($ebay_artikel[$r], 9, 2), substr($ebay_artikel[$r], 12, 2), substr($ebay_artikel[$r], 15, 2), substr($ebay_artikel[$r], 3, 2), substr($ebay_artikel[$r], 0, 2), substr($ebay_artikel[$r], 7, 2))) . "; "; fwrite($nieuwe_veilingen, $ebay_artikel[$r]); } if(preg_match('/[0-9]*,[0-9]{2}</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); $ebay_artikel[$r] = substr($ebay_artikel[$r], 4); $ebay_artikel[$r] = str_replace(',', '.', $ebay_artikel[$r]); fwrite($nieuwe_veilingen, $ebay_artikel[$r] . "; "); } if(preg_match('/<td>.*</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); fwrite($nieuwe_veilingen, $ebay_artikel[$r] . "; "); } if(preg_match('/"left">.*>.*</', $ebay_artikel[$r])) { $ebay_artikel[$r] = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $ebay_artikel[$r]); $ebay_artikel[$r] = preg_replace('@([\r\n])[\s]+@', '', $ebay_artikel[$r]); fwrite($nieuwe_veilingen, $ebay_artikel[$r] . "; "); } } } } fclose($nieuwe_veilingen); |
toch appart, ik heb echt uren vastgezeten met dit probleem, maar door het effe "van me af te schrijven" kom je spontaan op een idee hoe ik ook kan doen
[ Voor 53% gewijzigd door Bramster op 26-04-2005 12:15 ]