getTrendingDevelopers function

Future<List<TrendingDeveloper>> getTrendingDevelopers({
  1. String since,
  2. String language,
})

A method to get trending repositories

Implementation

Future<List<TrendingDeveloper>> getTrendingDevelopers({
  String since,
  String language,
}) async {
  var url = '${URL}/trending/developers';
  if (language != null) {
    url += '/$language';
  }
  if (since != null) {
    url += '?since=$since';
  }

  var res = await http.get(url);
  var document = parse(res.body);
  var items = document.querySelectorAll('.Box-row');

  return items.map((item) {
    PopularRepository popularRepository;
    var popularNode =
        item.querySelector('.d-sm-flex>div>div')?.nextElementSibling;

    if (popularNode != null) {
      var description = popularNode.querySelector('.mt-1')?.innerHtml?.trim();
      popularRepository = PopularRepository(
        url: popularNode
            .querySelector('div>article>h1>a')
            ?.attributes['href']
            ?.trim(),
        name: popularNode.querySelector('div>article>h1>a')?.text?.trim(),
        description: description
                ?.replaceAll(RegExp(r'<g-emoji.*?>'), '')
                ?.replaceAll(RegExp(r'</g-emoji>'), '')
                ?.replaceAll(RegExp(r'<a.*?>'), '')
                ?.replaceAll(RegExp(r'</a>'), '') ??
            '',
        descriptionRawHtml: '<div>${description ?? ''}</div>',
      );
    }

    return TrendingDeveloper(
      avatar: item.querySelector('.rounded-1')?.attributes['src']?.trim(),
      username: item.querySelector('.link-gray')?.innerHtml?.trim(),
      nickname: item.querySelector('.d-md-flex')?.querySelector('.lh-condensed')?.text?.trim(),
      popularRepository: popularRepository,
    );
  }).toList();
}