getTrendingDevelopers function
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();
}