Импортирование информации с чужого сайта на свой сайт в свой дизайн

Автор: content Воскресенье, Апрель 8th, 2012 Нет комментариев

Рубрика: Язык PHP

Добре, господа!

Пример предназначен для тех, кто начинает работать с php, и не только для них.

Результатом работы программы(скрипта) является прогноз погоды на 5 дней для любого, интересующего Вас города, выводимый в виде, который нравится именно Вам, а не дизайнерам сайта-донора.

Информация в таких случаях берется с известных серверов прогноза погоды (где не пишут фразу «запрещено использование информации» и т.п.). В данном случае используется сервер http://weather.yahoo.com , на котором есть страницы с погодой для довольно большого количества городов, и практически всегда можно найти если не интересующий Вас город, то ближайший ему и идентичный по погодным условиям.

Это законченный проект, работающий на сайте www.czar.ru/weather/.

Единственным недостатком является лишь то, что админу приходится вводить в текстовый файл (возможен вариант с mysql, но в том случае мне было проще сделать в файле) название населенного пункта на родном языке и ссылку на страницу с прогнозом погоды на него на сервере Yahoo. Но никто за Вас этого делать не будет.

Посему, скрипт состоит из 2-х частей:

  1. Файл с администрированием (вводится в первую строку название города, на следующей строке — ссылка). Разбирать работу данной части, думаю, не стоит, комментариев более чем достаточно.
  2. Файл с самой программой. Работа программы будет подробно описана ниже.

1. Администрирование

Выводим на экран форму с паролем pass. В окне вводятся: номера названия ссылки Затем, после нажатия на кнопку и проверки пароля, записываем новый список в файл.

<html>

<head>

<title>admin weather</title>

</head>

<body>

<?php

$adr=$DOCUMENT_ROOT.»/weather/weather.ini»; // адрес файла, в котором и

будут записываться названия городов со ссылками

$password=’pass’; // простенькая система авторизации

$eror=’Password eror!’;

$old=file($adr); // читаем то, что сейчас есть в файле

if ($submit) { // проверяем на нажатость кнопки

if ($pass==$password) {

$fp=fopen($adr,»w»);

fwrite ($fp, $ini); // записываем в файл измененные данные

fclose($fp);

$old=file($adr);

}

else {

echo $eror;

}

}

?>

<form method=post action=»<?php echo $PHP_SELF?>»>

// информация, введенная в форму, обрабатывается этим же файлом

password:<input type=text name=pass><br>

inicialisation:<textarea name=»ini» rows=15 cols=60>

<?

for ($i=0; $i<sizeof($old); $i++) {

echo $old[$i], «»; // выводим на экран текущий вариант файла

}

?>

</textarea>

<br>

<input type=submit name=»submit» value=»Enter»>

</form>

</body>

</html>

После ввода информации в файл в виде, получаем:

50

Ларнака

http://weather.yahoo.com/forecast/Larnaca_CY_f.html

51

Пафос

http://weather.yahoo.com/forecast/Paphos_CY_f.html

«44″ — номер города.

«Ларнака» — название города.

«http://weather.yahoo.com/forecast/Larnaca_CY_f.html» — ссылка на погоду в городе Ларнака на Yahoo.

Ссылки на города организовываются по принципу:

<a href=http://www.czar.ru/weather/weather.php?weather=50>Ларнака</a>

пример:

А можно так:

<a href=http://www.czar.ru/weather/weather.php?city=Ларнака>Ларнака</a>

Но если город из друх слов, то в пробелах пишем «%20″

В таком случае, номера городов в списке не нужны:

Ларнака

http://weather.yahoo.com/forecast/Larnaca_CY_f.html

Пафос

http://weather.yahoo.com/forecast/Paphos_CY_f.html

Если у нас не текстовый файл, а mysql, то все проще.

Если кому понадобится вариант с mysql, пишите мне mailto:totoeval@mtu-net.ru

2. Программа (собственно, адаптер чужого кода к Вашему сайту)

<table width=100% border=0 cellspacing=0 cellpadding=2 bgcolor=<? echo $brdcolor; ?>>

<tr>

<td>

<br>

<!———————— FORECAST ————————->

<?php

$ini=$DOCUMENT_ROOT.’/weather/weather.ini’;

$region=file($ini); // читаем файл со списком городов-ссылок а массив $region

// определение координат искомого города

for ($i=0; $i<sizeof($region); $i++) {

if (trim($region[$i])==$weather) { // ищем номер города в списке

$city=trim($region[$i+1]); // название города

$adr=trim($region[$i+2]); // адрес страницы

}

else {

}

}

// если у нас передается информация не номером города, а названием, то:

for ($i=0; $i<sizeof($region); $i++) {

$city=str_replace($city,»%20″,» «); // заменяем «%20″ на » »

if (trim($region[$i])==$city) { // ищем название города в списке

$adr=trim($region[$i+1]); // адрес страницы

}

else {

}

}

// Входная информация для дальнейшего кода — $adr

(адрес страницы прогноза погоды для города на сайте

http://weather.yahoo.com) и $city — название города на родном языке.

//

// фразы для поиска полезной информации. Оригинал фраз можно

обнаружить на странице, например, этой, проанализировав код.

// здесь заводим в переменные фразы, по которым будем искать

нужную информацию (градусы, описания погоды, картинки).

Используем фразы до и после необходимой информации.

Этот блок в будущем придется изменять, когда на оригинале

(weather.yahoo.com) изменится код страниц. На 14 авг. 2001 он работает.

$begin_screen=’FORECAST —-’; // начальная фраза таблицы с прогнозом погоды

$end_screen=’</b></td></tr></table></td></tr></table>’;

// последняя фраза таблицы

$post_gradus=’</font></b><’; // после градусов

$before_gradus=’<font size=»3″ face=»arial»>’; // перед градусами

$before_image=’http://us.i1.yimg.com/us.yimg.com/i/we/fc/’; // перед картинкой

$post_image=’.gif’; // после картинки

$before_forecast=’top><font face=»arial» size=»2″>’; // перед фразой погоды

$post_forecast=’</font></td><td>’; // после фразы погоды

// массивы для переводов даты и описаний погоды с английского языка на родной

(в данном случае использован вариант перевода с буржуйского на язык,

которым разговаривал Ленин.

$endat=array(» «,»Mon»,»Tue»,»Wed»,»Thu»,»Fri»,»Sat»,»Sun»,

«May»,»Jul»,»Jun»,»Aug»,»Sep»,»Oct»,»Nov»,»Dec»,»Jan»,»Feb»,»Mar»,»Apr»);

// английские даты

$rudat=array(» «,»понедельник»,»вторник»,»среда»,»четверг»,»пятница»,

«суббота»,»воскресенье»,»мая»,»июля»,»июня»,»августа»,»сентября»,»октября»,

«ноября»,»декабря»,»января»,»февраля»,»марта»,»апреля»); // родные даты

$eng=array(» «,»Thunderstorms»,»Sunny»,»Partly Cloudy»,»Showers»,»Rain»,

«Mostly Cloudy»,»Tstorms»,»Drizzle»,»Cloudy»,»Flurries»,»Fog»,»High»,

«Low»,»Clear»,»Sleet»,»Rain/snow»,»Snow Showers»,»Mixed Snow», «Rain»,

«Snow»,»Mixed»); // английские описания погоды

$rus=array(» «,»гроза»,»ясно»,»переменная облачность»,»ливень»,»дожди»,

«облачно»,»гроза»,»изморось»,»пасмурно»,»снегопад»,»туман»,»день»,»ночь»,

«ясно»,»дождь со снегом»,»дождь со снегом»,»мокрый снег»,»снег с дождем»,

«снег»,»переменно»); // российские аналоги погоды

$brdcolor=’#ffffff’; // цвет рамки таблицы прогноза (белый)

$bgcolor=’#eeeeee’; //цвет фона ячеек таблицы (лучше — цвет фона страницы)

// А Здесь начинается код программы, который изменять не придется.

// занимаемся созданием даты, выводимой на экран.

Функция time() даст нам текущее время. Функцией date(d.» «.M,$t[$i])

получаем дату текущего и последующих 4 дней, а date(D,$t[$i]) дает нам

дни недели всех 5 дней. А затем переводим даты с английского языка на родной.

$t=array(4);

$d=array(4);

$dn=array(4);

for ($i=0; $i<=4; $i++) {

$t[$i]=time()+$i*86400;

$d[$i]=date(d.» «.M,$t[$i]);

$dn[$i]=date(D,$t[$i]);

for ($j=0; $j<sizeof($endat); $j++) { // переводим слова в дате

и получаем даты на родном языке

$d[$i]=str_replace($endat[$j],$rudat[$j],$d[$i]);

$dn[$i]=str_replace($endat[$j],$rudat[$j],$dn[$i]);

} // и получаем даты на языке, которым разговаривает наш нонешний Вова

}

// начинаем обрабатывать страницу.

// Выясняем строки начала и конца таблицы с прогнозом погоды.

Затем, будем работать именно с этим блоком.

$screen=file($adr); // читаем страницу с прогнозом погоды в переменную $screen

for ($i=1; $i<sizeof($screen); $i++) {

// обрабатываем строки с первой по последнюю

if (strpos($screen[$i],$begin_screen)==false) {

//находим начало таблицы с прогнозом

if (strpos($screen[$i],$end_screen)==false) {

//находим ее конец

}

else {$m=$i; // $m — номер последней строки таблицы

}

}

else {$k=$i; // $k — номер первой строки таблицы

}

} // Получаем с $screen[$k] по $screen[$m] — нашу таблицу с погодой.

Потом будемработать именно с ней, чтобы не было лишних совпадений, и

быстро работала программа.

// Можно ее выводить в «родном дизайне, но нам это не нравится

// Начинаем искать полезную информацию.

$grad=array(9); // массив из 10 чисел градусов температуры окружающей среды

$zed=0; // счетчик градусов

for ($i=$k; $i<=$m; $i++) { //работаем с градусами

if (strpos($screen[$i],$before_gradus,0)==false) {

//если нет градусов в строке (если нет фразы, стоящей перед градусами.

}

else {// если есть градусы в строке

$string_grad=$screen[$i]; // сохраняем строку с градусами в переменную

$string_grad=explode($before_gradus,$string_grad);

// разбиваем строку на массив строк по разделителю, которым является фраза

перед градусами, таким образом, мы получаем в 1 элементе

массива строку, которая начинается собственно с самого градуса погоды.

$end_grad=strpos($string_grad[1],$post_gradus,0);

// определяем позицию начала фразы, идущей после градуса.

$grad[$zed]=substr($string_grad[1],0,$end_grad);

// первый градус получаем, как подстрока, с 0-го символа до начала

фразы после градуса.

$zed++; // инкремент счетчика градусов

$end_grad=strpos($string_grad[2],$post_gradus,0);

$grad[$zed]=substr($string_grad[2],0,$end_grad); // второй градус

$zed++; // инкремент счетчика градусов

}

} // в результате чего, мы получили все градусы на нашей странице

// переводим фаренгейты в цельсии

for ($i=0; $i<=9; $i++) {$grad[$i]=round(5/9*($grad[$i]-32));

}

// в варианте с забиранием информации со страницы с цельсиями

// эту строку стоит просто закомментировать. Я оставил так, просто каприз.

// переводим фаренгейты в цельсии

// находим слова погоды абсолютно аналогично поиску градусов

$zed=0; // счетчик описаний погоды

for ($i=$k; $i<=$m; $i++) { //работаем с описаниями

if (strpos($screen[$i],$before_forecast,0)==false) {

//если нет описания погоды в строке

}

else {// если есть описания в строке

$string_grad=$screen[$i]; // сохраняем строку с описаниями в переменную

$string_grad=explode($before_forecast,$string_grad);

$end_grad=strpos($string_grad[1],$post_forecast,0);

$forec[$zed]=substr($string_grad[1],0,$end_grad);

for ($j=0; $j<sizeof($eng); $j++) { // перебираем все варианты

слов в описаниях

$forec[$zed]=str_replace($eng[$j],$rus[$j],$forec[$zed]); // переводим слова

}

$zed++; // инкремент счетчика описаний

}

} // в результате чего, мы получили все описания погоды на нашей странице

$zed=0; // счетчик слов картинок аналогично

for ($i=$k; $i<$m; $i++) { //работаем с картинками

if (strpos($screen[$i],$before_image,0)==false) {

//если нет описания погоды в строке

}

else {// если есть картинки в строке

$string_grad=$screen[$i]; // сохраняем строку с картинками в переменную

$string_grad=explode($before_image,$string_grad);

$end_grad=strpos($string_grad[1],$post_image,0);

$for_img[$zed]=substr($string_grad[1],0,$end_grad);

$zed++; // инкремент счетчика картинок

}

} // в результате чего, мы получили все картинки на нашей странице

?>

// публикуем результаты:

<table width=100% cellpadding=0 cellspacing=0 border=0>

<tr><td width=20% align=center><font size=3><b

><? echo $city; // выводим название города, для которого

отображается прогноз погоды

?></b><br></font></td></tr></table

><table width=100% cellpadding=0 cellspacing=0 border=0>

<tr><?

for ($i=0; $i<=4; $i++) { // выводим на экран ячейки с датами и днями

echo «<td width=20% align=center><font size=2><b>

$d[$i]<br>$dn[$i]</b></font></td>»;

}

?></tr

></table

><table width=100% cellpadding=0 cellspacing=0 border=0 bgcolor=<?

echo $brdcolor; ?>

><tr><td

><table width=100% cellpadding=2 cellspacing=1 border=0

><tr><?

$zed=0; // счетчик выводимых градусов

for ($i=0; $i<=4; $i++) { // выводим ячейки с прогнозами — картинки, градусы, описания

$zed1=$zed+1;

echo «<td width=20% align=center bgcolor=$bgcolor

valign=middle><img src=../pic/».$for_img[$i].».gif border=0

alt=».$forec[$i].»><br><br><

font size=2>».$forec[$i].»</font><br><br><

font size=3><b>».$grad[$zed].»°C<br>».$grad[$zed1].»°C</b>

</font></td>»;

$zed=$zed+2;

}

?>

</tr></table>

// картинки можно привязать к картинкам Яхи

(названия аналогичных по погоде совпадают, как в моем случае),

а можно сделать массивы соответствия слов-описаний погоды и Ваших картинок.

Это по-желанию. Что долговечнее, трудно судить. И фразы-описания они могут

изменить, и картинки переименовать. Можно, конечно договориться с админом Яхи,

чтобы они не меняли один из этих элементов и отталкиваться от него, но у меня

не было его телефона:о)

</td>

</tr>

</table>

Теперь программа работает, и ее можно вставлять в свой дизайн. Вот вариант: вышеупомянутая Ларнака

Если кого заинтересуют «вариации на тему» или возникнут вопросы, прошу писать мне totoeval@mtu-net.ru. А также, пишите все, кто сможет посоветовать другие варианты. Всегда рад критике и возможности повысить свой уровень.

Вопросы и ответы

Вопрос 1. Как вставить картинки?

Ответ: Если хотите скачать номера картинок на яхе, создайте такую страницу со скриптом:

for ($i=0; $i<100; $i++) {

echo $i.’ — <img

src=http://us.i1.yimg.com/us.yimg.com/i/we/fc/’.$i.’.gif’;

}

У Вас будут на экране все картинки, используемые Yahoo. Если хотите, используйте их. Если нет, то сделайте свои и назовите соответственно оригиналам. Картинки размещаются (в моем варианте) по пути ../pic/ от Вашего скрипта. Если не нравится — замените путь на свой.

Вопрос 2. Можно ли сделать этот скрипт с mysql?

Ответ: Конечно можно. Позднее напишу вариант. А пока принцип для тех, кто хочет сам попробовать:

Надо создать таблицу. поля таблицы:

  1. страна
  2. город
  3. номер города
  4. ссылка на его погоду

При работе программ, вместо поиска в файле, делать запросы в базу по этим полям.

Вопрос 3. Почему у меня ошибка (завел все на локальном апаче. инет выделенный.): Warning: file(«») — No error in f:/home/islam/www/weather/weather.php on line 78 (строка $screen=file($adr); // читаем страницу с прогнозом погоды в переменную $screen)?

Ответ: Ошибка связана с настройками апача. Видимо, не считывает содержимое файла страницы на Yahoo.

Автор: Александр Тотоев

Источник: http://www.php.su/articles/?cat=examples&page=003

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты