Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Рейтинг хабов по постам и подписчикам

Anna | 2.06.2014 | нет комментариев

На данный момент на прогре около 350 хабов. Функционал сайта разрешает сортировать их по имени и по индексу. А по иным параметрам — скажем по числу постов — нет, а хотелось бы.

Меня вдохновила статья рейтинг постов хаба, и я решил сделать схожую, но составить теснее рейтинг самих хабов.

В первой половине статьи я представлю вам рейтинги хабов по постам и подписчикам, а также маленький их обзор. А во 2-й — детально распишу, как я на Java с поддержкой библиотеки JSoup парсил HTML страницы прогры, с какими увлекательными явлениями и задачами столкнулся. И в конце статьи выложу полный начальный код программы.


Рейтинг

По числу постов

Чулан 35 971
Я пиарюсь 5 461
Веб-разработка 4 011
Информационная безопасность 3 385
Google 2 770
Сталь 2 733
Гаджеты. Устройства для гиков 2 375
Программирование 2 293
Linux 2 235
Android 1 965
JavaScript 1 687
Apple 1 612
Програпрогр 1 568
.NET 1 485
PHP 1 465
Системное администрирование 1 454
DIY либо Сделай Сам 1 442
Разработка 1 331
Управление планами 1 261
Интерфейсы 1 257
Microsoft 1 237
Game Development 1 218
Open source 1 110
Телефоны и коммуникаторы 1 091
JAVA 1 020
Дизайн в IT 996
Алгорифмы 991
Копирайт 982
Общественные сети и сообщества 949
GTD 939
Windows 919
Учебный процесс в IT 916
Python 866
Робототехника 798
Разработка под Android 783
Разработка под iOS 777
Хостинг 749
711
Право и IT-бизнес new 677
Медиа 664
Mobile Development 664
Научно-знаменитое 661
CSS 658
Веб-дизайн 653
Firefox 629
Облачные вычисления 608
Убунтариум 597
Софт 585
ИТ-Инфраструктура 561
Opera 561
Космонавтика 538
Сетевые спецтехнологии 518
Ненормальное программирование 510
Peer-to-Peer 495
*nix 474
Тестирование 472
Карьера в IT-индустрии 471
Google Chrome 468
Браузеры 468
Операционные системы 466
Обработка изображений 458
Яндекс 445
iPhone 440
Высокая продуктивность 438
История ИТ 434
Ruby 433
Неестественный разум 423
jQuery 414
Поисковые машины и спецтехнологии 410
Планшеты 392
Электроника для начинающих 387
Windows Phone 375
Виртуализация 371
Анимация и 3D графика 366
HTML 365
Математика 361
Платежные системы 354
C# 349
Работа с видео 349
Энергия и элементы питания 346
IP-телефония 345
Twitter 344
Блогосфера 338
CMS 333
Программинг микроконтроллеров 332
Ветхое сталь 320
Криптография 309
Node.JS 308
Финансы в IT-индустрии 305
Беспроводные спецтехнологии 304
Qt Software 303
IM 300
Домены 290
Фриланс 290
Facebook 284
Работа со звуком 277
Игровые приставки 276
Django 271
Изыскания и прогнозы в IT 270
MySQL 264
Ruby on Rails 252
Краудсорсинг 252
Mac OS X 249
Adobe 248
Типографика 244
Электронное правительство 243
Skype 242
IT-эталоны 242
Мобильный веб 241
Flash-платформа 240
Вирусы (и антивирусы) 239
Статистика в IT 239
Краудфандинг 235
Бизнес студии 233
Телефония 231
Серверное администрирование 231
Visual Studio 229
Спортивное программирование 229
Фототехника 226
YouTube 223
Arduino 222
SQL 218
Drupal 216
Cisco 213
Perl 206
Data Mining 203
Usability 201
Электронные книги 198
Проектирование и рефакторинг 196
Сетевое оборудование 188
Git 184
WordPress 184
Wikipedia 180
Ноутбуки 178
Спам (и антиспам) 170
Киберпанк 167
Офисы IT-компаний 163
Разработка под Windows Phone 161
Байнет 161
Обзор и проектирование систем 158
Биотехнологии 157
NoSQL 153
Amazon Web Services 151
Патенты 150
ASP 150
Symfony 149
Увлекательные задачки 149
Клиентская оптимизация 148
Oracle 146
Нетбуки 146
Идеальный код 145
Delphi 143
Геоинформационные сервисы 143
Silverlight 139
Unity3D 138
3D-принтеры 138
Windows Azure 138
PostgreSQL 137
Zend Framework 136
Coworking: работа 2.0 133
Веб-аналитика 132
Серверная оптимизация 131
Agile 131
Nginx 128
Системное программирование 126
API 125
Yii 122
ERP-системы 120
Haskell 118
Asterisk 118
3G 116
Системы управления версиями 116
Инфографика 114
Процессоры 112
MODX 111
Internet Explorer 110
Big Data 108
Програпрогр — Анонсы 106
Assembler 106
Mozilla 106
C 104
Дополненная действительность 103
GPS 100
VIM 100
ECM/СЭД 97
Накопители 96
Google App Engine 96
Objective C 94
Администрирование баз данных 93
Презентации 93
Поправление данных 91
Ajax 91
Gmail 90
Microsoft SQL Server 89
Иконосказ 89
Erlang/OTP 87
SharePoint 87
Yahoo 87
LTE 86
PowerShell 86
OpenStreetMap 85
Mail.Ru 84
Векторная графика 83
IT-Автобиографии 82
Bitcoin 81
Canvas 81
LiveJournal 80
Функциональное программирование 79
Библиотека ExtJS/Sencha 79
BlackBerry 79
ВКонтакте 78
ООП 77
Биоинформатика 75
Компиляторы 74
TDD 73
Оценка и экспертиза IT-планов 70
Creative Commons 70
Параллельное программирование 67
IPv6 new 67
Графические оболочки 67
WiMAX 66
Семантическая Сеть 63
AngularJS 63
Видео-техника 62
IPTV 62
Scala 59
SaaS / S S 59
iPad 59
Радиосвязь 59
CodeIgniter 57
SmartTV 54
Микроформаты 54
Maps API 54
Kohana 53
ГЛОНАСС 52
Открытые данные 52
Нанотехнологии 51
Go 50
CAD/CAM 50
GreaseMonkey 50
Рамблер 48
КодоБред 48
Lisp 47
Демосцена 47
Регулярные выражения 47
Google API 46
Mono и Moonlight 46
INFOLUST 45
Eclipse 44
Периферия 43
Emacs 43
Моддинг 42
Wiki-спецтехнология 42
Настольные компьютеры 41
Яндекс API 41
Мониторы и ТВ 39
Отладка 39
MongoDB 39
Вконтакте API 39
LiveStreet 39
Sony PlayStation 38
LaTeX 38
Програпрогр API 38
Fidonet 36
Sphinx 36
GPGPU 35
Accessibility 35
Groovy & Grails 35
XSLT 35
Разработка под Java ME 34
Apache 34
DNS 34
SQLite 34
Tizen 33
Safari 32
1С-Битрикс 31
Amazon Kindle 31
CRM-системы 31
Разумный дом 30
Microsoft Kinect 29
R 28
Bing 27
Бегун 27
Медиаплееры 27
CakePHP 26
Google Web Toolkit 25
Google Analytics 24
XML 24
Action Script 23
UML Design 23
Оболочки 23
Lua 22
Суп 22
MooTools 22
Brainfuck 21
Google Plus 18
Doctrine ORM 18
Mercurial 18
Видеокарты 17
Facebook API 17
Meteor.JS new 16
Prolog 16
Системы охлаждения 16
PDF 15
Визуализация данных 15
Sun Microsystems 15
Derby.js 14
D 14
ASCII 14
WebGL new 13
Flex 13
I2P 13
Разработка под e-commerce new 12
Twitter API 12
Корпуса и блоки питания 11
Dart 10
Help Desk Software 10
Joomla 10
GTK 10
Cocoa 10
Mesh-сети 10
Програкамп 10
GitHub new 9
Google AdSense 9
Firebird/Interbase 9
IIS 7
Разработка под Bada 7
LabVIEW 6
Системные платы 6
Физика new 5
Linkedin 5
Twisted 5
Cobol 5
Laravel new 5
Резервное копирование new 4
Raspberry Pi new 4
Fortran 4
Small Basic 4
Tumblr 3
Cubrid 3
Индустриальное программирование new 3
Julia new 2
Microsoft Access 2
Growth Hacking new 2
Google Checkout 0
MySpace 0
Xcode new 0
SCADA new 0

По числу подписчиков

Чулан 124 521
Я пиарюсь 101 864
Веб-разработка 96 117
Android 95 361
Гаджеты. Устройства для гиков 95 020
Телефоны и коммуникаторы 94 376
Google 93 844
DIY либо Сделай Сам 92 322
Сталь 91 959
Информационная безопасность 91 729
Linux 91 103
Робототехника 89 721
Программирование 89 668
Планшеты 88 757
Google Chrome 88 197
Операционные системы 88 098
Интерфейсы 88 064
Windows 87 695
iPhone 87 609
Алгорифмы 87 372
Веб-дизайн 87 341
Электронные книги 86 582
Дизайн в IT 86 266
Идеальный код 85 525
Браузеры 85 443
iPad 85 290
Энергия и элементы питания 84 866
Научно-знаменитое 84 668
PHP 84 621
Убунтариум 84 613
Разработка 84 474
Ветхое сталь 84 067
Нетбуки 84 060
Firefox 83 996
Учебный процесс в IT 83 645
Фототехника 83 556
Процессоры 83 217
Неестественный разум 83 092
IT-эталоны 83 080
Игровые приставки 83 045
Arduino 82 540
Разработка под Android 82 528
*nix 82 017
Накопители 81 897
Фриланс 81 789
Apple 81 742
Софт 81 611
Моддинг 81 565
Програпрогр 81 317
Электроника для начинающих 81 169
Ненормальное программирование 80 989
Open source 80 508
80 117
Вирусы (и антивирусы) 80 108
JAVA 79 951
Видеокарты 79 915
Game Development 79 794
Opera 79 598
Криптография 79 590
Увлекательные задачки 79 439
Gmail 79 417
Mac OS X 79 339
GPGPU 79 247
Проектирование и рефакторинг 79 077
Регулярные выражения 79 040
Анимация и 3D графика 78 907
Python 78 841
Sony PlayStation 78 625
Яндекс 78 611
Изыскания и прогнозы в IT 78 592
Высокая эффективность 78 465
Системы управления версиями 78 334
Тестирование 78 299
Git 78 119
История ИТ 78 111
Обработка изображений 77 961
Разработка под iOS 77 904
Инфографика 77 783
Типографика 77 650
Графические оболочки 77 569
Системное программирование 77 562
Microsoft 77 198
Киберпанк 77 140
BlackBerry 77 134
Клиентская оптимизация 77 040
Системное администрирование 76 920
Общественные сети и сообщества 76 601
Платежные системы 76 561
Windows Phone 76 525
YouTube 76 521
IT-Автобиографии 76 518
Оболочки 76 396
Дополненная действительность 76 207
ВКонтакте 75 955
Internet Explorer 75 791
Wikipedia 75 587
JavaScript 75 456
Nginx 75 417
Спам (и антиспам) 75 400
Статистика в IT 75 303
Биотехнологии 75 231
Safari 75 123
.NET 75 096
Иконосказ 75 077
Mobile Development 75 055
Спортивное программирование 75 035
Програпрогр — Анонсы 74 977
Twitter 74 815
Ноутбуки 74 768
Сетевые спецтехнологии 74 684
КодоБред 74 666
Программинг микроконтроллеров 74 583
Право и IT-бизнес new 74 524
Visual Studio 74 452
Векторная графика 74 381
Управление планами 74 343
CSS 74 317
Компиляторы 74 182
Поисковые машины и спецтехнологии 74 091
Презентации 73 934
Mozilla 73 906
Копирайт 73 871
Электронное правительство 73 530
Беспроводные спецтехнологии 73 379
ООП 73 220
Facebook 73 134
Блогосфера 72 957
Медиа 72 803
HTML 72 780
Работа со звуком 72 695
MySQL 72 618
Работа с видео 72 576
Краудсорсинг 72 470
Ruby 72 361
Семантическая Сеть 72 348
VIM 72 054
Настольные компьютеры 71 904
Сетевое оборудование 71 874
Поправление данных 71 842
Adobe 71 670
Серверная оптимизация 71 484
TDD 71 413
Google Web Toolkit 71 146
Хостинг 71 140
Skype 71 115
jQuery 71 051
Облачные вычисления 70 967
Assembler 70 903
LiveJournal 70 694
Виртуализация 70 557
Периферия 70 344
Мониторы и ТВ 70 339
Демосцена 70 252
Flash-платформа 70 239
Системные платы 69 800
Ajax 69 690
ASCII 69 615
GTD 69 606
Системы охлаждения 69 554
Серверное администрирование 69 490
Разработка под Java ME 69 484
PowerShell 69 471
Корпуса и блоки питания 69 317
OpenStreetMap 69 275
SQL 69 224
Perl 69 202
Mail.Ru 69 150
Sphinx 69 123
Amazon Kindle 69 117
Медиаплееры 69 107
Google App Engine 68 995
ИТ-Инфраструктура 68 951
Silverlight 68 910
Usability 68 852
ASP 68 839
Peer-to-Peer 68 785
Delphi 68 696
Mono и Moonlight 68 672
Видео-техника 68 670
SaaS / S S 68 650
Erlang/OTP 68 527
Microsoft Kinect 68 330
Мобильный веб 68 062
Haskell 68 002
SharePoint 67 931
Scala 67 663
Lisp 67 630
Финансы в IT-индустрии 67 607
Bing 67 511
Офисы IT-компаний 67 490
Домены 67 431
3G 67 295
Sun Microsystems 67 134
C# 67 072
GPS 66 951
Creative Commons 66 917
Cisco 66 765
Yahoo 66 549
Суп 66 473
Рамблер 66 449
IP-телефония 66 391
WordPress 66 321
Веб-аналитика 66 186
Small Basic 65 777
Нанотехнологии 65 698
Brainfuck 65 698
Бегун 65 574
C 65 499
Карьера в IT-индустрии 65 484
Биоинформатика 65 346
IM 65 195
Телефония 65 161
ГЛОНАСС 65 035
LTE 65 031
Отладка 64 965
IPTV 64 903
Apache 64 747
WiMAX 64 516
NoSQL 64 462
XML 64 452
LabVIEW 64 032
PostgreSQL 63 808
CMS 63 798
Обзор и проектирование систем 63 789
Data Mining 63 429
Разработка под Windows Phone 63 231
Оценка и экспертиза IT-планов 63 150
Бизнес студии 62 653
Патенты 62 628
Радиосвязь 62 543
Objective C 62 397
PDF 62 225
MongoDB 62 180
Байнет 62 092
Oracle 61 971
Agile 61 815
Fidonet 61 667
IIS 61 384
Qt Software 61 314
UML Design 61 176
Help Desk Software 61 107
Canvas 61 036
Coworking: работа 2.0 60 800
INFOLUST 60 691
CAD/CAM 60 679
Google Plus 60 381
Microsoft SQL Server 60 229
ERP-системы 60 131
Django 60 119
Mercurial 60 064
Google Analytics 60 018
Ruby on Rails 59 921
Eclipse 59 786
Микроформаты 59 732
Prolog 59 727
Lua 59 707
Drupal 59 627
Библиотека ExtJS/Sencha 59 563
Yii 59 549
Cocoa 59 009
Dart 58 889
XSLT 58 845
Zend Framework 58 803
Google AdSense 58 774
Linkedin 58 626
Doctrine ORM 58 411
Amazon Web Services 58 396
Maps API 58 232
Fortran 58 166
Администрирование баз данных 57 994
Google Checkout 57 982
Symfony 57 801
Cobol 57 789
LaTeX 57 694
Wiki-спецтехнология 57 553
Tumblr 57 225
CodeIgniter 57 202
MODX 57 195
DNS 56 880
Kohana 56 821
LiveStreet 56 805
GreaseMonkey 56 778
Google API 56 694
MooTools 56 586
Cubrid 56 218
CakePHP 56 188
Вконтакте API 56 150
Twisted 56 091
MySpace 56 044
Groovy & Grails 55 970
SmartTV 55 638
API 55 556
Яндекс API 54 962
Asterisk 54 796
Програпрогр API 53 953
Facebook API 53 943
Twitter API 53 533
Go 53 219
Joomla 52 427
Разработка под Bada 52 204
GTK 51 409
Microsoft Access 51 313
Математика 50 725
1С-Битрикс 50 525
Краудфандинг 50 194
Космонавтика 50 055
Action Script 49 763
Flex 48 733
CRM-системы 48 715
Параллельное программирование 48 335
Геоинформационные сервисы 46 788
Функциональное программирование 45 774
Unity3D 44 350
Програкамп 43 488
Big Data 40 561
Accessibility 40 427
Emacs 39 824
Windows Azure 37 406
3D-принтеры 36 576
R 35 515
Открытые данные 29 026
AngularJS 21 091
Визуализация данных 20 632
Tizen 19 933
I2P 13 001
Mesh-сети 12 610
D 12 585
ECM/СЭД 11 886
Derby.js 11 461
SQLite 11 175
Разумный дом 11 122
Bitcoin 10 871
Firebird/Interbase 9 755
Node.JS 8 628
IPv6 new 6 186
Meteor.JS new 5 919
GitHub new 3 742
WebGL new 3 533
Резервное копирование new 3 503
Xcode new 2 823
Физика new 2 372
Raspberry Pi new 2 274
Индустриальное программирование new 2 141
Разработка под e-commerce new 2 034
SCADA new 1 856
Laravel new 1 799
Growth Hacking new 1 063
Julia new 948

Когда я отсортировал хабы, обнаружились увлекательные вещи. Скажем я не знал, что существуют хабы с нулевым числом постов. А их оказалось целых 4 штуки! Причём на всякий из них подписано больше 500 человекВероятно это дюже перспективные направления — не имея постов на них теснее набежало столько народу. У хаба MySpace нет ни одного поста/события, но больше 55К подписчиков — это о чём-то говорит!

Тройка хабов — ЧуланЯ пиарюсь и Веб-разработка — главенствуют как по числу постов, так и по числу читателей. И в этом нет ничего чудесного — первые два хаба крайне всеобщие и свободные, а уж веб-разработка увлекательна многим. Дальше идёт Информационная безопасность, которая пользуется на прогре яростной популярностью. За ней — Google, которую дозволено считать компанией №1 в области IT — по ней огромнее каждого постов, по сопоставлению с другими. Отчасти вследствие её ОС Android, которой вывалилось 4 место по числу подписчиков.

К сожалению, я так и не осознал, отчего хаб Програпрогр — оффтопик. По числу постов он будет на 13 месте, да и подписчиков у него >80К. Получается, что писать на сайте об этом же сайте — отход от темы?

Огорчило, что хаб Java находится не так высоко, как хотелось бы.

Разработка

Дюже длинно я пытался разобраться в Програпрогр Api. Как выяснилось, он закрыт и пока что в процессе разработки. Впрочем в переписке с support@habrahabr.ru мне сказали, что они не имеют ничего вопреки парсинга их страниц. Собственно, именно так и работают програклиенты для Android (на данный момент).

Когда речь идёт о планах «для себя», я выбираю любимую Джаву. Она и на данный раз меня не подвела — библиотека JSoup дозволила в несколько строчек получить нужные данные с HTML страницы. Но давайте сперва обсудим, как устроены хабы.

Страницы с хабами расположены по адресам habrahabr.ru/hubs/pageN/, где N — номер от 1 и дальше. Посему, если мы хотим получить полный список из всех хабов — нам необходимо загружать и исследовать эти страницы, пока они не закончатся. На всякой странице присутствует список из хабов. Формат элемента списка достаточно примитивный и легко анализируется. Выглядит он так:

<div id="hub_50">
	<div>1 280,58</div>
	<div>
		<div>
			<a href="http://habrahabr.ru/hub/infosecurity/">Информационная безопасность</a>
			<span title="Профильный хаб"></span>

		</div>
			<div>
				<input type="button" value="Подписаться" data-id="50">
				<input type="button" value="Подписан" data-id="50" "="">
			</div>
		<div></div>
		<div><a href="http://habrahabr.ru/hub/infosecurity/subscribers/">91741 подписчик</a>, <a href="http://habrahabr.ru/hub/infosecurity/posts/">3385 постов</a><a></a></div><a>
	</a></div><a>
</a></div>

Давайте напишем способ, тот, что возвращает нам список из всех хабов на сайте:

static List<Hub> getAllHubs() {
        ArrayList<Hub> fullHubsList = new ArrayList<>();
        String urlHubsIncomplete = "http://habrahabr.ru/hubs/page";
        int pageNum = 1;

        do {
            String urlHubs = urlHubsIncomplete   pageNum;

            try {
                Document doc = Jsoup.connect(urlHubs).get();
                Elements hubs = doc.select(".hub");
                if (hubs.size() == 0) {
                    break;
                }
                for (Element hubElem : hubs) {
                    Hub hub = new Hub(hubElem);
                    fullHubsList.add(hub);
                }

                pageNum  ;
            } catch (Exception e) {
                e.printStackTrace();
                break;
            }

        } while (true);

        return fullHubsList;
    }

Мы вертим безграничный цикл while, формируя с всякой итерацией новейший URL. После этого, с поддержкойJsoup.connect(urlHubs).get() получаем непринужденно HTML-документ со списком хабов и их параметрами. Как нетрудно подметить — div с информацией о хабе имеет класс hub — и, вызвав doc.select(“.hub”), мы получаем список из этих элементов. Если его размер равен нулю — значит мы прошли последнюю страницу и теснее проанализировали все хабы — тогда мы выходим из цикла.

Дальше — проходим по каждому хабам-элементам и для всякого создаём объект типа Hub, передав в конструктор наш org.jsoup.nodes.Element. В нём располагается HTML-код такого же формата, как указан выше. Сейчас давайте абстрагируемся от каждого. Для этого и существует ООП. Перед нами есть только тот ломтик HTML, представленный выше, и класс, в тот, что его необходимо запихнуть. Напишем каркас для нашего класса:

import org.jsoup.nodes.Element;

public class Hub {
    String title;
    int posts;
    boolean profiled;
    int membersCount;
    float habraindex;
    String url;

    public Hub(Element hubElem) {

    }
}

Напишем конструктор. Для начала сделаем самое примитивное — получим данные из заголовочного тега. Для этого мы вначале извлекаем сам div вида

<div>
    <a href="http://habrahabr.ru/hub/infosecurity/">Информационная безопасность</a>
    <span title="Профильный хаб"></span>
</div>

Парсим через

Element titleDiv = hubElem.select(".title").get(0);
Element tagA = titleDiv.getElementsByTag("a").get(0);
title = tagA.text();
url = tagA.attr("href");
profiled = (hubElem.select(".profiled_hub").size() != 0);

Дальше, мы хотим пропарсить число подписчиков и постов — собственно те параметры, по которым мы и будем сортировать. Но сразу же сталкиваемся с первой задачей — тег содержит строку «91741 подписчик», которую мы не можем легко так взять и преобразовать в Integer — она содержит буквы! Здесь нам на поддержка приходят регулярные выражения. Быстренько пишем искусный способ, тот, что получает строку и вырезает из неё всё, помимо цифр, да ещё и преобразует итог в int. \D — это НЕ цифра, а — «встречается 1 либо больше раз». Т.е. мы в данном случае заменяем буквы на пустоту.

private int getNumbers(String str) {             
    String numbers = str.replaceAll("\\D ", ""); 
    return Integer.valueOf(numbers);             
}

Вот сейчас мы теснее можем со мирной душой получить наши значения:

String membersCountFullStr = hubElem.select(".members_count").get(0).text();
membersCount = getNumbers(membersCountFullStr);

String statFullStr = hubElem.select(".stat").get(0).getAllElements().get(2).text();
posts = getNumbers(statFullStr);

В тезисе, на этом дозволено было остановится, но я решил ради интереса извлечь всю допустимую информацию о хабе. Здесь появилась крайне увлекательная вторая задача, которая будет изюминкой статьи. Как пропарсить програиндекс?

Для начала, следует заменить запятую на точку и убрать лишние пробелы. Но этого не довольно! Парсер всё равно выдаёт ошибку, если скопировать и вставить програиндекс в код — Double.valueOf(“–1.11″). А если ввести вручную то же самое число — всё окей. Причём визуально в моей IDEA они безусловно одинаково выглядят!

Оказывается, дизайнеры прогры легко применяли dash взамен minus — c другим кодом символа, и парсер его, внятное дело, не ест. Возьмите на заметку. Суть задачи в дальнейшем:

System.out.println((int)'-');//45
System.out.println((int)'–');//8211

Когда-то в своей статье Хитроумные задачи по Java я разглядел подвох, когда L маленькую дозволено не отличить от 1. Собственно, теперь я напоролся на аналогичную задачу.

Посему, код для извлечения програиндекса будет чуть труднее:

String rawHabraIndex = hubElem.select(".habraindex").get(0).text();//1 265,92
char minus = 45;//'-'
char dash = 8211;//'–'
String niceHabraIndex = rawHabraIndex.replaceAll(" ", "").replace(",", ".").replace(dash,minus);//1266.72
habraindex = Float.valueOf(niceHabraIndex);

Дальше, пишем компаратор по постам как вложенный статический класс для Hub

public static class ComparePosts implements Comparator<Hub> { 
    @Override                                                 
    public int compare(Hub o1, Hub o2) {                      
        return o2.posts - o1.posts;                           
    }                                                         
}                                      

И сортируем по нему где-нибудь в main

List<Hub> hubs = getAllHubs();                 
Collections.sort(hubs, new Hub.ComparePosts());

Всё, задача исполнена! С числом подписчиков подобно. Дальше я написал код, тот, что выводит в консоль два списка в таком виде, Дабы их сразу дозволено было вставить в статью — и сделал это сначала.

На приобретение всех хабов уходит приблизительно 10 секунд. Начальный код дозволено скачать тут. Собираем и запускаем вот так, не позабыв установить Jsoup и заменить путь на ваш:

javac -cp .;"C:\prog\lib\jsoup-1.7.3.jar" com/kciray/habrahubs/Main.java
java -cp .;"C:\prog\lib\jsoup-1.7.3.jar" com.kciray.habrahubs.Main

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB