- PVSM.RU - https://www.pvsm.ru -

Как следить за трендами на GitHub

Logo

В разделе trending [1] на GitHub отображается список проектов, активно набирающих звезды в течение дня, недели или месяца. Все самое интересное, что появляется в open source для каждого языка программирования, всегда оказывается в этом списке. Сегодня хочу поделиться способом, как с помощью GitHub уведомлений подписаться на появление новых «звездных» проектов и не пропустить что-нибудь полезное для себя.

Как это выглядит

Для подписки используется специальный репозиторий github-trending-repos [2]. Каждый issue в этом репозитории соответствует одному языку программирования:

Как следить за трендами на GitHub - 2

Вы заходите в интересующие вас issues и подписываетесь на обсуждение, используя механизм GitHub уведомлений [3]. Как только в выбранном языке программирования появится новый популярный репозиторий, специальный бот запостит комментарий. В этот момент вы получите уведомление в веб-интерфейсе GitHub или по почте (в зависимости от ваших настроек). В веб-интерфейсе это выглядит так:

Как следить за трендами на GitHub - 3

Клик по уведомлению открывает добавленный комментарий, где содержится ссылка на проект, короткое описание и количество полученных звезд:

Как следить за трендами на GitHub - 4

Как это работает

Один раз в час на сервере запускается скрипт, который через GitHub API [4] обходит все issues. Для каждого языка программирования подгружается список популярных на данный момент репозиториев. Затем из этого списка исключаются репозитории, которые уже упомянуты в комментариях к issue. В результате остаются только свеже-добавленные проекты. Из них формируется текст и добавляется новый комментарий. Подписчики автоматически получают уведомление.

Особенности реализации

  • Для запуска скрипта по расписанию пришлось отказаться от Travis CI [5] в пользу CircleCI [6]. Причина: Travis CI умеет запускаться максимум раз в день [7], а CircleCI позволяет гибко конфигурировать [8] запуски через cron синтакс и стартовать даже каждую минуту.
  • GitHub не предоставляет API для получения «trending» репозиториев. Поэтому список формируется прямо из HTML-кода страницы по селекторам. Для решения этой задачи под Node.js я использовал Cheerio [9]. Достаточно скормить ему урл и через функцию $() выбрать нужные элементы страницы.
  • При работе с GitHub API нужно помнить о пагинации — по умолчанию в ответе возвращается максимум 30 элементов [10]. Данные о количестве страниц и ссылки для навигации по ним передаются в HTTP заголовке Link. Чтобы не парсить его вручную, я использовал готовую JavaScript библиотеку parse-link-header [11].

Заключение

Для меня такой способ слежения за трендами оказался довольно удобным. GitHub уведомления привычны и ненавязчивы. А я остаюсь в курсе всех новинок. Попробуйте и вы — буду рад, если вам это пригодится. Ссылка на проект [2]. Идеи и предложения welcome!

Автор: vitalets

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/268230

Ссылки в тексте:

[1] trending: https://github.com/trending

[2] github-trending-repos: https://github.com/vitalets/github-trending-repos

[3] механизм GitHub уведомлений: https://help.github.com/articles/subscribing-to-and-unsubscribing-from-notifications/#subscribing-to-conversations

[4] GitHub API: https://developer.github.com/v3/

[5] Travis CI: https://travis-ci.org

[6] CircleCI: https://circleci.com

[7] максимум раз в день: https://docs.travis-ci.com/user/cron-jobs/

[8] конфигурировать: https://circleci.com/docs/2.0/configuration-reference/#schedule

[9] Cheerio: https://cheerio.js.org

[10] максимум 30 элементов: https://developer.github.com/v3/?#pagination

[11] parse-link-header: https://github.com/thlorenz/parse-link-header

[12] Источник: https://habrahabr.ru/post/342174/