Advertisement
JDVU

Untitled

May 27th, 2014
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. <?php
  2. /**
  3. * Exchange rate for PrivatBank
  4. *
  5. * @package stalker_portal
  6. * @author jdvusevas@gmail.com
  7. */
  8.  
  9. class CoursePrb
  10. {
  11. public $db;
  12. public $cache_table;
  13. public $content_url = 'http://privatbank.ua';
  14. public $codes = array('USD', 'EUR', 'RUB');
  15.  
  16. public function __construct(){
  17. $this->db = Mysql::getInstance();
  18. $this->cache_table = "course_cache";
  19. }
  20.  
  21. public function getData(){
  22. return $this->getDataFromDBCache();
  23. }
  24.  
  25. public function getDataFromURI(){
  26. $result = array();
  27. $content = file_get_contents($this->content_url);
  28. if ($content){
  29. $arr[1] = date("d.m.Y");
  30. $result['title'] = _('Exchange rate on').' '.$arr[1];
  31. $result['on_date'] = $arr[1];
  32. $result['data'] = array();
  33. $idx = 0;
  34.  
  35. $old_data = $this->getDataFromDBCache();
  36.  
  37. if (!array_key_exists('on_date', $old_data) || $result['on_date'] != $old_data['on_date']){
  38. //if (1){
  39.  
  40. foreach ($this->codes as $code){
  41.  
  42. preg_match("/<td width=\"26%\">$code<\/td>\s*<td width=\"25%\" style=\"text-align:right;\">(.*)<\/td>/",$content,$arr2);
  43.  
  44. // var_dump($arr2);
  45.  
  46. $result['data'][$idx] = array();
  47. $result['data'][$idx]['code'] = strtoupper($code);
  48. $result['data'][$idx]['currency'] = '1 '.strtoupper($code);
  49. $result['data'][$idx]['value'] = floatval(str_replace(',', '.', $arr2[2]));
  50.  
  51. $result['data'][$idx]['diff'] = 0;
  52. $result['data'][$idx]['trend'] = 0;
  53.  
  54. if (is_array($old_data) && array_key_exists('data', $old_data) && array_key_exists($idx, $old_data['data'])){
  55.  
  56. $result['data'][$idx]['diff'] = round(($result['data'][$idx]['value'] - $old_data['data'][$idx]['value']), 4);
  57.  
  58. if ($result['data'][$idx]['diff'] > 0){
  59. $result['data'][$idx]['trend'] = 1;
  60. }else if ($result['data'][$idx]['diff'] < 0){
  61. $result['data'][$idx]['trend'] = -1;
  62. }
  63. }
  64.  
  65. $idx++;
  66. }
  67.  
  68. $this->setDataDBCache($result);
  69. }else{
  70. $result = $old_data;
  71. }
  72. }
  73. return $result;
  74. }
  75.  
  76. private function getDataFromDBCache(){
  77.  
  78. $content = $this->db->from($this->cache_table)->where(array('url' => $this->content_url))->get()->first('content');
  79.  
  80. $content = unserialize(System::base64_decode($content));
  81.  
  82. if (is_array($content)){
  83. return $content;
  84. }else{
  85. return array();
  86. }
  87. }
  88.  
  89. private function setDataDBCache($arr){
  90.  
  91. $content = System::base64_encode(serialize($arr));
  92.  
  93. $result = $this->db->from($this->cache_table)->where(array('url' => $this->content_url))->get();
  94. $crc = $result->get('crc');
  95.  
  96.  
  97. if (md5($content) != $crc){
  98.  
  99. $data = array(
  100. 'content' => $content,
  101. 'updated' => 'NOW()',
  102. 'url' => $this->content_url,
  103. 'crc' => md5($content)
  104. );
  105.  
  106. if ($result->count() == 1){
  107.  
  108. $this->db->update($this->cache_table,
  109. $data, array('url' => $this->content_url));
  110.  
  111. }else{
  112.  
  113. $this->db->insert($this->cache_table,
  114. $data);
  115. }
  116. }
  117. }
  118. }
  119. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement