[PHP] HTML en regexp

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hellooww,

Ik ben vandaag bezig geweest met een script om een HTML bestand te downloaden en dat in een temp file te zetten op de schijf. Tot zover is het gelukt.
Nou wil ik uit die temp file (knvb.txt) maar een bepaald deel gaan gebruiken omdat ik alleen die informatie nodig hebt. Het betreft de uitslagen en standen van een bepaald team.

Ik heb al geprobeerd om die tabellen er met reguliere expressions uit te krijgen, maar het wil niet lukken. De HTML is ook helemaal kapot, dus kan ik het er ook niet zomaar inplakken.

Dit is het script wat ik tot nu toe heb:

file.php:
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
<?php
function writeFile($link, $filename, $needle_start = '<a name="uitslagen">', $needle_end = 'Uitleg') {
//  $link = "http://www.knvb.nl/clubs_comp/?action=teamDetails&ClubName=Alliance&NotationDescription=513%20Vrouwen%20Zondag&LevelDescription=5e%20klasse&CompetitionType=513&ClassLevel=15&RegionCode=KNVB-DISTRICT-ZUID1&Pool=851&TeamDescription=DA1";
//  $filename = "test.txt";
    $setting = ini_set("allow_url_fopen", "On"); // fopen wrappers aan zetten om de data op te kunnen halen.
    $msg = "Log:<br>";
    if (!$setting) {
        if (is_writable($filename)) { //Controleren of het destination bestand te beschrijven is.
            if (!$handle = fopen($filename, 'w')) $msg .= "Kan het bestand niet openen<br>"; // Het destination bestand openen voor gebruik
            else { $data = file_get_contents($link); // De contents van de webpagina in een link krijgen
            $length = strlen($data) - (($pos1 = strpos($data, $needle_start)) + ($end = strlen($data) - $pos2 = strpos($data, $needle_end))); // Bepalen welke data ik nodig heb.
            $data = substr($data, $pos1, $length); // Alleen die data eruit halen.
                if (!fwrite($handle, $data)) $msg .= "Kan de data niet in het bestand schrijven<br>"; // De contents in het destination bestand schrijven
                else $msg .= "Bestand succesvol vol gepleurd met de troep van de link<br>";
            }
        } else {
            $msg .= "Kan bestand niet schrijven<br>"; // Anders error laten zien dat het destination bestand niet te beschrijven is.
        }
    } else {
        $msg .= $setting."<br>";
    }
    return($msg);
}
?>


knvb.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
include('file.php');
$filename = "knvb.txt";
$messages = writeFile("http://www.knvb.nl/clubs_comp/?action=teamDetails&ClubName=Alliance&NotationDescription=513%20Vrouwen%20Zondag&LevelDescription=5e%20klasse&CompetitionType=513&ClassLevel=15&RegionCode=KNVB-DISTRICT-ZUID1&Pool=851&TeamDescription=DA1", $filename);
echo $messages."<br>";


$test = false;
$tables = array();
$text = "";
$filename = "knvb.txt";
if (!$handle = fopen($filename, 'r')) echo "Kon $filename niet openen";
while (!feof ($handle)) {
    $line = fgets($handle, 2048);
//  if (eregi('<TABLE' , $line)) $test = TRUE; //begin zoeken
//  if (eregi('</TABLE>' , $line)) $test = FALSE; //begin zoeken
//  if ($test == TRUE) { 
    echo $line;
//  }
}
//$tables = preg_split("<table?[^>](.*?)</table>", $text);
//print_r ($tables);
?>


De output van die bestanden is te zien op:
http://84.26.137.45/knvb.php
http://84.26.137.45/knvb.txt

Weet iemand een oplossing of iets wat mij op weg kan helpen om die 3 tabellen apart te halen en die op mijn scherm te laten zien?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
preg_match_all("/<table[^>]*>(.*)</table>/iU", $html, $matches);
print_r($matches);

:?

Hoe je je file ophaalt en opslaat is verder niet echt relevant. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waarom krijg ik de volgende error als ik het script run met die regexp:

Warning: Unknown modifier 't' in knvb.php on line 17

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Omdat ik een foutje gemaakt heb. :P
PHP:
1
2
preg_match_all("#<table[^>]*>(.*)</table>#iU", $html, $matches);
print_r($matches);

Zo moet ie wat meer doen. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu geen errors meer door de regexp.
Het andere probleem is dat ie nu niets vind.

Misschien ligt het aan de HTML.
Als de tabellen niet goed gestart en afgesloten zijn zal
die wel niet veel vinden.