如何从堆栈溢出中获取新问题的通知?
How get notifications from stack overflow for new questions?
我想回答新的 javascript、react、react-native 和 node 问题。那么,我如何知道用户在这些领域提出的新问题?
打开与 wss://qa.sockets.stackexchange.com/
的 Websocket 连接,然后发送消息 1-questions-newest-tag-TAG
,其中 TAG
是您要监视的标签。当发布新问题时,您将收到一条包含问题 ID 的消息。
需要单独检索问题数据(截至 SE 2021/2022 冬季重新设计)。一种方法 - 正如 SE 在 /newest
pages 上所做的那样 - 是使用问题 ID POST 到 /posts/ajax-load-realtime-list/
,它将以问题摘要作为响应。 (不幸的是,由于跨源限制,这种方法不能嵌入到实时 Stack Snippet 中)
在 Stack Overflow 上打开一个空白页面,例如 this one,然后将以下内容粘贴到您的控制台中,您会在页面上看到发布的新问题:
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://whosebug.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 站点以外的其他任何地方使用它,您可能还希望 embed their CSS
您 需要侦听 hb
消息并回复它,以便 StackExchange 知道保持连接。
请注意,套接字将为 每个 正在侦听的标签发送给定问题的数据。例如,如果某些东西同时带有 Javascript 和 React 标签,并且您发送了监听这两个标签的请求,您将收到 两次 的消息,因此需要 Set 来避免重复列出。
我想回答新的 javascript、react、react-native 和 node 问题。那么,我如何知道用户在这些领域提出的新问题?
打开与 wss://qa.sockets.stackexchange.com/
的 Websocket 连接,然后发送消息 1-questions-newest-tag-TAG
,其中 TAG
是您要监视的标签。当发布新问题时,您将收到一条包含问题 ID 的消息。
需要单独检索问题数据(截至 SE 2021/2022 冬季重新设计)。一种方法 - 正如 SE 在 /newest
pages 上所做的那样 - 是使用问题 ID POST 到 /posts/ajax-load-realtime-list/
,它将以问题摘要作为响应。 (不幸的是,由于跨源限制,这种方法不能嵌入到实时 Stack Snippet 中)
在 Stack Overflow 上打开一个空白页面,例如 this one,然后将以下内容粘贴到您的控制台中,您会在页面上看到发布的新问题:
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://whosebug.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 站点以外的其他任何地方使用它,您可能还希望 embed their CSS
您 需要侦听 hb
消息并回复它,以便 StackExchange 知道保持连接。
请注意,套接字将为 每个 正在侦听的标签发送给定问题的数据。例如,如果某些东西同时带有 Javascript 和 React 标签,并且您发送了监听这两个标签的请求,您将收到 两次 的消息,因此需要 Set 来避免重复列出。