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)...