Download ioBroker Repo
List of plugins as JSON
by Lissandro Dittmar
HTML
<div id="banner-message">
<p>Download ioBroker Adapter List</p>
<button>Do it!</button>
<p><span id="count">-</span> pages loaded</p>
<p><span id="found">-</span> possible adapters found</p>
<p><span id="foundR">-</span> adapters found</p>
</div>
<a id="downloadAnchorElem" style="display:none"></a>
CSS
i {
color: #669FAB;
}
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#banner-message {
background: #fff;
border-radius: 4px;
padding: 20px;
font-size: 25px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
}
button {
background: #0084ff;
border: none;
border-radius: 5px;
padding: 8px 14px;
font-size: 15px;
color: #fff;
}
#banner-message.alt {
background: #0084ff;
color: #fff;
margin-top: 40px;
width: 200px;
}
#banner-message.alt button {
background: #fff;
color: #000;
}
JavaScript
const ioBrokerAdapterList = {};
const orderedList = {};
let counter = 0;
async function getAdapterList() {
let from = 0;
for (let i = 1; i < 25; i++) {
const pluginsList = await (await fetch("https://api.npms.io/v2/search?q=iobroker&size=200&from=" + from)).json();
if (from === 0) {
$('#found').text(pluginsList.total);
}
from += 200;
$('#count').text(i);
if (pluginsList && pluginsList.results) {
if (pluginsList.total < i * 200) {
i = 30;
}
pluginsList.results.forEach(function(pluginInfo) {
const name = pluginInfo.package.name;
const repoLink = pluginInfo.package.links.repository;
if (repoLink && !name.startsWith('@')) {
const plugin = {};
plugin.name = repoLink.slice(repoLink.lastIndexOf("/") + 1, repoLink.length);
plugin.owner = repoLink.slice(nth_occurrence(repoLink, "/", 3) + 1, repoLink.lastIndexOf("/"));
plugin.date = pluginInfo.package.date;
plugin.version = pluginInfo.package.version;
ioBrokerAdapterList[name] = plugin;
}
});
}
}
await Object.keys(ioBrokerAdapterList).sort().forEach(async function(key) {
const adapterNpm = ioBrokerAdapterList[key];
let name = "";
if (adapterNpm.name.indexOf('roker.') != -1) {
name = adapterNpm.name.substring(adapterNpm.name.indexOf('roker.') + 6, adapterNpm.name.length);
} else {
name = adapterNpm.name;
}
let meta = "https://raw.githubusercontent.com/" + adapterNpm.owner + "/" + adapterNpm.name + "/master/io-package.json";
let ioPackage = null;
try {
ioPackage = await (await fetch(meta)).json();
} catch (e) {
meta = "https://raw.githubusercontent.com/" + adapterNpm.owner + "/" + adapterNpm.name + "/main/io-package.json";
try {
ioPackage = await (await fetch(meta)).json();
} catch (e) {
console.log(adapterNpm.owner + "/" + adapterNpm.name);
}
}
if (ioPackage)...