Главная » Полезные статьи » Язык PHP » Импортирование информации с чужого сайта на свой сайт в свой дизайн
Распечатать статью

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

Импортирование информации с чужого сайта на свой сайт в свой дизайн. (На примере импортирования прогнозов погоды с Yahoo.)

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

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

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

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

Это законченный проект, работающий на сайте http://sim-sim.ru в разделе туризма «погода в мире».

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

Посему, скрипт состоит из 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» — ссылка на погоду в городе Ларнака на Яхе.

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

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

А можно так:

<a href=http://www.sim-sim.ru/catalogue/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, пишите мне 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) изменится код страниц.

$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 . А также, пишите все, кто сможет посоветовать другие варианты. Всегда рад критике и возможности повысить свой уровень.

Источник: internet-technologies.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

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

Похожие статьи