Stuk uit bron halen
ik wil een stuk tekst van een andere site uit de bron halen en die op mijn pagina laten zien. Ik weet dat de functie file_get_contents() hierbij helpt, maar hoe kan ik er nu voor zorgen dat een bepaalt deel van de bron eruit wordt gehaalt?
Ik houdt van zelf uitproberen, dus als jullie mij een beetje kunnen sturen, graag.
Mvg,
Arthur
voor externe sites moet je met curl werken, en voor een deel van de bron heb je regular expressions nodig.(preg_match bijvoorbeeld)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// eerst halen we het bestand binnen
$geheel = file_get_contents('http://www.phphulp.nl/forum/showtopic.php?cat=1&id=47526&lasttopic=1');
// vervolgens halen we alle tekst weg voor de doeltekst
$geheel = explode('<img src="/imgs/forum/readline.gif"><br>', $geheel);
// daarna halen we alle tekst weg na de doeltekst
$geheel = explode('</td></tr></table></td></tr></table>', $geheel['1']);
echo $geheel['0'];
?>
// eerst halen we het bestand binnen
$geheel = file_get_contents('http://www.phphulp.nl/forum/showtopic.php?cat=1&id=47526&lasttopic=1');
// vervolgens halen we alle tekst weg voor de doeltekst
$geheel = explode('<img src="/imgs/forum/readline.gif"><br>', $geheel);
// daarna halen we alle tekst weg na de doeltekst
$geheel = explode('</td></tr></table></td></tr></table>', $geheel['1']);
echo $geheel['0'];
?>
Maar nu nog iets waar ik niet uitkom:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$geheel = file_get_contents('http://www.radio538.nl/top40.html');
$geheel = explode(' <td class="hitlijst_title_rechts">', $geheel);
$geheel = explode(' <div class="adLinkSkyScraper">', $geheel['1']);
$nummer = explode(' <td class="hitlijst_overzicht_td">', $geheel[0]);
$nummer = explode(' <img src="/static/project/gfx/top40/vsl_alarmschijf.gif" alt="Alarmschijf" border="0" />',$nummer['1']);
echo $nummer['0'];
?>
$geheel = file_get_contents('http://www.radio538.nl/top40.html');
$geheel = explode(' <td class="hitlijst_title_rechts">', $geheel);
$geheel = explode(' <div class="adLinkSkyScraper">', $geheel['1']);
$nummer = explode(' <td class="hitlijst_overzicht_td">', $geheel[0]);
$nummer = explode(' <img src="/static/project/gfx/top40/vsl_alarmschijf.gif" alt="Alarmschijf" border="0" />',$nummer['1']);
echo $nummer['0'];
?>
Dit heb ik er nu van gebakken, dit geef het eerste nummer van de top 40 weer. Maar hoe kan ik nu het tweede nummer laten zien?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$geheel = file_get_contents('http://www.radio538.nl/top40.html');
$geheel = explode ('<td class="hitlijst_overzicht_td"><b>', $geheel);
$geheel = explode ('</td>',$geheel[1]);
echo "$geheel[0]";
?>
$geheel = file_get_contents('http://www.radio538.nl/top40.html');
$geheel = explode ('<td class="hitlijst_overzicht_td"><b>', $geheel);
$geheel = explode ('</td>',$geheel[1]);
echo "$geheel[0]";
?>
je kan heel simpel de volgende laten zien met
$geheel = explode ('</td>',$geheel[1]);
te veranderen door
$geheel = explode ('</td>',$geheel[2]);
enz
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$ch = curl_init();
$timeout = 0; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://www.radio538.nl/web/show/id=44685');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
// display file
$parts = explode('<td class="hitlijst_overzicht_td">', $file_contents);
unset($parts['0'], $parts['80']);
$a = '1';
for($i = 1; $i < 80; $i = $i + 2){
$begin_a = explode('<b>', $parts[$i]);
$eind_a = explode('</b><br />', $begin_a['1']);
$eind_t = explode('</td>', $eind_a['1']);
$top40[$a]['titel'] = $eind_a['0'];
$top40[$a]['artiest'] = $eind_t['0'];
$a++;
}
?>
$ch = curl_init();
$timeout = 0; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://www.radio538.nl/web/show/id=44685');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
// display file
$parts = explode('<td class="hitlijst_overzicht_td">', $file_contents);
unset($parts['0'], $parts['80']);
$a = '1';
for($i = 1; $i < 80; $i = $i + 2){
$begin_a = explode('<b>', $parts[$i]);
$eind_a = explode('</b><br />', $begin_a['1']);
$eind_t = explode('</td>', $eind_a['1']);
$top40[$a]['titel'] = $eind_a['0'];
$top40[$a]['artiest'] = $eind_t['0'];
$a++;
}
?>
De array bestaat dan uit de volgende gegevens:
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
Array
(
[1] => Array
(
[titel] => SHOT OF A GUN
[artiest] => kane
)
[2] => Array
(
[titel] => 4 MINUTES
[artiest] => madonna & justin timberlake
)
[3] => Array
(
[titel] => MERCY
[artiest] => duffy
)
[4] => Array
(
[titel] => BETEKENIS
[artiest] => jeroen van der boom
)
[5] => Array
(
[titel] => BLEEDING LOVE
[artiest] => leona lewis
)
[6] => Array
(
[titel] => LOVE SONG
[artiest] => sara bareilles
)
[7] => Array
(
[titel] => ROSANNE
[artiest] => nick & simon
)
[8] => Array
(
[titel] => DISCO VOLANTE
[artiest] => ida engberg
)
[9] => Array
(
[titel] => THIS IS THE LIFE
[artiest] => amy macdonald
)
[10] => Array
(
[titel] => FATHER AND FRIEND
[artiest] => alain clark
)
[11] => Array
(
[titel] => WHEN SUMMER ENDS
[artiest] => vanvelzen
)
[12] => Array
(
[titel] => DELIRIOUS
[artiest] => david guetta
)
[13] => Array
(
[titel] => BUBBLY
[artiest] => colbie caillat
)
[14] => Array
(
[titel] => VALERIE
[artiest] => mark ronson ft. amy winehouse
)
[15] => Array
(
[titel] => TOUCH MY BODY
[artiest] => mariah carey
)
[16] => Array
(
[titel] => BUILT TO LAST
[artiest] => melee
)
[17] => Array
(
[titel] => CHASING PAVEMENTS
[artiest] => adele
)
[18] => Array
(
[titel] => ALS JE OOIT NOG EENS TERUG KAN
[artiest] => ticket for tibet
)
[19] => Array
(
[titel] => HATE THAT I LOVE YOU
[artiest] => rihanna ft. ne-yo
)
[20] => Array
(
[titel] => SQUEEZE ME
[artiest] => kraak & smaak ft. ben westbeech
)
[21] => Array
(
[titel] => SCREAM
[artiest] => timbaland ft. keri hilson & nicole scherzinger
)
[22] => Array
(
[titel] => DON'T JUMP
[artiest] => tokio hotel
)
[23] => Array
(
[titel] => THE LITTLE THINGS
[artiest] => colbie caillat
)
[24] => Array
(
[titel] => GOING WRONG
[artiest] => armin van buuren & dj shah ft. chris jones
)
[25] => Array
(
[titel] => IN LOVE WITH A GIRL
[artiest] => gavin degraw
)
[26] => Array
(
[titel] => THE GIRL YOU LOST TO COCAINE
[artiest] => sia
)
[27] => Array
(
[titel] => ALWAYS WHERE I NEED TO BE
[artiest] => the kooks
)
[28] => Array
(
[titel] => WORK (FREEMASONS REMIX)
[artiest] => kelly rowland
)
[29] => Array
(
[titel] => YOUR LOVE IS A LIE
[artiest] => simple plan
)
[30] => Array
(
[titel] => AMERICAN BOY
[artiest] => estelle ft. kanye west
)
[31] => Array
(
[titel] => SOMETHING GOOD 08
[artiest] => utah saints
)
[32] => Array
(
[titel] => EVERYBODY'S GOTTA LEARN SOMETIME
[artiest] => krezip
)
[33] => Array
(
[titel] => WHAT'S IT GONNA BE
[artiest] => h 'two' o ft. platnum
)
[34] => Array
(
[titel] => STOP AND STARE
[artiest] => one republic
)
[35] => Array
(
[titel] => UIT ELKAAR
[artiest] => yes-r
)
[36] => Array
(
[titel] => HELLO WORLD
[artiest] => nikki
)
[37] => Array
(
[titel] => TILL THE SKY FALLS DOWN
[artiest] => dash berlin
)
[38] => Array
(
[titel] => EEN NACHT MET JOU
[artiest] => fouradi
)
[39] => Array
(
[titel] => SPINNING AROUND
[artiest] => eva jane
)
[40] => Array
(
[titel] => I'LL BE WAITING
[artiest] => lenny kravitz
)
)
(
[1] => Array
(
[titel] => SHOT OF A GUN
[artiest] => kane
)
[2] => Array
(
[titel] => 4 MINUTES
[artiest] => madonna & justin timberlake
)
[3] => Array
(
[titel] => MERCY
[artiest] => duffy
)
[4] => Array
(
[titel] => BETEKENIS
[artiest] => jeroen van der boom
)
[5] => Array
(
[titel] => BLEEDING LOVE
[artiest] => leona lewis
)
[6] => Array
(
[titel] => LOVE SONG
[artiest] => sara bareilles
)
[7] => Array
(
[titel] => ROSANNE
[artiest] => nick & simon
)
[8] => Array
(
[titel] => DISCO VOLANTE
[artiest] => ida engberg
)
[9] => Array
(
[titel] => THIS IS THE LIFE
[artiest] => amy macdonald
)
[10] => Array
(
[titel] => FATHER AND FRIEND
[artiest] => alain clark
)
[11] => Array
(
[titel] => WHEN SUMMER ENDS
[artiest] => vanvelzen
)
[12] => Array
(
[titel] => DELIRIOUS
[artiest] => david guetta
)
[13] => Array
(
[titel] => BUBBLY
[artiest] => colbie caillat
)
[14] => Array
(
[titel] => VALERIE
[artiest] => mark ronson ft. amy winehouse
)
[15] => Array
(
[titel] => TOUCH MY BODY
[artiest] => mariah carey
)
[16] => Array
(
[titel] => BUILT TO LAST
[artiest] => melee
)
[17] => Array
(
[titel] => CHASING PAVEMENTS
[artiest] => adele
)
[18] => Array
(
[titel] => ALS JE OOIT NOG EENS TERUG KAN
[artiest] => ticket for tibet
)
[19] => Array
(
[titel] => HATE THAT I LOVE YOU
[artiest] => rihanna ft. ne-yo
)
[20] => Array
(
[titel] => SQUEEZE ME
[artiest] => kraak & smaak ft. ben westbeech
)
[21] => Array
(
[titel] => SCREAM
[artiest] => timbaland ft. keri hilson & nicole scherzinger
)
[22] => Array
(
[titel] => DON'T JUMP
[artiest] => tokio hotel
)
[23] => Array
(
[titel] => THE LITTLE THINGS
[artiest] => colbie caillat
)
[24] => Array
(
[titel] => GOING WRONG
[artiest] => armin van buuren & dj shah ft. chris jones
)
[25] => Array
(
[titel] => IN LOVE WITH A GIRL
[artiest] => gavin degraw
)
[26] => Array
(
[titel] => THE GIRL YOU LOST TO COCAINE
[artiest] => sia
)
[27] => Array
(
[titel] => ALWAYS WHERE I NEED TO BE
[artiest] => the kooks
)
[28] => Array
(
[titel] => WORK (FREEMASONS REMIX)
[artiest] => kelly rowland
)
[29] => Array
(
[titel] => YOUR LOVE IS A LIE
[artiest] => simple plan
)
[30] => Array
(
[titel] => AMERICAN BOY
[artiest] => estelle ft. kanye west
)
[31] => Array
(
[titel] => SOMETHING GOOD 08
[artiest] => utah saints
)
[32] => Array
(
[titel] => EVERYBODY'S GOTTA LEARN SOMETIME
[artiest] => krezip
)
[33] => Array
(
[titel] => WHAT'S IT GONNA BE
[artiest] => h 'two' o ft. platnum
)
[34] => Array
(
[titel] => STOP AND STARE
[artiest] => one republic
)
[35] => Array
(
[titel] => UIT ELKAAR
[artiest] => yes-r
)
[36] => Array
(
[titel] => HELLO WORLD
[artiest] => nikki
)
[37] => Array
(
[titel] => TILL THE SKY FALLS DOWN
[artiest] => dash berlin
)
[38] => Array
(
[titel] => EEN NACHT MET JOU
[artiest] => fouradi
)
[39] => Array
(
[titel] => SPINNING AROUND
[artiest] => eva jane
)
[40] => Array
(
[titel] => I'LL BE WAITING
[artiest] => lenny kravitz
)
)
Wel nog even een tip: Het laden gaat langzamer dan gewone tekst. Wat je zou kunnen doen is iedere keer dat er een nieuwe top40 is een cronjob laten uitvoeren welke alle gegevens in een database zet.
Gewijzigd op 01/01/1970 01:00:00 door Scrptr
@Scrptr als ik dat script van jou probeer, krijg ik een witte pagina..
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
26
27
28
29
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
<?php
$nummer = array();
$artiest = array();
$file = file_get_contents("http://www.radio538.nl/top40.html");
$list = explode('<table width="520" class="hitlijst_overzicht">', $file);
$list2 = explode('</table>', $list[1]);
$wHitlijst = $list2[0];
// in $wHitlijst zit nu heel de hitlijst
$aHitlijst = explode('<tr>', $wHitlijst);
foreach($aHitlijst as $hit) {
$aHit = explode('<td class="hitlijst_overzicht_td"><b>', $hit);
$aHit2 = explode('</td>', $aHit[1]);
// zet nummers en artiesten in de array
$nummer[] = preg_replace("#(.*?)\</b\>#si", "\\1", $aHit2[0]);
$artiest[] = preg_replace("#\<br /\>(.*?)#si", "\\1", $aHit2[0]);
}
// maak van twee arrays één
$hitlijst = array_combine($artiest, $nummer);
// de output die je zou kunnen maken
foreach($hitlijst as $art => $num) {
echo "<b>".$art."</b> - ".$num;
}
?>
$nummer = array();
$artiest = array();
$file = file_get_contents("http://www.radio538.nl/top40.html");
$list = explode('<table width="520" class="hitlijst_overzicht">', $file);
$list2 = explode('</table>', $list[1]);
$wHitlijst = $list2[0];
// in $wHitlijst zit nu heel de hitlijst
$aHitlijst = explode('<tr>', $wHitlijst);
foreach($aHitlijst as $hit) {
$aHit = explode('<td class="hitlijst_overzicht_td"><b>', $hit);
$aHit2 = explode('</td>', $aHit[1]);
// zet nummers en artiesten in de array
$nummer[] = preg_replace("#(.*?)\</b\>#si", "\\1", $aHit2[0]);
$artiest[] = preg_replace("#\<br /\>(.*?)#si", "\\1", $aHit2[0]);
}
// maak van twee arrays één
$hitlijst = array_combine($artiest, $nummer);
// de output die je zou kunnen maken
foreach($hitlijst as $art => $num) {
echo "<b>".$art."</b> - ".$num;
}
?>
Zo heb je heel de hitlijst in $hitlijst zitten ;-) (niet getest).
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Notice: Undefined offset: 1 in C:\Users\Thom\Desktop\UsbWebserver2\Root\Cijfers\538.php on line 16
Notice: Undefined offset: 1 in C:\Users\Thom\Desktop\UsbWebserver2\Root\Cijfers\538.php on line 16
- SHOT OF A GUNkane - SHOT OF A GUN
kane4 MINUTESmadonna & justin timberlake - 4 MINUTES
madonna & justin timberlakeMERCYduffy - MERCY
duffyBETEKENISjeroen van der boom - BETEKENIS
jeroen van der boomBLEEDING LOVEleona lewis - BLEEDING LOVE
leona lewisLOVE SONGsara bareilles - LOVE SONG
sara bareillesROSANNEnick & simon - ROSANNE
nick & simonDISCO VOLANTEida engberg - DISCO VOLANTE
Notice: Undefined offset: 1 in C:\Users\Thom\Desktop\UsbWebserver2\Root\Cijfers\538.php on line 16
- SHOT OF A GUNkane - SHOT OF A GUN
kane4 MINUTESmadonna & justin timberlake - 4 MINUTES
madonna & justin timberlakeMERCYduffy - MERCY
duffyBETEKENISjeroen van der boom - BETEKENIS
jeroen van der boomBLEEDING LOVEleona lewis - BLEEDING LOVE
leona lewisLOVE SONGsara bareilles - LOVE SONG
sara bareillesROSANNEnick & simon - ROSANNE
nick & simonDISCO VOLANTEida engberg - DISCO VOLANTE
dit krijg ik ... klopt nog niet helemaal..
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
26
27
28
29
30
31
32
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
<?php
$nummer = array();
$artiest = array();
$file = file_get_contents("http://www.radio538.nl/top40.html");
$list = explode('<table width="520" class="hitlijst_overzicht">', $file);
$list2 = explode('</table>', $list[1]);
$wHitlijst = $list2[0];
// in $wHitlijst zit nu heel de hitlijst
$aHitlijst = explode('<tr>', $wHitlijst);
foreach($aHitlijst as $hit) {
$aHit = explode('<td class="hitlijst_overzicht_td"><b>', $hit);
if(is_array($aHit) && !empty($aHit[1])) {
$aHit2 = explode('</td>', $aHit[1]);
$aNummer = explode("</b>", $aHit2[0]);
$aArtiest = str_replace("<br />", "", $aNummer[1]);
$nummer[] = $aNummer[0];
$artiest[] = $aArtiest;
}
}
$hitlijst = array_combine($artiest, $nummer);
foreach($hitlijst as $art => $num) {
echo "<b>".$art."</b> - ".$num."<br />".PHP_EOL;
}
?>
$nummer = array();
$artiest = array();
$file = file_get_contents("http://www.radio538.nl/top40.html");
$list = explode('<table width="520" class="hitlijst_overzicht">', $file);
$list2 = explode('</table>', $list[1]);
$wHitlijst = $list2[0];
// in $wHitlijst zit nu heel de hitlijst
$aHitlijst = explode('<tr>', $wHitlijst);
foreach($aHitlijst as $hit) {
$aHit = explode('<td class="hitlijst_overzicht_td"><b>', $hit);
if(is_array($aHit) && !empty($aHit[1])) {
$aHit2 = explode('</td>', $aHit[1]);
$aNummer = explode("</b>", $aHit2[0]);
$aArtiest = str_replace("<br />", "", $aNummer[1]);
$nummer[] = $aNummer[0];
$artiest[] = $aArtiest;
}
}
$hitlijst = array_combine($artiest, $nummer);
foreach($hitlijst as $art => $num) {
echo "<b>".$art."</b> - ".$num."<br />".PHP_EOL;
}
?>
Nu klopt 'ie helemaal :-).
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Ziet er netjes uit ;)
Edit: Is het ook mogelijk om het te doen bij sites waar je eerst moet inloggen??
Gewijzigd op 01/01/1970 01:00:00 door Thom Lala
Nee, niet dat ik weet in ieder geval.
Zou mooi zijn als het ook kan bij site waar je moet inloggen.. Zal nog even flink gaan googlen
In ieder geval begrijp ik het nu wel ongeveer, alleen ik heb nog 1 vraag.
Code (php)
Dit stukje. Betekent $aHit[1] dan eigelijk 'Na <td class="hitlijst_overzicht_td"><b> en $aHit2[0] bevat dan eigelijk wat tussen <td en </td> staat?
Is dat zo?
Thom schreef op 27.04.2008 10:48:
@Scrptr als ik dat script van jou probeer, krijg ik een witte pagina..
Logisch toch! Ik zeg: 'de array bestaat uit de volgende waarden'. Vervolgens kun je er iets mee doen. Bijvoorbeeld:
Code (php)
Als je enkel nummer 3 wilt tonen doe je dat alsvolgt:
Deze codes plak je dus onder de door mij gegeven code.
Voortaan even goed lezen.
Gewijzigd op 01/01/1970 01:00:00 door Scrptr
Oke nou sorry hoor!!
Sorry is ook weer niet nodig, ik zeg alleen dat een klein beetje uitzoekwerk wonderen doet.