Как получить информацию с разных объектов за 1 звонок? - PullRequest
0 голосов
/ 06 апреля 2020

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

  1. имя_ тега

  2. описание тега

  3. counter_of_posts.

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

1 Ответ

1 голос
/ 06 апреля 2020

Это невозможно - вам нужно как минимум 2 звонка (больше, если у вас более 20 тегов). Один вызов /api.stackexchange.com/2.2/tags/tag_names/info?order=desc&sort=popular&site=sitename для получения имени тега (который указан) и счетчика, а другой - api.stackexchange.com/2.2/tags/tag_names/wikis?site=stackoverflow. Конечно, вы можете применять любые фильтры и изменять имена сайтов и тегов. Вот образец JavaScript:

const key = ''; // &key=xxxx - 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

// First API call: get tag name and counter
$.get(`//api.stackexchange.com/2.2/tags/${tags}/info?order=desc&sort=popular&site=${sitename}&filter=!-.G.68pp778y${key}`,
  function(data_counter) {

    // Second API Call: get tag's excerpt
    $.get(`//api.stackexchange.com/2.2/tags/${tags}/wikis?site=${sitename}&filter=!*Ly1)NvM)n91RtK*${key}`,

      function(data_excerpt) {
        for (let i = 0; i < data_counter.items.length; i++) {
          $('table').append(`
            <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>
          `);
        }
        $('#quota').html(`API Quota remaining: ${data_excerpt.quota_remaining}`);
      }
    )
  }
)
table, p {
  font-family: sans-serif;
  border-collapse: collapse;
}

td, th {
  border: 1px solid #2d2d2d;
  padding: 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <th>Tag Name</th>
      <th>Excerpt</th>
      <th>Number of posts</th>
    </tr>
  </tbody>
</table>
<p id="quota"></p>
...