|
|
|
| Здравствуйте программисты форума softtime.ru!У меня есть тут одна идея, только вот воплотить в реальность без вас я не смогу((Пожалуйста помогите,
я хотел спарсить ленту новостей к себе на сайт http://football.kulichki.net/spain/index.htm я его сграббить то сграббил,
вот пример граба
<?php
echo '<div class="bmenu">Новости Примеры</div>';
$filename='n.php'; //?�мя этого файла
if(!isset($_GET['id'])){
$address='http://football.kulichki.net/spain/index.htm';
$file=file_get_contents($address);
$file=str_replace("<h5></h5>","",$file);
$file=iconv("windows-1251","UTF-8",$file);
preg_match_all("|<font color=\"#808080\">Новости:</font>(.*?)<center>
|is",$file,$arr);
$count = count($arr[0]);
// Расчет навигации
$end = $start + $kmess;
$end = $end < $count ? $end : $count;
for($i = $start; $i< $end; $i++) {
$arr[1][$i]=str_replace("/worldnews/news.htm?",$_SERVER["PHP_SELF"].'?id=',$arr[1][$i]);
echo $arr[1][$i].'<br>';//Дата-время
}
if ($count > $kmess) {
echo '<p>';
echo pagenav('n.php?', $start, $count, $kmess);
echo '</p>';
}
}else{ //переход по ссылке
$dir_for_news=$_SERVER['DOCUMENT_ROOT'].'/news_spain';
if(file_exists("$dir_for_news/$_GET[id]")){
$file=file_get_contents("$dir_for_news/$_GET[id]");
}else{
$address="http://football.kulichki.net/worldnews/news.htm?$_GET[id]";
$file=file_get_contents($address);
$file=iconv("windows-1251","UTF-8",$file);
$news_file_name="$dir_for_news/$_GET[id]";
$fh = fopen($news_file_name, 'w');
fwrite($fh, $file);
fclose($fh);
}
preg_match("|<DIV class=title_n>(.*)<DIV class=date_n>.*?</DIV>|is",$file,$res);
$res[2]=strip_tags($res[2]);
echo "<div><a href='$filename'>Назад</a></div>";
echo $res[1]; //Заголовок
}
?>
|
но мне хочется чтобы граб был похож на этот
<?php
//Путь к Вашему xml файлу
$xml_file="http://meteoinfo.ru/xml3/export/pay/1/1.xml";
//Подключение к БД, укажите адрес сервера, имя пользователя, пароль и название БД.
$host='site.ru';
$user='user';
$pasd='pass';
$db='forecast';
mysql_pconnect($host,$user,$pasd) or die ('Нет подключения к базе!!!');
mysql_select_db($db) or die ('Ошибка при подключении!!!');
//Копирование xml-файла к себе на хостинг
function http_get($url)
{
$buffer = "";
$url_stuff = parse_url($url);
$port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
$fp = fsockopen($url_stuff['host'], $port);
$query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
$query .= 'Host: ' . $url_stuff['host'];
$query .= "\n\n";
fwrite($fp, $query);
while ($tmp = fread($fp, 1024))
{
$buffer .= $tmp;
}
preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
return substr($buffer, - $parts[1]);
}
$fp = fopen ("forecast.xml", "w+");
fwrite ($fp, http_get($xml_file));
fclose ($fp);
//Парсинг xml-файла
$xml = simplexml_load_file("forecast.xml");
foreach ($xml->town as $town) {
$name=iconv("utf-8","windows-1251",$town['name']);
$ind=$town['id'];
$country=iconv("utf-8","windows-1251",$town['country']);
$region=iconv("utf-8","windows-1251",$town['region']);
foreach ($town->date as $date) {
$day=$date['day'];
$tday=$date->tday;
$tnight=$date->tnight;
$prec=$date->prec;
$prec_prob=$date->prec_prob;
$wind_dir=$date->wind_dir;
$windspeed=$date->windspeed;
$weather_conditions=iconv("utf-8","windows-1251",$date->weather_conditions);
$pday=$date->pday;
$pnight=$date->pnight;
//Запись иформации в БД
$res=mysql_query("insert into forecast
(Ind,Station,Country,Region,dat,tday,
tnight,prec,prec_prob,wind_dir,wind_speed,
weather_conditions,pday,pnight) values
(".$ind.",\"".$name."\",\"".$country."\",\"".$region
."\",\"".$day."\",".$tday.",".$tnight
.",".$prec.",".$prec_prob.",".$wind_dir
.",".$windspeed.",\"".$weather_conditions
."\",".$pday.",".$pnight.")");
}
}
?>
|
Это база данных.
USE `forecast`;
CREATE TABLE `forecast` (
`id` int(11) NOT NULL auto_increment,
`Ind` mediumint(9) default NULL,
`Station` varchar(255) default NULL,
`Country` varchar(255) default NULL,
`Region` varchar(255) default NULL,
`dat` date default NULL,
`tday` smallint(6) default NULL,
`tnight` smallint(6) default NULL,
`prec` smallint(6) default NULL,
`prec_prob` smallint(6) default NULL,
`wind_dir` smallint(6) default NULL,
`wind_speed` smallint(6) default NULL,
`weather_conditions` varchar(255) default NULL,
`pday` smallint(6) default NULL,
`pnight` smallint(6) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
Заранее человеческое спасибо.! | |
|
|
|
|
|
|
|
для: RealMadrid
(13.09.2009 в 14:21)
| | Не очень понятно, что значит "похож"? | |
|
|
|
|
|
|
|
для: cheops
(13.09.2009 в 15:21)
| | ну как бы написать бы по такому же принципу,пожалуйста только поймите правильно | |
|
|
|
|
|
|
|
для: RealMadrid
(13.09.2009 в 15:39)
| | Не очень понятно... дело в том, что во-втором пример как я понял разбирается XML-файл, а в первом HTML. Разумеется подходы разные. Или имеется в виду что-то другое? Например, использование функции http_get() или помещение данных в таблицу базы данных? Просто различий достаточно много и не понятно, какие вас в первую очередь интересуют, а главное, что вызывает сложность? | |
|
|
|
|
|
|
|
для: cheops
(13.09.2009 в 15:48)
| | хотелось как бы помещать в базу данных | |
|
|
|
|
|
|
|
для: RealMadrid
(13.09.2009 в 15:51)
| | Для этого сначала нужно спроектировать таблицу, кроме даты и времени и содержимого ссылки http://football.kulichki.net/worldnews/news.htm?$_GET[id], что в ней будет хранится? Какие бы поля вы хотели бы видеть в этой таблице? | |
|
|
|
|
|
|
|
для: cheops
(13.09.2009 в 16:00)
| | http://football.kulichki.net/worldnews/news.htm?$_GET[id] это как бы вторая страница которую грабит скрипт.Хотелось бы видеть в таблице все ссылки на новости и сами новости,и чтобы через определенное время обновлялся скрипт и добавляло новости автоматически в базу.ну типа cron | |
|
|
|
|
|
|
|
для: RealMadrid
(13.09.2009 в 16:05)
| | как вы думаете это возможно? | |
|
|
|
|
|
|
|
для: RealMadrid
(13.09.2009 в 16:57)
| | Это возможно, но слишком условия не четкие и может потребоваться приличное количество времени на создание такого парсера. Лучше разбить задачу на отдельные атомарные фрагменты, которые не будут требовать много времени для реализации - тогда найдется больше желающих потратить на это время. Потом фрагменты можно объеденить в рабочее приложение. Сразу большой объем вызывает у многих отторжение - с одной стороны тратиться много времени на реализацию, с другой стороны другие участники форума, у которых возникают сложности вряд ли будут разбираться в большом объеме кода. Получается работа с низкой отдачей (в обучающем плане), более характерная для коммерческих проектов (т.е. проблема идет в разрез с задачами форума). | |
|
|
|
|