Advertisement
Guest User

artkolev

a guest
Sep 19th, 2014
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.12 KB | None | 0 0
  1. <?php
  2.     require_once($modx->config['base_path'].'assets/libs/other_cache/cache.php');
  3.  
  4.     function get_metrika($offset = 0) {
  5.         $yandex_api_url = 'http://api-metrika.yandex.ru/stat/content/popular.json';
  6.         $yandex_api_token = 'd15b2d36fa4d4e98bf76fb3968ed0ffd';
  7.         $yandex_api_id = '20358700';
  8.         $start_date = '20130219';
  9.         $now_date = date('Ymd');
  10.        
  11.         //строим урл до статистики яндекса
  12.         $url = $yandex_api_url."?id=".$yandex_api_id."&date1=".$start_date.
  13.                "&date2=".$now_date."&oauth_token=".$yandex_api_token.
  14.                "&per_page=2000&reverse=1&offset=".$offset;
  15.                
  16.         //забираем из яндекса статистику
  17.         $timeout = array('http' => array('timeout' => 5));
  18.         $context = stream_context_create($timeout);
  19.         try {
  20.             $metrika = json_decode(file_get_contents($url, false, $context), TRUE);
  21.         } catch (Exception $e) {
  22.             //запишет сообщение в лог.                
  23.             $modx->logEvent(0, 3,
  24.                             'Ошибка получения метрики:'.$e->getMessage(),
  25.                             'columnist_article_info');
  26.             $metrika = array('data' => array());
  27.         }
  28.  
  29.         return $metrika;
  30.     }
  31.    
  32.     function metrika_cache() {
  33.         $cache = new Cache;
  34.         $cache_data = $cache->read('ya_metrika_cache.php');
  35.         if ($cache_data) {
  36.             $cache_date =  $cache_data['createdon'];
  37.             //здесь проверяется не истекло ли время жизни кеша. 2 раза в сутки
  38.             if (time()-$cache_date <= 12*60*60) {
  39.                 //просто получаем данные
  40.                 $metrika = $cache_data['metrika'];
  41.                 return $metrika;
  42.             } else {
  43.                 //фаил есть, но истек. Удаляем старый, создаём новый
  44.                 $cache->delete('ya_metrika_cache.php');
  45.                 $metrika = get_metrika();
  46.                 if (isset($metrika)&&!empty($metrika)) {
  47.                     $cache->write('ya_metrika_cache.php',
  48.                                   array('metrika' => $metrika,
  49.                                         'createdon' => time()));
  50.                 }
  51.                 return $metrika;
  52.             }
  53.         } else {
  54.             //файла нет - создаём
  55.             $metrika = get_metrika();
  56.             if (isset($metrika)&&!empty($metrika)) {
  57.                 $cache->write('ya_metrika_cache.php',
  58.                               array('metrika' => $metrika,
  59.                                     'createdon' => time()));
  60.             }
  61.             return $metrika;
  62.         }
  63.         return null;
  64.     }
  65.    
  66.     function get_statics($metrika, $pageid) {
  67.         global $modx;
  68.        
  69.         $url = $modx->makeUrl($pageid);
  70.         foreach ($metrika['data'] as $row) {
  71.             if (strripos($row['url'], $url)) {
  72.                 return $row['page_views'];
  73.             }
  74.         }
  75.         return 0;
  76.     }
  77.  
  78.     function get_info() {
  79.         global $modx;
  80.        
  81.         $userid = $modx->getLoginUserID();
  82.         if (isset($userid)&&!empty($userid)&&$userid&&
  83.             $modx->isMemberOfWebGroup(array('Колумнисты',))) {
  84.             $metrika = metrika_cache();
  85.             $result = "<div id='columnist_article_info'>";
  86.            
  87.             $table_content = $modx->getFullTableName('site_content');
  88.             $db_res = $modx->db->select("id, pagetitle", $table_content,
  89.                                         "createdby = -$userid AND published = 1",
  90.                                         "menuindex");
  91.            
  92.             if ($modx->db->getRecordCount($db_res)) {
  93.                 require_once MODX_BASE_PATH.'/assets/snippets/lastcomments/lastcomments.php';
  94.                 $result .= "<div>Ваши статьи в разделе «Колумнисты»:</div>\n";
  95.                 $result .= "<ul>\n";
  96.                 while($page = $modx->db->getRow($db_res,"assoc")) {
  97.                     $url = $modx->makeUrl($page['id']);
  98.                     $result .= "<li>\n";
  99.                     $result .= "<a href='$url'>{$page['pagetitle']}</a><br />\n";
  100.                    
  101.                     if (!empty($metrika)) {
  102.                         $views_count = get_statics($metrika, $page['id']);
  103.                     } else {
  104.                         $views_count = 0;
  105.                     }
  106.                     $result .= "(просмотров: $views_count; ";
  107.                    
  108.                     $comments_count = get_comments_count($page['id']);
  109.                     $result .= "комментариев: $comments_count)";
  110.                    
  111.                     $result .= "</li>\n";
  112.                 }
  113.                 $result .= "</ul>\n";
  114.                 $result .= "<p><b>Статистика обновляется 2 раза в сутки</b></p>";
  115.             }
  116.             $result .= "</div>";
  117.             return $result;
  118.         }
  119.        
  120.         return "";
  121.     }
  122. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement