Как получить информацию с разных объектов за 1 звонок?

Мне нужен список тегов с 3 полями:

  1. название тэга

  2. tag_description

  3. counter_of_posts.

Поскольку counter_of_posts - это поле объекта-тега, а tag_description (отрывок) - это поле tag_wiki, как я могу получить необходимую информацию с помощью одного вызова?


person max stripakoff    schedule 06.04.2020    source источник


Ответы (1)


Это невозможно - нужно минимум 2 звонка (больше, если тегов больше 20). Один вызов /tags/{tags}/info?site={site}, чтобы получить имя тега (которое задано) и счетчик, и один вызов /tags/{tags}/wikis?site={site}. Конечно, вы можете применять любые фильтры, которые захотите, а также изменять название сайта и названия тегов. Вот пример JavaScript:

(async function() {
  const key = '3loXx7CAr2AvrMaHBj6GxQ(('; // not necessary, but it increases daily API quota from 300 to 10000
  const sitename = 'stackoverflow'; // default, change it to whatever you want
  const tags = 'php;javascript;java;jquery;perl;python'; // semicolon-separated, must be =<20
  const tagApiUrl = 'https://api.stackexchange.com/2.2/tags/';
  const tagInfoFilter = '!-.G.68pp778y';
  const tagWikisFilter = '!*Ly1)NvM)n91RtK*';

  // First API call: get tag's info
  const callTagInfo = await fetch(`${tagApiUrl}${tags}/info?site=${sitename}&filter=${tagInfoFilter}&key=${key}`);
  const data_counter = await callTagInfo.json();

  // Second API call: get tag's excerpt
  const callTagWikis = await fetch(`${tagApiUrl}${tags}/wikis?site=${sitename}&filter=${tagWikisFilter}&key=${key}`);
  const data_excerpt = await callTagWikis.json();

  for (let i = 0; i < data_counter.items.length; i++) {
    const table = document.querySelector('table');
    const html = `
      <tr>
        <td>${data_counter.items[i].name}</td>
        <td>${data_excerpt.items.find(name => name.tag_name === data_counter.items[i].name).excerpt}</td>
        <td>${data_counter.items[i].count}</td>
      </tr>`;
     table.insertAdjacentHTML('beforeend', html);
  }
  console.log('API Quota remaining:', data_excerpt.quota_remaining);
})();
<link rel="stylesheet" href="https://unpkg.com/@stackoverflow/stacks/dist/css/stacks.min.css">
<table class="s-table">
  <tbody>
    <tr>
      <th>Tag Name</th>
      <th>Excerpt</th>
      <th>Number of posts</th>
    </tr>
  </tbody>
</table>

person double-beep    schedule 06.04.2020