Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2020-07-14, 17:49
  #13
Avstängd
Så där.

Kod:
<?php

for ($x 0$x <= 150$x++) {
    
    
$url "https://www.game-state.com/index.php?page=$x&game=cs&passworded=1&spp=50";
$raw file_get_contents($url);
$startsAt strpos($raw"serverlist") + strlen(">");
$endsAt strpos($raw"paginate"$startsAt);
$result substr($raw$startsAt$endsAt $startsAt);

preg_match_all("'<td>(.*?)</td>'si"$result$matches);
$var1 $matches[1];

print_r($var1); 
    
}

?>
Citera
2020-07-14, 18:01
  #14
Medlem
Fast du får fortfarande några skräpträffar med ditt regexp. Är det inget du behöver bry dig om?
Citera
2020-08-02, 17:08
  #15
Medlem
Robert-Arslebergs avatar
Du skulle kunna göra någonting i stil med detta:

Kod:
<?php
function filterUnwantedValues($input) {
    
$unwantedValues = [
        
'Server Name',
        
'Players',
        
'Map',
    ];
    foreach (
$unwantedValues as $value) {
        
// Use !== false because strpos might return 0
        
if (strpos($input$value) !== false) {
            return 
false;
        }
    }
    return 
true;
}

function 
fetchData($start 1$stop 1$currentValues = []) {
    if (
$stop && $start $stop) {
        return 
$currentValues;
    }

    
$url "https://www.game-state.com/index.php?page=$start&game=cs&passworded=1&spp=50";
    
$data file_get_contents($url);

    
preg_match_all(
        
'/<td class="(hostname|players|mapname)">(.+)<\/td>/i',
        
$data,
        
$matches
    
);

    if (!isset(
$matches[2])) {
        return 
$currentValues;
    }

    
$filteredValues array_filter($matches[2], 'filterUnwantedValues');

    if (!
count($filteredValues)) {
        return 
$currentValues;
    }

    return 
fetchData(
        
$start 1,
        
$stop,
        
array_merge($currentValues$filteredValues)
    );
}
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
    $start 
= isset($_GET['start']) ? $_GET['start'] : 1;
    
$stop = isset($_GET['stop']) ? $_GET['stop'] : $start;

    foreach (
fetchData($start$stop) as $key => $value) {
        
// Number of class names in preg_match_all pattern = 3
        
if ($key !== && $key === 0) {
            echo 
'<br>';
        }
        echo 
'<div>'strip_tags($value), '</div>';
    }
    
?>
</body>
</html>

Scriptet kan du sedan anropa med parametrarna "start" och "stop", där start är vilken sida du vill börja på (default 1) och stop är vilken sidan du vill sluta på (default samma värde som "start").

Anger du 0 som värde på "stop" så kommer scriptet stanna efter sista sidan, då det inte längre finns någon giltig data (men du får eventuellt en timeout till webservern innan dess).

Exempel på anrop:
Hämta sida 50-100
Citat:
script.php?start=50&stop=100
Hämta sida 1-100
Citat:
script.php?stop=100
Hämta alla sidor med start från sida 100
Citat:
script.php?start=100&stop=0
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback