download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Как да поставим в страницата си курсовете на БНБ

Автор
Съобщение
anonymous
Чет, 16.08.07, 09:35
Ще ви предоставя свой код, писан на PHP, чрез който прихващам курсовете на БНБ, парсвам ги и ги разпечатвам в страница. Получаването на информацията постигам чрез отваряне на сокет към сървъра на БНБ, на който е качена тяхната страница. Преимуществото е, че информацията се доставя на всеки, заредил страницата в момента на зареждане (в реално време), т.е. няма кеширане. Ето и кода:
Първо си описваме няколко функции за манипулиране на получената информация:
function replaceAHREF($str) //премахва всички линкове към валутните курсове на други банки
{
$str=strtoupper($str);
while(strpos($str,'<A HREF=')>0)
{
$start=strpos($str,'<A HREF=');
$end=strpos($str,'>',$start+1);
$str=substr_replace($str,'',$start,$end-$start+1);
$start=strpos($str,'</A>');
$str=substr_replace($str,'',$start,4);
}
return $str;
}

function replaceScript($str) //премахва всички скриптове от оригиналната страница
{
$str=strtoupper($str);
while(strpos($str,'<SCRIPT')>0)
{
$start=strpos($str,'<SCRIPT');
$end=strpos($str,'</SCRIPT>');
$str=substr_replace($str,'',$start,$end-$start+10);
}
return $str;
}

function replaceHeader($str) //премахва хедъра на оригиналната страница
{
$str=strtoupper($str);
$start=strpos($str,'<HEAD>');
$end=strpos($str,'</HEAD>');
$str=substr_replace($str,'',$start,$end-$start+8);
return $str;
}

function replaceBody($str) //премахва таговете <body>
{
$str=strtoupper($str);
$start=strpos($str,'<BODY');
$end=strpos($str,'>',$start+1);
$str=substr_replace($str,'',$start,$end-$start+1);
$start=strpos($str,'</BODY>');
$str=substr_replace($str,'',$start,7);
return $str;
}

function fetchURL( $url ) //върши истинската работа - отваря сокет и точи оригиналната страница
{
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0)
{
$port = 80;
}
$path = $url_parsed["path"];
if ($url_parsed["query"] != "")
{
$path .= "?".$url_parsed["query"];
}
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
$body = false;
while (!feof($fp))
{
$s = fgets($fp, 1024);
if($body)
{
$in .= $s;
}
if($s=="\r\n")
{
$body = true;
}
}
fclose($fp);
return $in;
}

//а ето и как се използват:
$str=fetchURL('http://www.bnb.bg/bnb/rates.nsf/vWebRatesByMonthBG/$First');
$str=replaceAHREF($str);
$str=replaceScript($str);
$str=replaceHeader($str);
$str=replaceBody($str);
print($str);
Ами това е. Надявам се да съм ви бил от полза. Езикът не е от значение. Просто аз ползвам PHP.

insecteater
Чет, 16.08.07, 10:33
Педи много време и аз бях правил такова наещо, но с кеширане. Знаеше се, че курсовете се обновяват в 4 часа следобед и първият посетител след този час извличаше курса. Резултата се записваше във файл, от където се извличаше за следващите потребителите, понеже парсването отнема време (а и мразя да съм чак толкова зависим от сайта на БНБ). В случай на неуспешно парсване, следващият потребител след една минута пак се опитваше да извлече курса. След това следващият потребител след петата минута, десетата, петнадесетата, 30-тата и така постепенно се разреждаше. Но страницата я получавах с fopen мисля. Става въпрос за времето на прехода между php3 и php4.
кака.лара
Чет, 16.08.07, 10:41
Merssi za sorsa!
Sigurno 6e bade polezen i za mene i za mnogo hora. Samo ot BNB da ne izpiskat za avtorski i takiva prostotii.
редактиран от кака.лара на 16.08.07 10:41
anonymous
Чет, 16.08.07, 11:14

RE: Как да поставим в страницата си курсовете на БНБ

” Merssi za sorsa!
Sigurno 6e bade polezen i za mene i za mnogo hora. Samo ot BNB da ne izpiskat za avtorski i takiva prostotii. „
Ако разгледате по-внимателно сорса, както и съответната страница на БНБ КУРСОВЕ НА ЧУЖДЕСТРАННИ ВАЛУТИ КЪМ БЪЛГАРСКИЯ ЛЕВ, веднага ще забележите, че аз не премахвам написаното най-долу, а именно източника на данните - БНБ. Така че не би трябвало да има проблем.
anonymous
Чет, 16.08.07, 11:16
Към insecteater:
Смятам, че на средно добър компютър парсването няма да отнеме почти никакво време, тъй като цялата страница под формата на string е в RAM-a на сървъра, а операциите, свързани с обработката на стрингове са много бързи. При мен отнема не повече от 0.5 сек.
редактиран от anonymous на 16.08.07 11:17
кака.лара
Чет, 16.08.07, 11:32

RE: RE: Как да поставим в страницата си курсовете на БНБ

” Ако разгледате по-внимателно сорса, както и съответната страница на БНБ КУРСОВЕ НА ЧУЖДЕСТРАННИ ВАЛУТИ КЪМ БЪЛГАРСКИЯ ЛЕВ, веднага ще забележите, че аз не премахвам написаното най-долу, а именно източника на данните - БНБ. Така че не би трябвало да има проблем.
Osven citiraneto na izto4nika 6ibanqcite moje da iskat i ne6o kato zapla6tane.
Banker=akula!
anonymous
Чет, 16.08.07, 11:40

RE: RE: RE: Как да поставим в страницата си курсовете на БНБ

” Osven citiraneto na izto4nika 6ibanqcite moje da iskat i ne6o kato zapla6tane.
Banker=akula!
Те може да поискат и да вкарам при тях всичките си милиони, които придобих чрез честно програмиране, ама НЯМА! Шегичка, естествено - за НСБОП.
редактиран от anonymous на 16.08.07 11:41
редактиран от anonymous на 16.08.07 11:43
редактиран от anonymous на 17.08.07 13:58
insecteater
Чет, 16.08.07, 12:44

RE: Как да поставим в страницата си курсовете на БНБ

” Към insecteater:
Смятам, че на средно добър компютър парсването няма да отнеме почти никакво време, тъй като цялата страница под формата на string е в RAM-a на сървъра, а операциите, свързани с обработката на стрингове са много бързи. При мен отнема не повече от 0.5 сек. „

Извинявам се, имах предвид връзката към сайта на БНБ, не самото парсване и обработка на информацията. Дразнеха ме 7-8 - те секунди в повече. А и едно време връзката към тях незнайно защо беше много бавна.

Колкото до това дали от БНБ биха имали нещо против, ще е върха на нахалството, ако искат да извличат дивиденти от информация, която е жизнено важна за цялата страна и по принцип разпространяването и би трябвало да е свободно. (Разбира се, без да се товари сървърът им излишно).

anonymous
Чет, 16.08.07, 12:53

RE: RE: Как да поставим в страницата си курсовете на БНБ

” Извинявам се, имах предвид връзката към сайта на БНБ, не самото парсване и обработка на информацията. Дразнеха ме 7-8 - те секунди в повече. А и едно време връзката към тях незнайно защо беше много бавна.

Колкото до това дали от БНБ биха имали нещо против, ще е върха на нахалството, ако искат да извличат дивиденти от информация, която е жизнено важна за цялата страна и по принцип разпространяването и би трябвало да е свободно. (Разбира се, без да се товари сървърът им излишно). „

Разбирам. В момента при мен връзката отнема не повече от 1 секунда, което е пренебрежимо малко. Сървърът им се товари точно толкова, колкото и при зареждането на самата страница от който и да е клиент, разглеждащ страницата. А възможността за манипулация на резултатите, които визуализирам после, не съм я дал аз, а хората, измислили http. Просто това е скрипт, който не показва нещо ново, а по-скоро структурира информация, която съм прочел на много места, донаписал съм нещичко и съм сглобил, за да ми свърши работа. Не претендирам за нищо.
insecteater
Чет, 16.08.07, 13:08
Благодарности от името на потребителите. Сигурен съм, че скриптът ще е полезен на широк кръг от хора

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.