Какое минимальное количество страниц Тостера нужно посетить, чтобы точно узнать количество комментариев у конкретного пользователя?
Известен никнейм (идентификатор). Естественно, рассматриваем, в основном, пользователей с долгой историей, у которых может быть 1000, а может быть и 2000+ комментов.
- Для существования общего решения (для любого пользователя) необходимо хоть как-то ограничить сверху количество комментов. Например, считаем, что пользователь пишет не более одного комментария в минуту. Заходим в архив, ага, будем считать, что возраст Тостера ровно 18 лет.
18 (лет) * 365 (дней в году) * 24 (часа в сутках) * 60 (минут в часе) = ... Стоп! 24 часа не годится, будем считать, что пользователь 8 часов спит, а 16 часов пишет комменты. 18 * 365 * 16 * 60 = 6307200 (комментов).
На странице отображается 20 комментов, число страниц 6307200 / 20 = 315360
Выбрав слишком большой номер страницы (например) мы получаем страницу с ошибкой. Если воспользоваться методом дихотомии, то максимальное количесво шагов будет равно двоичному логарифму от количества страниц, или (считаем на калькуляторе) ln(315360) / ln(2) ~= 18.3
Т.е. если допускаем случай с пользователем, который сидит на Тостере с самого начала и пишет по комменту в минуту, 16 часов в день, нам должно хватить 19 попыток. Для реальных пользователей можно взять гораздо меньшую оценку сверху и существенно уменьшить количество попыток.
hint000, интересно. Только у коммента есть id, и они сортируются в обратном хронологическом порядке, так что по первой странице можно установить, что их не более 2 млн. (на данный момент) на весь Тостер, и тем более для отдельного пользователя.
dollar, линейно от итогового количества само собой, вы издеваетесь или реально не понимаете?
щелкайте по страницам, по последнгей снизу, это значит количество страниц будет N/(20*5)-1
Я не издеваюсь. Там разве где-то указано итоговое количество? Нужно загрузить 5-10 страниц, прежде чем удастся нащупать конец списка. Но если иначе никак, то нормального ответа не существует.
dollar, сначала в цикле увеличиваешь номер страницы комментариев в два раза, пока не словишь 404. Потом в цикле разность в номере страниц последних двух итераций делишь пополам, пока не найдёшь последнюю страницу. Количество страниц - 1 умножаешь на количество комментариев на странице (20) и прибавляешь количество комментариев с последней страницы. Эдакая разновидность двоичного поиска получится.
dollar, без API лучшего варианта не добиться. Ну, или пока на Тостере не сменят навигацию так, чтобы можно было узнать номер последней страницы одним запросом.