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

Статус
В этой теме нельзя размещать новые ответы.
G

guma

Прохожие
Рябят, вообще нужен скрипт который бы экспортировал погоду с кого либо сайта...
нашел что яндекс дает такую возможность но он дает это в формате xml
кто может написать скрит для экспорта ??
вот сам экспорт Для просмотра ссылки Войди или Зарегистрируйся
 
  • Заблокирован
  • #2
Хотябы так

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;
?>

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

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.
 
<?
$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] => Для просмотра ссылки Войди или Зарегистрируйся
[image2] => Для просмотра ссылки Войди или Зарегистрируйся
[temperature] => −16
[pressure] => 746
[dampness] => 78
)
 
  • Заблокирован
  • #5
Karlasan, регулярки обрабатываются дольше - факт) Хотя в данном случае они, наверное, будут быстрее :)
 
Омг, народ, а про то, что в 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 />";
	}
}
Фсе :)
И не надо играться с регулярками )
 
Омг, народ, а про то, что в 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 />";
	}
}
Фсе :)
И не надо играться с регулярками )

Еще вспомни о dom xml ) Случай - простейший. Зачем высасывать "навороты" из пальца...
 
вау, ребят глаза разбегаются ))) но факт что работает ) :)
 
<?
$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] => Для просмотра ссылки Войди или Зарегистрируйся
[image2] => Для просмотра ссылки Войди или Зарегистрируйся
[temperature] => −16
[pressure] => 746
[dampness] => 78
)

Если на прямую в браузере ввести Для просмотра ссылки Войди или Зарегистрируйся

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

Какой переменной это можно тоже вывести?
 
Первое что приходит в голову. Только для php5.
Код:
$xml = simplexml_load_file('http://export.yandex.ru/weather/?city=37054');
print_r($xml)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху