|
Posted by Knikola on 08/28/07 10:06
HI, All. I have a really, really strange problem, and I need your
expertise on it.
Ok, my client wnats to parse some data from a web page. So far no
problems there. The data my client wants to parse consist of some
values, and dates.
With those values and dates I have to insert into the database only
those dates that are new.
I've managed to parse all the values and all the dates. They are stored
in two arrays : self::$datumi, self::$fondovi.
When i run queries using those two arrays the data inside the array
$fondovi is transalted to the string correctly, but not the data stored
inside the array $datumi. It's like every value in there is a null
value, or something else other then a date. But when I tried to print
self::$datumi, or print the queries in questio they all printed out
correctly. i copyed those printed queries directly into phpmyadmin, and
they ran ok. But when i tried to run the inside the script they failed.
And i don't know why.
I'd really appreciate the help here gals and guys. I've been busting my
head on this for two days now , and I really don't know where to turn to
look for an answer.
The logic of the progam is:
take a web page as a string, take values .. storem the in an array, take
dates and store them in an array. Use dates to find which values where
allready in the database.Unset those elements from the values array
which where allready inserted in the database, insert the new ones.
print the result, as you go.
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 28, 2007 at 11:53 AM
-- Server version: 5.0.45
-- PHP Version: 5.2.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `
--
-- --------------------------------------------------------
--
-- Table structure for table `fondovinakrajudana`
--
CREATE TABLE IF NOT EXISTS `fondovinakrajudana` (
`ticker` varchar(45) NOT NULL default '',
`datum` date NOT NULL default '0000-00-00',
`last` decimal(15,4) default NULL,
PRIMARY KEY (`datum`,`ticker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `fondovinakrajudana`
--
INSERT INTO `fondovinakrajudana` (`ticker`, `datum`, `last`) VALUES
('ZBIN-U-AKTV', '2007-08-21', 195.5700),
('ZBIN-U-BOND', '2007-08-21', 130.1500),
('ZBIN-U-EAKT', '2007-08-21', 139.3200),
('ZBIN-U-EURP', '2007-08-21', 124.6705),
('ZBIN-U-GLBL', '2007-08-21', 185.5100),
('ZBIN-U-PLUS', '2007-08-21', 136.0124),
('ZBIN-U-TRND', '2007-08-21', 136.7200),
('ZBIN-U-AKTV', '2007-08-22', 196.4100),
('ZBIN-U-BOND', '2007-08-22', 130.1500),
('ZBIN-U-EAKT', '2007-08-22', 141.0100),
('ZBIN-U-EURP', '2007-08-22', 124.6816),
('ZBIN-U-GLBL', '2007-08-22', 185.8100),
('ZBIN-U-PLUS', '2007-08-22', 136.0206),
('ZBIN-U-TRND', '2007-08-22', 137.7600),
('ZBIN-U-PLUS', '2007-08-27', 136.1144);
CODE:
<?php
/**
* @author Komponenta d.o.o, Nikola Stjelja
* @copyright 2007
*/
class zb_invest
{
//Deklrariaj varijable
private static $stranica;
private static $fondovi=array();
private static $fondovi_promjena=array();
private static $datumi=array();
//Spoji se na bazu
public static function spoji_se_na_bazu()
{
//Spoji se na bazu
//include('../../../classes/openCon.php');
$korisnik="root";
$sifra=""; //paswword
$baza=""; //Database
$bp=mysql_connect("localhost",$korisnik,$sifra);
mysql_select_db($baza,$bp) or die ("<font color=\"red\"
size=\"5\">Greška</font>");
}
//Preuzmi stranicu sa servera
public static function preuzmi()
{
self::$stranica=self::preuzmi_stranicu('http://www.zbi.hr/info/zbi/Graf');
}
//Uzmi sadrzaj
public static function sadrzaj()
{
function prilagodi_datum($datum)
{
/*
Uzima datum u formatu dan.mjesec.godina i vraca ga u formatu
gggg-mm-dd
*/
$datum=trim($datum);
$datum=str_replace(')','',$datum);
$datum=str_replace('(','',$datum);
$datum=trim($datum);
$niz=explode('.',$datum);
return $niz[2].'-'.$niz[1].'-'.$niz[0];
}
//Izvuci podatke
$stranica=explode('<table width="770" border="0" cellpadding="0"
cellspacing="0" bgcolor="#002967">',self::$stranica);
$stranica=explode('</table></td></td></tr></table>',$stranica[1]);
$stranica=$stranica[0];
$stranica=explode('<table border="0" cellspacing="0"
cellpadding="0" height="42">',$stranica);
$stranica=$stranica[1];
$stranica=explode('<td width="76" align="center" valign="middle"
class="white_normal" height="21" >',$stranica);
//Filtraj suvisne unose
unset($stranica[0]);
while(list($k,$v)=each($stranica))
{
$back=explode('</td>',$v);
$stranica[$k]=$back[0];
if ($k==7)
{
//Obrisi prve dvije stavke
unset($back[0]);
unset($back[1]);
unset($back[9]);
//Ubaci datume u poseban niz
self::$datumi[2]=(string) prilagodi_datum($back[2]);
self::$datumi[3]=(string) prilagodi_datum($back[3]);
self::$datumi[4]=(string) prilagodi_datum($back[4]);
self::$datumi[5]=(string) prilagodi_datum($back[5]);
self::$datumi[6]=(string) prilagodi_datum($back[6]);
self::$datumi[7]=(string) prilagodi_datum($back[7]);
self::$datumi[8]=(string) prilagodi_datum($back[8]);
}
}
//Odredi koja vrijednost ide kojem fondu
self::$fondovi['ZBIN-U-PLUS']=array(str_replace(',','.',$stranica[1]),self::$datumi[2]);
self::$fondovi['ZBIN-U-EURP']=array(str_replace(',','.',$stranica[2]),self::$datumi[3]);
self::$fondovi['ZBIN-U-GLBL']=array(str_replace(',','.',$stranica[3]),self::$datumi[4]);
self::$fondovi['ZBIN-U-BOND']=array(str_replace(',','.',$stranica[4]),self::$datumi[5]);
self::$fondovi['ZBIN-U-TRND']=array(str_replace(',','.',$stranica[5]),self::$datumi[6]);
self::$fondovi['ZBIN-U-EAKT']=array(str_replace(',','.',$stranica[6]),self::$datumi[7]);
self::$fondovi['ZBIN-U-AKTV']=array(str_replace(',','.',$stranica[7]),self::$datumi[8]);
}
//OVa funkicija priprema podatke za unos u bazu
public static function pripremi_podatke()
{
//Preuzmi lokalnu vrijednost datuma
$datum=self::$datumi;
//Odredi promjenu svakog fonda
$query="SELECT ( SELECT last FROM `fondovinakrajudana` WHERE ticker
= 'ZBIN-U-PLUS' AND datum<'$datum[2]' AND '$datum[2]'>(SELECT MAX(datum)
FROM `fondovinakrajudana` WHERE ticker = 'ZBIN-U-PLUS') ORDER BY datum
DESC LIMIT 0,1) AS 'ZBIN-U-PLUS',( SELECT last FROM `fondovinakrajudana`
WHERE ticker = 'ZBIN-U-EURP' AND datum<'$datum[3]' AND
'$datum[3]'>(SELECT MAX(datum) FROM `fondovinakrajudana` WHERE ticker =
'ZBIN-U-EURP') ORDER BY datum DESC LIMIT 0,1) AS 'ZBIN-U-EURP',( SELECT
last FROM `fondovinakrajudana` WHERE ticker = 'ZBIN-U-GLBL' AND
datum<'$datum[4]' AND '$datum[4]'>(SELECT MAX(datum) FROM
`fondovinakrajudana` WHERE ticker = 'ZBIN-U-GLBL') ORDER BY datum DESC
LIMIT 0,1) AS 'ZBIN-U-GLBL',( SELECT last FROM `fondovinakrajudana`
WHERE ticker = 'ZBIN-U-BOND' AND datum<'$datum[5]' AND
'$datum[5]'>(SELECT MAX(datum) FROM `fondovinakrajudana` WHERE ticker =
'ZBIN-U-BOND') ORDER BY datum DESC LIMIT 0,1) AS 'ZBIN-U-BOND',( SELECT
last FROM `fondovinakrajudana` WHERE ticker = 'ZBIN-U-TRND' AND
datum<'$datum[6]' AND '$datum[6]'>(SELECT MAX(datum) FROM
`fondovinakrajudana` WHERE ticker = 'ZBIN-U-TRND') ORDER BY datum DESC
LIMIT 0,1) AS 'ZBIN-U-TRND',( SELECT last FROM `fondovinakrajudana`
WHERE ticker = 'ZBIN-U-EAKT' AND datum<'$datum[7]' AND
'$datum[7]'>(SELECT MAX(datum) FROM `fondovinakrajudana` WHERE ticker =
'ZBIN-U-EAKT') ORDER BY datum DESC LIMIT 0,1) AS 'ZBIN-U-EAKT',( SELECT
last FROM `fondovinakrajudana` WHERE ticker = 'ZBIN-U-AKTV' AND
datum<'$datum[8]' AND '$datum[8]'>(SELECT MAX(datum) FROM
`fondovinakrajudana` WHERE ticker = 'ZBIN-U-AKTV') ORDER BY datum DESC
LIMIT 0,1) AS 'ZBIN-U-AKTV'";
$upit=mysql_query($query);
//Pretvori rezultat u associjativan niz
$red=mysql_fetch_assoc($upit);
//Odredi vrijednost promjene za svaki ticker
while(list($k,$v)=each(self::$fondovi))
{
if (!empty($red[$k]))
{
echo $k.' insert<br />';
self::$fondovi_promjena[$k]=(($v[0]/$red[$k])-1)*100;
}
else
{
echo $k.' unset<br />';
unset(self::$fondovi[$k]);
}
}
//Resetiraj fondove
reset(self::$fondovi);
}
//Ubaci podatke u bazu
public function ubaci_u_bazu()
{
//Prodji kroz sve fondove i ubaci ih u bazu
while(list($k,$v)=each(self::$fondovi))
{
//Odredi promejnu
$promjena=self::$fondovi_promjena[$k];
//Izvrsi upit - fondovi na kraju dana
$query="REPLACE INTO fondovinakrajudana (ticker,datum,last) VALUES
('$k','$v[1]','$v[0]')";
mysql_query($query);
echo "Ticker: $k - Last: $v[0] - Promjena: $promjena - Datum:
$v[1]<br />";
}
}
private function preuzmi_stranicu($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U;
Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);
//Vrati stranicu
return $result;
}
//Ova funkcija zatvata bazu
public static function zatvori_bazu()
{
mysql_close();
}
}
//Spoji se na bazu
zb_invest::spoji_se_na_bazu();
//Preuzmi stranicu
zb_invest::preuzmi();
//Izvuci sadzraj
zb_invest::sadrzaj();
//Priremi podatke za unos u bazu
zb_invest::pripremi_podatke();
//Ubaci podatke u bazu
zb_invest::ubaci_u_bazu();
//Zatvori bazu
zb_invest::zatvori_bazu();
?>
[Back to original message]
|