1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

РНР экспорт из XML

Тема в разделе "Web Coding", создана пользователем guma, 5 янв 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. guma

    guma Прохожие

    Рябят, вообще нужен скрипт который бы экспортировал погоду с кого либо сайта...
    нашел что яндекс дает такую возможность но он дает это в формате xml
    кто может написать скрит для экспорта ??
    вот сам экспорт http://export.yandex.ru/weather/?city=37054
     
  2. LeXxiK

    LeXxiK Читатель

    Заблокирован
    Регистр.:
    10 авг 2007
    Сообщения:
    76
    Симпатии:
    9
    Хотябы так

    PHP:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <?php
    $xml
    file_get_contents ('http://export.yandex.ru/weather/?city=37054');
    $start=strpos($xml,'type>');
    $end=strpos($xml,'</weather_type>');
    $start=$start+5;
    $weather_type=substr($xml,$start,$end-$start);
    echo 
    $weather_type;
    $start=strpos($xml,'<image>');
    $end=strpos($xml,'</image>');
    $start=$start+7;
    $image=substr($xml,$start,$end-$start);
    echo 
    "<img src=".$image.">";
    $start=strpos($xml,'ture>');
    $end=strpos($xml,'</temperature>');
    $start=$start+5;
    $temperature=substr($xml,$start,$end-$start);
    echo 
    $temperature;
    ?>
    Если нужна дата и проч. - попробуйте дописать по аналогии, не получится - обращайтесь.
     
  3. Karlasan

    Karlasan Постоялец

    Регистр.:
    7 дек 2007
    Сообщения:
    77
    Симпатии:
    156
    регулярные выражения как всегда жгут нопалмом:

    PHP:
    <?
    function 
    GetXMLTag($str,$tagname)
    {
        
    preg_match("/\<".$tagname."\>([^\<]*)\<\/".$tagname."\>/",$str,$r);
        return 
    $r[1];
    }

    $s=file_get_contents('http://export.yandex.ru/weather/?city=37054');

    print 
    GetXMLTag($s,'city')."<br>";
    print 
    GetXMLTag($s,'weather_type')."<br>";
    print 
    GetXMLTag($s,'temperature')."<br>";
    ?>
    Учтите, что вывод данных производится в юникоде - возможно придется перекодировать в другие кодировки.
    Если в xml-файле несколько одинаковых тегов - функция обработает первый из них. В данном случае нас эта проблема не касется - в выдаче погоды все теги встречаются только по одному разу. при желании можно переделать с preg_match_all.
     
    zverOK нравится это.
  4. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    <?
    $s = file_get_contents('http://export.yandex.ru/weather/?city=37054');
    preg_match_all('/<([a-z0-9]+)>([^<]+)<\/\1>/',$s,$r);
    $weather = array();
    foreach ($r[1] as $k => $v) {
    $weather[$v] = $r[2][$k];
    }
    print_r($weather);
    ?>

    вывод:
    Array
    (
    [day] => 05
    [month] => 1
    [year] => 2008
    [city] => Минеральные Воды
    [country] => Россия
    [image] => http://weather.yandex.ru/i/2.gif
    [image2] => http://weather.yandex.ru/i/2.png
    [temperature] => −16
    [pressure] => 746
    [dampness] => 78
    )
     
  5. LeXxiK

    LeXxiK Читатель

    Заблокирован
    Регистр.:
    10 авг 2007
    Сообщения:
    76
    Симпатии:
    9
    Karlasan, регулярки обрабатываются дольше - факт) Хотя в данном случае они, наверное, будут быстрее :)
     
  6. g0rn

    g0rn Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    137
    Симпатии:
    63
    Омг, народ, а про то, что в php как правило есть встроенный xml парсер вы не слышали? )
    PHP:
    $parser xml_parser_create();
    $data file_get_contents("http://export.yandex.ru/weather/?city=37054");
    xml_parse_into_struct($parser$data$structure$index);
    xml_parser_free($parser);
    foreach (
    $structure as $s)
    {
        if(
    $s['tag'] != 'WEATHER')
        {
            echo 
    $s['tag'] . ": " $s['value'] . "<br />";
        }
    }
    Фсе :)
    И не надо играться с регулярками )
     
  7. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    Еще вспомни о dom xml ) Случай - простейший. Зачем высасывать "навороты" из пальца...
     
  8. guma

    guma Прохожие

    вау, ребят глаза разбегаются ))) но факт что работает ) :)
     
  9. Help

    Help Постоялец

    Регистр.:
    22 авг 2006
    Сообщения:
    54
    Симпатии:
    2
    Если на прямую в браузере ввести http://export.yandex.ru/weather/?city=37054

    то после "Россия" выдает еше "облачно с прояснениями"

    Какой переменной это можно тоже вывести?
     
  10. lobzik

    lobzik

    Регистр.:
    8 авг 2006
    Сообщения:
    311
    Симпатии:
    49
    Первое что приходит в голову. Только для php5.
    Код:
    $xml = simplexml_load_file('http://export.yandex.ru/weather/?city=37054');
    print_r($xml)
     
Статус темы:
Закрыта.