PHP простой HTML DOM парсер: сделайте его циклом, пока не возникнет ошибка - PullRequest
2 голосов
/ 14 февраля 2012

У меня было приложение под названием GrabUrTime, это утилита для просмотра расписания, которая получает свои расписания с другого сайта, веб-пространства моего университета.Каждые два часа я запускаю скрипт, который очищает все расписания с помощью парсера и сбрасывает его в свою базу данных.

Но сегодня сервер универа работает плохо, и мой скрипт продолжает выдавать ошибку 500 на сервере уни, из-за чего скрипт не может продолжать работать.Периодически, не всегда.Однако я пробовал несколько раз, и это просто происходит случайным образом, без паттерна вообще.

Поэтому я хочу, чтобы мой скрипт обрабатывал ошибку и выполнял цикл до тех пор, пока не получит данные.

function grabtable($intakecode, $week) {
$html = file_get_html("http://webspace.apiit.edu.my/schedule/intakeview_intake.jsp?Intake1=".$intakecode."&Week=" . $week);
$dumb = $html->find('table[border=1] tr');
$thatarray = array();
        for ($i=1; $i < sizeof($dumb);++$i){
        $arow = $html->find('table[border=1] tr', $i);
         $date = $arow->find('td font', 0)->innertext;
         $time = $arow->find('td font', 1)->innertext;
        $room = $arow->find('td font', 2)->innertext;
        $loca = $arow->find('td font', 3)->innertext;
         $modu = $arow->find('td font', 4)->innertext;
         $lect = $arow->find('td font', 5)->innertext;
        $anarray = array($date, $time, $room, $loca, $modu, $lect);
        $thatarray[$i] = $anarray;

        //echo "arraylol";
    }
    //echo serialize($tablearray)."<br/>";
    $html->clear();
    return $thatarray;
}

1 Ответ

2 голосов
/ 14 февраля 2012

попробуйте что-то вроде этого:

function getHttpCode($url)
{
    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch=curl_init();
    curl_setopt ($ch, CURLOPT_URL,$url );
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch,CURLOPT_VERBOSE,false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $page=curl_exec($ch);

    //echo curl_error($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if($httpcode>=200 && $httpcode<300) 
    {
        // YOUR CODE
    }
else
{
    // What you want to do should it fail
    // perhaps this will serve you better as while loop, e.g.
    // while($httpcode>=200 && $httpcode<300) { ... }
}

использование

 getHttpCode($url);

Возможно, он не будет аккуратно вставлен в ваш код, как есть, но я уверен, что это такможет помочь с небольшим рефакторингом в соответствии с существующей структурой кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...