Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once('misc.php');
- set_time_limit(0);
- // http://geektimes.ru/post/207962/ + 1
- $from = 207963;
- // http://habrahabr.ru/post/247201/ - 1
- $to = 247201;
- if (!file_exists('posts'))
- {
- $posts = array();
- for ($i = $from; $i < $to; $i++)
- {
- if (file_exists('stop'))
- die('stop');
- $url = 'http://habrahabr.ru/post/' . $i . '/';
- $data = _get($url);
- preg_match('#<span class="post_title">(.*?)</span>#si', $data, $m);
- if ($m)
- {
- $post = array('url' => $url, 'title' => $m[1]);
- preg_match_all('#<a href="([^"]+)" class="hub[^>]+>([^<]+)</a>\s*(<span class="profiled_hub"[^>]+)?#si', $data, $m);
- foreach ($m[1] as $k=>$v)
- {
- $hub = array(
- 'url' => $v,
- 'title' => $m[2][$k],
- 'profiled' => $m[3][$k] ? 1 : 0
- );
- $hubs[$hub['url']] = $hub;
- $post['hubs'][] = $hub;
- }
- preg_match('#<div class="infopanel_wrapper">.*?<div class="clear"></div>#si', $data, $ip);
- preg_match('#<span class="score"[^>]+>([^<]+)</span>#si', $ip[0], $m);
- $m[1] = htmlentities($m[1], ENT_QUOTES, 'utf-8');
- $post['score'] = (int)str_replace('–', '-', $m[1]);
- preg_match('#<div class="pageviews"[^>]+>(\d+)</div>#si', $ip[0], $m);
- $post['pageviews'] = $m[1];
- preg_match('#<div class="favs_count"[^>]+>(\d+)</div>#si', $ip[0], $m);
- $post['favs'] = $m[1];
- preg_match('#<span id="comments_count"[^>]*>(\d+)</span>#si', $data, $m);
- $post['comments'] = $m[1];
- $posts[] = $post;
- }
- file_put_contents('done', $i);
- }
- file_put_contents('posts', json_encode($posts));
- file_put_contents('hubs', json_encode($hubs));
- }
- else
- {
- $posts = json_decode(file_get_contents('posts'), true);
- $hubs = json_decode(file_get_contents('hubs'), true);
- }
- //p(sizeof($posts));
- $plus = $minus = array();
- foreach ($posts as $k=>$post)
- {
- if ($post['score'] > 0)
- $plus[] = $post;
- else
- $minus[] = $post;
- }
- usort($plus, '_compare_posts_plus');
- $top = array_slice($plus, 0, 20);
- usort($minus, '_compare_posts_minus');
- $minus = array_slice($minus, 0, 10);
- usort($plus, '_compare_posts');
- $rating = $misc = array();
- foreach ($plus as $post)
- {
- $hub = $post['hubs'][0];
- if (sizeof($rating[$hub['title']]) < 15 && $post['score'] >= 20)
- $rating[$hub['title']][] = $post;
- }
- ksort($rating);
- foreach ($rating as $title=>$posts)
- {
- if (sizeof($posts) < 10)
- {
- foreach ($posts as $post)
- $misc[] = $post;
- unset($rating[$title]);
- }
- }
- usort($misc, '_compare_posts_plus');
- $misc = array_slice($misc, 0, 30);
- function _compare_posts($a, $b)
- {
- $ra = $a['score'] * 5 + $a['favs'] * 2 + $a['comments'];
- $rb = $b['score'] * 5 + $b['favs'] * 2 + $b['comments'];
- if ($ra == $rb)
- return 0;
- return $ra > $rb ? -1 : 1;
- }
- function _compare_posts_minus($a, $b)
- {
- if ($a['score'] == $b['score'])
- return 0;
- return $a['score'] > $b['score'] ? 1 : -1;
- }
- function _compare_posts_plus($a, $b)
- {
- if ($a['score'] == $b['score'])
- return 0;
- return $a['score'] > $b['score'] ? -1 : 1;
- }
- ?>
- <h2>Топовые посты</h2>
- <br />
- Эти посты были наиболее популярны, судя по количеству плюсов. Особенно зацепил редизайн Хабра.
- <br />
- <? foreach ($top as $i => $post): ?>
- <br /><?= ($i + 1); ?>. <a href="<?= $post['url']; ?>"><?= $post['title']; ?></a>
- <sup>(<?= $post['score']; ?> / <?= $post['favs']; ?> / <?= $post['comments']; ?> / <?= $post['pageviews']; ?>)</sup>
- <? endforeach; ?>
- <br /><br />
- <h2>Фатальные посты</h2>
- <br />
- А вот такое, как показалось Хабру, лучше здесь не писать. По заголовками оценить сложно, нужно смотреть сам пост и его комментарии.
- <br />
- <? foreach ($minus as $i => $post): ?>
- <br /><?= ($i + 1); ?>. <a href="<?= $post['url']; ?>"><?= $post['title']; ?></a>
- <sup>(<?= $post['score']; ?> / <?= $post['favs']; ?> / <?= $post['comments']; ?> / <?= $post['pageviews']; ?>)</sup>
- <? endforeach; ?>
- <br /><br />
- <h2>Интересные посты</h2>
- <br />
- Эти публикации чаще всего плюсовали, добавляли в избранное и комментировали. В основном, учитывалось количество добавлений в избранное. В скобках рейтинг/в избранном/комментарии/просмотры. Записей много, даже если только ТОП5, поэтому <b>искать желаемый хаб лучше браузерным поиском</b>. Если хаб не найдет, то в нем было меньше 10 постов с рейтингом +20 и более. Критерии отсева взяты, можно считать, с потолка. Показалось, что это еще не популярные хабы. Среди постов, которые не попали под эти условия, в конце списка есть рейтинг "Разное" по количеству плюсов.
- <? foreach ($rating as $hub=>$posts): ?>
- <br /><br />
- <strong><?= $hub; ?></strong>
- <br />
- <? foreach ($posts as $i => $post): ?>
- <?= ($i + 1); ?>. <a href="<?= $post['url']; ?>"><?= $post['title']; ?></a>
- <sup>(<?= $post['score']; ?> / <?= $post['favs']; ?> / <?= $post['comments']; ?> / <?= $post['pageviews']; ?>)</sup>
- <br />
- <? if ($i == 2): ?>
- <spoiler title="Продолжение">
- <? endif; ?>
- <? endforeach; ?>
- </spoiler>
- <? endforeach; ?>
- <br /><br />
- <h2>Разное</h2>
- <br />
- Здесь топ по плюсам из всех хабов, которые не попали в группировки интересных постов.
- <br />
- <? foreach ($misc as $i => $post): ?>
- <br /><?= ($i + 1); ?>. <a href="<?= $post['url']; ?>"><?= $post['title']; ?></a>
- <sup>(<?= $post['score']; ?> / <?= $post['favs']; ?> / <?= $post['comments']; ?> / <?= $post['pageviews']; ?>)</sup>
- <? endforeach; ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement