Подготовили важный пост и хотите скорее рассказать о нем миру? Обидно будет опубликовать его именно в тот день, когда на хабр никто не заходит. Ровно 5 месяцев назад BitLy провел исследование, где рассказал в какое время лучше постить на Facebook, Twitter, и Tumblr (русский перевод с более наглядной инфографикой).
А есть ли такие дни недели, когда лучше всего публиковаться на любимом Хабре? Понедельник день тяжелый или все активно работают после выходных? Пятничное веселье проходит с друзьями за пивом или на Хабре в комментах? Ничто не мешает самим провести мини-исследование. Давайте узнаем!
Disclaimer
Исследование не претендует на объективность, содержит логические и технические погрешности, написанный код нуждается в рефакторинге, написан на скорую руку, и использует неоптимальные технологии. И все же удалось собрать достаточно полезной информации для ряда выводов.
Допущения и методика исследования
Будем обсчитывать только успешные посты, которые:
- Содержат хотя бы один комментарий
- Были оценены положительно
Если в понедельники Хабр особенно беспощаден и щедр на минусы, наше исследование об этом умолчит.
Как быстро понять в какой день недели больше шансов привлечь внимание к посту и много плюсов? С немалой погрешностью, которая, впрочем, уменьшается при большом количестве обработанных постов, можно считать что хороший день для поста — это когда:
- Оставляют больше всего положительных оценок к постам
- Оставляют больше всего комментариев
Достаточно для каждого дня недели просуммировать количество положительно оцененных статей, количество комментариев к ним, и рейтинг статей. Так мы поймем когда больше всего людей используют Хабр и часто ли они ставят постам плюсы.
Будем сканировать все доступные для нашего юзера статьи перебором их id по прямым ссылкам. Посмотрим какие примерно номера у последних постов и будем перебирать сверху вниз до какого-нибудь поста двухлетней давности. Я выбрал диапазон от 153000 до 90000, и запускал алгоритм на нескольких разных диапазонах внутри этого блока. Круто? И несложно! Поехали писать код.
Программа
Еще одна погрешность в этом исследовании: дата берется не из поста, а из первого коммента к нему. Так быстрее, потому что у комментариев доступен datetime, а дату поста пришлось бы парсить из русского языка (что тоже несложно, но зачем). Для сканирования постов я решил использовать JavaScript, чтобы разом получить и передачу сессии, и легкий поиск данных на странице напрямую через jquery. Все это может и некрасиво, но сэкономило уйму времени, и ведь код занял полчаса. Для работы кода нужно отключить same origin policy, я сделал это с помощью плагина CORS для FireFox. Я сознательно обрабатывал синхронно в один поток с небольшими паузами, чтобы не нагружать ноутбук, давать браузеру время для рендера, да и бомбить Хабр десятком запросов в секунду некрасиво, хотя это и капля в море.
Статьи, к которым нет доступа или без рейтинга — пропускаются. Так выглядит основной JavaScript:
$(document).ready(function() {
var all = 0;
var success = 0;
var failed = 0;
var daysProcessed = [0, 0, 0, 0, 0, 0, 0];
var daysScore = [0, 0, 0, 0, 0, 0, 0];
var daysComments = [0, 0, 0, 0, 0, 0, 0];
function processPage(url) {
$.ajax({url: url, success: function(data) {
if (data.indexOf('Доступ к странице ограничен') != -1) {
failed++;
$('#failed').text(failed);
return;
}
try {
$('#loader').html(data);
} catch(e) {}
setTimeout(function() {
var score = $('.score:first').text();
if (score != '' && score.charCodeAt(0) != 8212) {
var sign = 1;
if (score.charCodeAt(0) == 8211) {
sign = -1;
score = score.substr(1);
}
var intScore = sign * parseInt(score);
var comments = $('#comments_count').text();
var intComments = parseInt(comments);
if (intComments > 0 && sign == 1) { //Do we need only positive?
var date = $('time:first').attr('datetime');
date = new Date(date);
var intDay = date.getDay();
success++;
$('#success').text(success);
daysProcessed[intDay]++;
daysScore[intDay] += intScore;
daysComments[intDay] += intComments;
$('#processed_' + intDay).text(daysProcessed[intDay]);
$('#score_' + intDay).text(daysScore[intDay]);
$('#comments_' + intDay).text(daysComments[intDay]);
} else {
failed++;
$('#failed').text(failed);
}
} else {
failed++;
$('#failed').text(failed);
}
}, 1);
}, async: false, error: function () {
failed++;
$('#failed').text(failed);
}});
}
var i = 153000;
var interval = setInterval(function() {
try {
processPage('http://habrahabr.ru/post/' + i + '/');
} catch (e) {
failed++;
$('#failed').text(failed);
}
all++;
$('#all').text(all);
i--;
if (i < 90000) {
clearInterval(interval);
}
}, 0);
});
Примитивная визуализация исключительно для удовольствия и наглядности, все любят циферки в realtime:
<html>
<head>
<script type="text/javascript" src="http://yandex.st/jquery/1.8.2/jquery.js"></script>
<script type="text/javascript">
//КОД, КОТОРЫЙ ПРИВЕДЕН ВЫШЕ
</script>
</head>
<body>
<div>All processed: <span id="all">0</span></div>
<div>All success: <span id="success">0</span></div>
<div>All failed: <span id="failed">0</span></div>
<br>
<div>Mondays processed: <span id="processed_1">0</span></div>
<div>Mondays total score: <span id="score_1">0</span></div>
<div>Mondays total comments: <span id="comments_1">0</span></div>
<br>
<div>Tuesdays processed: <span id="processed_2">0</span></div>
<div>Tuesdays total score: <span id="score_2">0</span></div>
<div>Tuesdays total comments: <span id="comments_2">0</span></div>
<br>
<div>Wednesdays processed: <span id="processed_3">0</span></div>
<div>Wednesdays total score: <span id="score_3">0</span></div>
<div>Wednesdays total comments: <span id="comments_3">0</span></div>
<br>
<div>Thursdays processed: <span id="processed_4">0</span></div>
<div>Thursdays total score: <span id="score_4">0</span></div>
<div>Thursdays total comments: <span id="comments_4">0</span></div>
<br>
<div>Fridays processed: <span id="processed_5">0</span></div>
<div>Fridays total score: <span id="score_5">0</span></div>
<div>Fridays total comments: <span id="comments_5">0</span></div>
<br>
<div>Saturdays processed: <span id="processed_6">0</span></div>
<div>Saturdays total score: <span id="score_6">0</span></div>
<div>Saturdays total comments: <span id="comments_6">0</span></div>
<br>
<div>Sundays processed: <span id="processed_0">0</span></div>
<div>Sundays total score: <span id="score_0">0</span></div>
<div>Sundays total comments: <span id="comments_0">0</span></div>
<div id="loader" style="display:none"></div>
</body>
</html>
Выглядело это так
Результаты
Наконец, результаты! Скрипт работал два дня на трех разных интервалах примерно одинаковой величины.
Суммарные показания по всем интервалам:
Всего обработано: 35690
Из них успешно: 21189
C ошибкой доступа: 14499
Утеряно бюллетеней: 2 :)
День недели | Всего постов | Плюсы | Комментарии | Плюсы/Посты | Комменты/Посты |
---|---|---|---|---|---|
Понедельник | 3637 | 136035 | 178084 | 37.40 | 48.96 |
Вторник | 3719 | 140566 | 194264 | 37.79 | 52.23 |
Среда | 3702 | 135767 | 184081 | 36.67 | 49.72 |
Четверг | 3507 | 128936 | 178940 | 36.76 | 51.02 |
Пятница | 3506 | 131063 | 170025 | 37.38 | 48.49 |
Суббота | 1573 | 64073 | 85372 | 40.73 | 54.27 |
Воскресенье | 1545 | 72376 | 91465 | 46.84 | 59.20 |
Выводы
- Больше всего постов в первые три будних дня, в выходные все отдыхают (кто бы сомневался)
- Те, кто не отдыхает в выходные — комментят на Хабре. Тоже неплохо проводят время
- При этом по абсолютной величине больше всего комментов и плюсов в начале недели
- Нет ярко выраженных пиков, хабр достаточно равномерен (спад в конце — предсказуем)
- Активность в начале недели выше, что неплохо согласуется с исследованием Facebook и Twitter
- На Хабре пик не в среду, а во вторник. Уже не понедельник, а недельный дедлайн еще далеко :)
- Если вы хотите максимального внимания и плюсов — размещайте пост в понедельник или вторник
- В пятницу у всех хорошее настроение, это тоже неплохой день для плюсов
- В четверг приятно поболтать в комментариях, но на рейтинг в этот день не рассчитывайте
- Хабр — торт еще!
Так когда все же публиковаться?
Для плюсиков — понедельник, вторник, пятница.
Для комментов — вторник, среда, четверг.
Этот пост опубликован в понедельник. Приятной недели и хороших вам постов, Хабровчане!
Автор: Silf