-
Pomoc ze skryptem PHP
Witam
Potrzebuję z poniższego linku wyciągnąć całą tabele "Nadchodzace Puchary" i pogrupować ja na:
-data
-godzina
-Nazwa turnieju
i ewentualnie dzień tygodnia.
Później sobie to zapiszę do bazy i będę działał.
Załóżmy że kod HTML już pobrałem i mam go w zmiennej $cała_strona.
I tylko z tym mam problem.
Skrypt polega na wysyłaniu smsów do członków mojej drużyny.
Najprawdopodobniej będzie odpalany z crona, później sprawydzi czy są jakieś turnieje i w zależności od daty wyśle sms do wszystkich.
Wiem że trzeba użyć wyrażeń regularnych aby to wszystko posortować.
Czy ktoś mógłby mi pomóc to napisać?
Kod całej tabelki: http://wklej.org/id/1111478/
Link: http://www.esl.eu/pl/wot/
-
Kod PHP:
<?php
function GrabData($string) {
$DOM = new DOMDocument;
$DOM->loadHTML($string);
$items = $DOM->getElementsByTagName('td');
$data = array();
$_i = 0; // bo lubie ladne indexy
$counter=0;
for ($i = 0; $i < $items->length; $i++) {
// restartuje licznik jesli trzeba
if ( $counter == 3 ) {
$counter = 0;
}
if ( $items->item($i)->nodeValue == "" ) continue;
$value = $items->item($i)->nodeValue;
$isLink = $items->item($i)->getElementsByTagName('a')->length;
if ( $isLink ) {
$value = $items->item($i)->getElementsByTagName('a')->item(0)->nodeValue;
}
if ( $counter == 0 ) {
$currentBlock = $_i;
$rawDate = trim($value);
$rawDate = explode(", ", $rawDate); // rozdziela dzien tygodnia od reszty daty
unset($rawDate[0]);
$rawDate = explode(" ", $rawDate[1]); // rozdziela dzien od godziny
$data[$currentBlock]["time"] = $rawDate[1];
$data[$currentBlock]["date"] = $rawDate[0];
$data[$currentBlock]["timestamp"] = strtotime($data[$currentBlock]["time"], strtotime(str_replace("/", ".", $rawDate[0]))); // unix timestamp
$data[$currentBlock]["datetime"] = date("Y-m-d H:i:s", $data[$currentBlock]["timestamp"]); // MySQL DATETIME
}
if ( $counter == 1 && isset($currentBlock) ) {
$data[$currentBlock]["tournament"] = trim($value);
unset($currentBlock);
++$_i;
}
++$counter;
}
return (!empty($data) ? $data : false);
}
?>
output:
Kod:
Array
(
[0] => Array
(
[time] => 19:20
[date] => 20/08/13
[timestamp] => 1377019200
[datetime] => 2013-08-20 19:20:00
[tournament] => WoT 7on7 ZÅoto dla ZuchwaÅych #66
)
[1] => Array
(
[time] => 17:00
[date] => 24/08/13
[timestamp] => 1377356400
[datetime] => 2013-08-24 17:00:00
[tournament] => WoT 3on3 ZÅoty Pluton #62
)
[2] => Array
(
[time] => 19:20
[date] => 27/08/13
[timestamp] => 1377624000
[datetime] => 2013-08-27 19:20:00
[tournament] => WoT 7on7 ZÅoto dla ZuchwaÅych #67
)
[3] => Array
(
[time] => 17:00
[date] => 31/08/13
[timestamp] => 1377961200
[datetime] => 2013-08-31 17:00:00
[tournament] => WoT 3on3 ZÅoty Pluton #63
)
)
Sprawdzalem tylko z kodem tabelki, przy calej stronie pewnie sie rozsypie =d
-
Oki dziękuję bardzo, tylko teraz mam problem z dostaniem się do tych tablic.
Jakbyś mógł mi jeszcze napisać jak to np. wyświetlić.
Próbuję tak ale nie idzie:
Kod PHP:
$result = GrabData($string);
$first = $result[0];
echo "$first[time]";
@edit
Oczywiście do $string jest przypisany cały kod tabelki - http://wklej.org/id/1111478/
-
Kod PHP:
$dataArray = GrabData($string);
if ( $dataArray ) {
// \n - nowa linia, %s - podmienia za otrzymany string
printf("%s odbędzie się dnia %s o godzinie %s.<br>\n", $dataArray[0]["tournament"], $dataArray[0]["date"], $dataArray[0]["time"]);
// mozna tez tak
echo $dataArray[0]["tournament"] . " obbędzie się dnia " . $dataArray[0]["date"] . " o godzinie " . $dataArray[0]["time"] . "<br>\n";
// lub tez wyswietlic wszystkie wpisy
for($i=0,$size=count($dataArray);$i<$size;++$i) { // petla, $i trzyma obecny index
printf("%s odbędzie się dnia %s o godzinie %s.<br>\n", $dataArray[$i]["tournament"], $dataArray[$i]["date"], $dataArray[$i]["time"]);
}
} else {
echo "Brak danych";
}
-
Dzieki wielkie :)
Jednak mój sposób był dobry tylko źle includowałem plik z kodem html :)
Teraz tylko to dopracuje i będzie git :)
Bóg zapłać !