D'une manière ou d'une autre, Qiita Orgs Ranking s'est arrêté, alors j'ai pris les "likes" de l'organisation en java et les ai arrangés. (Contrairement au Qiita Orgs Ranking, ce n'est pas le nombre de contributions.)
La bibliothèque de jsoup est utilisée pour le scraping. La mise en œuvre est tout à fait appropriée, donc je pense que cela ne fonctionne que maintenant.
(Si vous en faites trop, Qiita peut se mettre en colère)
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import org.jsoup.helper.HttpConnection;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class QiitaOrgsRank {
static class Data {
private final String org;
private final URL url;
private final int iine;
public Data(URL url) {
this.url = url;
System.out.println("connect:" + url);
Document document;
try {
document = HttpConnection.connect(url).get();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
Elements stats = document.select(".organizationHeader_stats_value");
Elements name = document.select(".organizationHeader_profile_orgName");
org = name.get(0).text();
iine = Integer.parseInt(stats.get(1).text().trim());
}
public int getIine() {
return iine;
}
@Override
public String toString() {
return org + "\t" + iine + "\t" + url;
}
}
public static void main(String[] args) throws URISyntaxException {
Set<URL> urls = getOrgUrls();
int rank = 1;
for (Data data : (Iterable<Data>) () -> urls.stream()
.map(Data::new)
.sorted(Comparator.comparing(Data::getIine).reversed())
.iterator()) {
System.out.println(rank++ + "\t" + data.toString());
}
}
private static Set<URL> getOrgUrls() throws URISyntaxException {
Set<URL> urls = new HashSet<>();
int i = 1;
while (true) {
try {
Set<URL> orgs = getOrgUrls(i++);
if (orgs.isEmpty()) {
break;
}
urls.addAll(orgs);
} catch (IOException e) {
break;
}
}
return urls;
}
private static Set<URL> getOrgUrls(int i) throws IOException, URISyntaxException {
URL pageUrl = new URL("http://qiita.com/organizations?page=" + i);
System.out.println("connect:" + pageUrl);
Set<URL> urls = new HashSet<>();
Document document = HttpConnection.connect(pageUrl).get();
Elements elements = document.select(".organizationsList_orgName").select("a");
for (Element element : elements) {
URL url = pageUrl.toURI().resolve(element.attr("href")).toURL();
urls.add(url);
}
return urls;
}
}
Au 22 juillet 2017, nous sommes à la 15e place
1 TIS Co., Ltd. 49212 http://qiita.com/organizations/tis
2 Mercari 47221 http://qiita.com/organizations/mercari
3 Wantedly, Inc. 45934 http://qiita.com/organizations/wantedly
4 Increments Co., Ltd. 38725 http://qiita.com/organizations/increments
5 Sonic Garden Co., Ltd. 37053 http://qiita.com/organizations/sonicgarden
6 Recteur 32109 http://qiita.com/organizations/rector
7 Basic Co., Ltd. 25553 http://qiita.com/organizations/basicinc
8 Topgate Co., Ltd. 22962 http://qiita.com/organizations/topgate
9 ShouldBee 22815 http://qiita.com/organizations/shouldbee
10 Dwango Co., Ltd. 22029 http://qiita.com/organizations/dwango
11 Pixiv Co., Ltd. 21340 http://qiita.com/organizations/pixiv
12 Drivemode, Inc. 18300 http://qiita.com/organizations/drivemode
13 Atlae Co., Ltd. 16562 http://qiita.com/organizations/atrae
14 freee 16294 http://qiita.com/organizations/freee
15 Future Architect Co., Ltd. 16168 http://qiita.com/organizations/future
cette? Ce nombre n'est-il pas significativement réduit avec les incréments?