Php sida skrapning (del II). (4 / 7 steg)
Steg 4: Pro Football scores.
<? php
//----------------------------------------------------------------
funktioner
funktion do_offset($level) {
$offset = ""; förskjutning för subarry
för ($i = 1; $i < $level; $i ++) {
$offset = $offset. "< td >< /td >";
}
återvända $offset;
}
funktion show_array ($array, $level, $sub) {
om (is_array($array) == 1) {/ / kolla om indata är en array
foreach ($array som $key_val = > $value) {
$offset = "";
om (is_array($value) == 1) {/ / array är flerdimensionella
ECHO "< tr >";
$offset = do_offset($level);
show_array ($value, $nivå + 1, 1);
}
annat {/ / (sub) array är inte multidim
om ($sub! = 1) {/ / first post för subarray
ECHO "< tr nosub >";
$offset = do_offset($level);
}
$sub = 0;
ECHO $offset. "< td huvudsakliga". $sub. "bredd = \"120\">". $key_val.
"< /td >< td bredd = \"120\">". $value. "< /td >";
ECHO "< /tr >";
}
} //foreach $array
}
annat {/ / argument $array är inte en matris
hemkomst.
}
}
funktion html_show_array($array) {
ECHO "< tabell cellspacing = \"0\"border = \"2\"> \n";
show_array ($array, 1, 0);
ECHO "< / table > \n";
}
slutet funktioner
//---------------------------------------------------------------
Ange nuvarande spel vecka
$Current_Week = "p1"; #preweek 3, bara för att se om skriptet fungerar. När säsongen börjar, kommer att '1' beteckna vecka en etc.
Ladda källkod, beroende på den aktuella veckan, av webbplatsen till en variabel som en sträng
$url = "http://sports.yahoo.com/nfl/scoreboard?w= $Current_Week";
$string = file_get_contents($url);
ställa in sökmönstret (med reguljära uttryck)
$find = ' | < en href="/nfl/teams/.*?" >(.*?) < /a >. *? < td align = "rätt" class = "ysptblclbg6 totala" >. *? < span class = "yspscores" >(.*?) & nbsp; |is;
söksträng för mönster och lagra innehållet finns inuti uppsättningen parens i matrisen $matches
$matches [1] kommer att hålla team namn i den ordning de visas på sidan, och $matches [2] poäng
preg_match_all ($find, $string, $matches);
initiera noter array, om du vill gruppera team och poäng tillsammans i spel
$scores = array();
räkna antalet lag hittade, som skall användas i slingan nedan
$count = count($matches[1]);
loop från 0 till $count, i steg om 2
Detta görs för att gruppera 2 lag och 2 poäng tillsammans i spel, med varje iteration av loopen
trim () används för att klippa bort alla blanksteg omger Lagnamn och noter
strip_tags () används för att ta bort HTML-fet tagg (< b >) från den vinnande poängen
för ($i = 0; $i < $count; $i += 2) {
$away_team = trim($matches[1][$i]);
$away_score = trim($matches[2][$i]);
$home_team = trim ($matches [1] [$i + 1]);
$home_score = trim ($matches [2] [$i + 1]);
$winner = (strpos ($away_score, ' <') === falskt)? $home_team: $away_team;
$scores [] = array ()
'awayteam' = > $away_team,
'awayscore' = > strip_tags($away_score),
'hometeam' = > $home_team,
'homescore' = > strip_tags($home_score),
"vinnare" = > $winner
);
}
ECHO "< br >< hr >";
ECHO "noter från veckan: $Current_Week";
ECHO "< hr >";
ECHO "< br >";
se hur matrisen noter ser ut
ECHO '< pre >'. print_r ($scores, sann). "< / pre >';
$input = $scores;
$cols = 5;
ECHO "< br >";
ECHO count($scores);
ECHO "< br >";
ECHO "< tabellkantlinjen = \"5\"cellpadding = \"10\">";
ECHO "< tr >";
ECHO "< td > away_team < /td >";
ECHO "< td > away_score < /td >";
ECHO "< td > home_team < /td >";
ECHO "< td > home_score < /td >";
ECHO "< td > vinnare < /td >";
ECHO "< /tr >";
för ($i = 0; $i < count($input); $i ++)
// {
ECHO "< tr >";
för ($c = 0; $c < $cols; $c ++)
// {
ECHO "< td > $input [$i] < /td >";
ECHO "< td > $away_team < /td >";
ECHO "< td > $away_score < /td >";
ECHO "< td > $home_team < /td >";
ECHO "< td > $home_score < /td >";
ECHO "< td > $winner < /td >";
// }
ECHO "< /tr >";
// }
ECHO "< / table >";
foreach ($scores som $key_val = > $value) {
$offset = "";
om (is_array($value) == 1) {/ / array är flerdimensionella
ECHO "< tr >";
$offset = do_offset($level);
ECHO $offset. "< td >". $key_val. "< /td >";
show_array ($value, $nivå + 1, 1);
// }
annat {/ / (sub) array är inte multidim
om ($sub! = 1) {/ / first post för subarray
ECHO "< tr nosub >";
$offset = do_offset($level);
// }
$sub = 0;
ECHO $offset. "< td huvudsakliga". $sub. "bredd = \"120\">". $key_val.
"< /td >< td bredd = \"120\">". $value. "< /td >";
ECHO "< /tr > \n";
// }
} //foreach $array
spelresultat och vinnande lagen kan nu nås från arrayen noter
t.ex. $scores [0] ['awayteam'] innehåller namnet på det away team (['awayteam'] del) från det första spelet på sidan ([0] del)
html_show_array($Scores);
? >