Ik was bezig met een filmscriptje om te testen, dus dat ik de link naar een film afhaal van op de website imdb.
Als ik dan die url neem en er achter zet /releaseinfo dus dat wordt dan bv: http://www.imdb.com/title/tt0111161/releaseinfo
Zoals je kan zien staat op die pagina een verzameling van releasedatums. Mijn bedoeling is om met een php scriptje de releasedates van USA, Belgium en Netherlands af te halen.
Als je in de broncode kijkt, moet ik dus telkens een patroon hebben om het volgende terug te vinden:
Zo wil ik dus ieder land + datum opvragen, en heb ik dus de LAND, DAGENMAAND en JAAR nodig uit deze html en de rest mag weg. Is er iemand handig met reguliere expressies om dat er uit te kunnen halen?Code:<tr><td><b><a href="/calendar/?region=XX">LAND</a></b></td> <td align="right"><a href="/date/03-02/">DAGENMAAND</a> <a href="/year/1995/">JAAR</a></td> <td></td></tr>
Alvast bedankt! Heb al van alles geprobeerd maar ik ben echt niet handig met die patronen.
- php: informatie van een website afhalen
-
02-02-2011, 17:52 #1
- Berichten
- 171
- Lid sinds
- 18 Jaar
php: informatie van een website afhalen
-
02-02-2011, 18:54 #2
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
file_get_contents() gebruiken om de pagina op te halen, en een regex erop loslaten die de items ophaalt die jij wilt, met preg_match_all() kun je alle resultaten in een array laten plaatsen. Grote kans dat jij per land een nieuwe regex op het gedeelte van die match moet loslaten om daadwerkelijk de releasedatums per land te krijgen.
-
02-02-2011, 19:07 #3
- Berichten
- 171
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
Zo ver was ik idd ook al. Maar het probleem is dus die regex op te stellen
-
02-02-2011, 19:35 #4
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
Gewoon zo ruim mogelijk opstellen en naar binnen werken, zoeken naar een tabel met een bepaald ID ofzo en dan de inhoud van de tabel ophalen, daarna de inhoud van de tbody ofzo en daarna past op rij-niveau gaan ophalen en exploden/ophalen.
-
02-02-2011, 19:43 #5
- Berichten
- 171
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
Oké dat helpt me idd al iets verder. Dan denk ik dan start ik met preg_match_all iedere tr er uit te halen?
(ik neem gewoon de tabel in html als input om te testen).
Code:preg_match_all('#<tr>(.*?)</tr>#', $input, $matches); print_r($matches);
Code:<tr><th class="xxxx">Country</th><th class="xxxx">Date</th></tr>
(dit is dus enkel de bovenste kop)
-
02-02-2011, 20:10 #6
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
Ben ook nog niet heel sterk in regex moet ik toegeven, heb e.e.a. geprobeerd maar nog niet tot de goede oplossing gekomen.
-
02-02-2011, 20:11 #7Particulier
- Berichten
- 1.197
- Lid sinds
- 16 Jaar
Re: php: informatie van een website afhalen
je kan ook explode-functie gebruiken
-
03-02-2011, 09:42 #8
- Berichten
- 93
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
Dit werkt bij mij:
PHP Code:preg_match_all('/<a href=".*region=([a-zA-Z]{2})">([a-zA-Z0-9]*)<\/a><\/b><\/td>[ |\n|\r]*<td align="right"><a href=".*\/date\/([0-9|-]*)\/">([a-zA-Z0-9]*)<\/a> <a href=".*\/year\/[0-9]*\/">([0-9]*)<\/a>/',$input,$matches);
print_r($matches);
-
03-02-2011, 13:52 #9
- Berichten
- 171
- Lid sinds
- 18 Jaar
Re: php: informatie van een website afhalen
@Joshua : Toch bedankt om het te proberen!
@Cedric, dat kan idd ook, maar regex leek mij een betere / snellere oplossing
@Jorit, dat klopte nog niet helemaal maar dankzij jou code ben ik er wel geraakt! Hartelijk dank.
Het is dus nu gelukt, als iemand geďnteresseerd is hoe het nu werkt bekijk volgende code:
Code:<?php $url = $_POST['imdb']; if ( substr($url, -1, 1) == "/") { $url = substr($url, 0, strlen($url)-1); } $input = file_get_contents($url."/releaseinfo"); preg_match_all('/<a href=".*region=[a-zA-Z]{2}">(.*)<\/a><\/b><\/td>[ |\n|\r]*<td align="right"><a href=".*\/date\/([0-9|-]*)\/">.*<\/a> <a href=".*\/year\/[0-9]*\/">([0-9]*)<\/a>/',$input,$matches); $releasedatums = array(); for ($i=0;$i<=count($matches[1]);$i++) { if ($matches[1][$i] == "Belgium" || $matches[1][$i] == "Netherlands" || $matches[1][$i] == "USA") { $index = $matches[1][$i]; $releasedatums[$index] = $matches[3][$i]."-".$matches[2][$i]; } } echo "<br />"; foreach($releasedatums as $land => $datum) { echo "<strong>".$land.": </strong> ".$datum."<br />"; } ?>
Code:USA: 2010-12-17 Belgium: 2011-01-19 Netherlands: 2011-01-26
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic