如何从堆栈溢出中获取新问题的通知?

2024-02-29

我想回答新的 javascript、react、react-native 和 Node 问题。那么,我如何知道用户在这些领域提出的新问题呢?


打开 Websocket 连接wss://qa.sockets.stackexchange.com/,然后发送消息1-questions-newest-tag-TAG where TAG是您要关注的标签。发布新问题时,您将收到一条包含问题 ID 的消息。

问题数据需要单独检索(截至 SE 2021/2022 年冬季重新设计)。一种方法 - 正如 SE 所做的那样- 是发布到/posts/ajax-load-realtime-list/带有问题 ID,它将回复问题摘要。 (不幸的是,由于跨源限制,这种方法无法嵌入到实时堆栈片段中)

在 Stack Overflow 上打开一个空白页面,例如this one https://stackoverflow.com/questions/9999999999999999999,然后将以下内容粘贴到您的控制台中,您将看到新问题在发布时出现在页面上:

const socket = new WebSocket('wss://qa.sockets.stackexchange.com/');
socket.onopen = () => {
  socket.send('1-questions-newest-tag-javascript');
  socket.send('1-questions-newest-tag-java');
  socket.send('1-questions-newest-tag-python');
  socket.send('1-questions-newest-tag-php');
  console.log('Listening...');
};
const seenQuestions = new Set();
socket.onmessage = ({ data }) => {
  const obj = JSON.parse(data);
  if (obj.action === 'hb') {
    socket.send('pong');
    return;
  }
  const { id, body } = JSON.parse(obj.data);
  if (seenQuestions.has(id)) {
    // Duplicate question, a message for it has already been handled:
    return;
  }
  seenQuestions.add(id);
  console.log('New question:', id);
  insertQuestion(id)
};
socket.onerror = console.error; // just in case

const insertQuestion = (questionId) => {
  const params = new URLSearchParams();
  params.append('postIdsSemiColonDelimited', questionId);
  fetch('https://stackoverflow.com/posts/ajax-load-realtime-list/', {
    method: 'post',
    body: params
  })
    .then(r => r.json())
    .then((result) => {
      document.body.insertAdjacentHTML('beforeend', result[questionId]);
    })
    .catch(console.error); // just in case
};

如果您想在 Stack Exchange 站点以外的其他地方使用它,您可能还希望嵌入他们的CSS https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=d385c34dc2d7

You do需要听一个hb消息并回复它,以便 StackExchange 知道保持连接处于活动状态。

请注意,套接字将针对给定问题发送数据every正在监听的标签。例如,如果某些内容同时使用 Javascript 和 React 进行标记,并且您已发送请求来侦听这两个标记,您将收到一条消息twice,因此 Set 需要避免列出重复项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从堆栈溢出中获取新问题的通知? 的相关文章

随机推荐