Images des zones protégées de WLE 2015
by Édouard Hue
HTML
<link rel="stylesheet" href="//cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css">
<script src="//cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script>
<table id="table" class="display">
<thead>
<tr>
<th>Zone</th>
<th>Catégorie Commons</th>
<th>Images</th>
</tr>
</thead>
<tbody id="tablebody">
</tbody>
</table>
JavaScript
console.clear();
// Query limitation on Commons API
var maxCommonsQueryItems = 50
var $tb = $("#tablebody");
var $table = $("#table").DataTable({
paging: false,
columnDefs: [{
target: 2,
type: "numeric"
}]
});
var catLink = function(title) {
return $("<a>").text(title).attr("href", "https://commons.wikimedia.org/wiki/Category:" + title).wrap("<div/>").parent().html();
}
var itemLink = function(entity) {
return $("<a>").text(entity.labels.fr.value).attr("href", "https://www.wikidata.org/wiki/" + entity.id).wrap("<div/>").parent().html();
}
var handleAreas = function (areas) {
var slices = [];
for (var i = 0; i < areas.items.length; i += maxCommonsQueryItems) {
slices.push(areas.items.map(function (id) {
return "Q" + id;
}).slice(i, i + maxCommonsQueryItems));
}
$.each(slices, fetchSliceEntities);
};
// Query Wikidata for entities details
var fetchSliceEntities = function (i, slice) {
$.getJSON("https://www.wikidata.org/w/api.php?action=wbgetentities&ids=" + slice.join("|") + "&sitefilter=frwiki&languages=fr&props=labels|sitelinks/urls|descriptions|claims&format=json&callback=?", handleSliceEntities);
}
// Handle Wikidata query results
var handleSliceEntities = function (entities) {
$.each(entities.entities, buildEntityFeature);
};
var buildEntityFeature = function (id, entity) {
var commonsCat = 'P373' in entity.claims ? entity.claims.P373[0].mainsnak.datavalue.value : null;
var $newRow = $table.row.add([itemLink(entity), catLink(commonsCat), -1 ]);
$newRow.draw();
$.ajax({
dataType: "jsonp",
url: "https://commons.wikimedia.org/w/api.php",
cache: true,
data: {
action: "query",
list: "categorymembers",
cmtitle: "Category:" + commonsCat,
cmtype: "file",
cmlimit: "max",
format: "json",
redirects: ""
},
success:...