[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с парсером
MikX
Пишу парсер погоды с гисметео, есть проблема с проверкой города.
На гисметео каждый город имеет 5ти значный год, если в скрипт попадет несуществующий код, то мы не получим xml, и получим тонны ошибок.
Предполагается, что $citynum будет вводиться не от балды, но проверить надо

Вопрос: как проверить что данный XML существует?

PHP
function GetWeather($citynum) {
        
    
// надо проверить, сушествует ли XML к такому номеру города ($citynum)
    $url = "http://informer.gismeteo.ru/xml/'.$citynum.'_1.xml";
    
    
// что я тут только не пробовал, но всеравно при вводе несуществующего кода города мы получаем ошибки
    if (!is_readable($url))  
    
{ 
        $Weather 
= "Такого города нет\n";
        return $Weather;
        exit; 
        
    
}else{
      
    
// 
    $xmlq = file_get_contents('http://informer.gismeteo.ru/xml/'.$citynum.'_1.xml');

    $res1 = simplexml_load_string($xmlq);
    // и так далее, тут все работает как часы
        return $Weather;
    }
}




Спустя 1 час, 38 минут, 22 секунды (25.07.2009 - 17:59) Oyeme написал(а):
используй curl библиотеку .
У curl множество приимуществ как проверка статуса (доступен ли линк или нет).

Спустя 1 час, 31 минута, 39 секунд (25.07.2009 - 19:31) MikX написал(а):
Оказалось тут в другом проблема, гисметео для любого кода сгенерирует xml, но пустой.
<?xml version="1.0" encoding="UTF-8"?>
</xml>


Попробовал сравнивать получаемый хмл с тем, что будет получен при неправильном городе, но почему-то тоже не получается. вот код:

PHP
function GetWeather($citynum) {
    
    if 
($citynum == '') {$Weather = 'err'; return $Weather;}
    
    $url 
= "http://informer.gismeteo.ru/xml/'.$citynum.'_1.xml";
    $xmlq = file_get_contents('http://informer.gismeteo.ru/xml/'.$citynum.'_1.xml');
    
    $wrong_xml 
= '<?xml version="1.0" encoding="UTF-8"?>
</xml>'
;
    
    if 
($xmlq == $wrong_xml) {
        $Weather = 'no';
        return $Weather;
    }
    
    $Weather 
= 'ok';
    return $Weather;
}

$citynum = '123';
echo GetWeather($citynum );


Кода 123 нет, но все равно выводится ок.

(Если что - 27612 рабочий код.)

Подскажите, в чем у тебя тут ошибка?

Спустя 41 минута, 19 секунд (25.07.2009 - 20:12) Oyeme написал(а):
тут тебе надо проверят строку котору ты получил.(на корректость)

например


PHP
$xml XMLReader::open('test.xml');

// You must to use it
$xml->setParserProperty(XMLReader::VALIDATEtrue);

var_dump($xml->isValid());


или xml_get_error_code
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.