All sources
StackOverflow Hot
Developer v1.0.0Hot questions from StackOverflow
@codytseng #stackoverflow #programming #qa
Configuration
| Name | Key | Type | Required | Default | Description |
|---|---|---|---|---|---|
| Tag | TAG | list | No | — | Filter by tag (e.g. javascript, python, react). Leave empty for all tags. |
| Sort | SORT | select | No | hot | Sort order for questions hotactivityvotescreationweekmonth |
Source Code
version: 1.0.0
name: StackOverflow Hot
description: Hot questions from StackOverflow
author: codytseng
author_url: https://github.com/codytseng
category: Developer
tags:
- stackoverflow
- programming
- qa
config:
- key: TAG
name: Tag
type: list
required: false
description: Filter by tag (e.g. javascript, python, react). Leave empty for all tags.
- key: SORT
name: Sort
type: select
required: false
default: hot
description: Sort order for questions
options:
- hot
- activity
- votes
- creation
- week
- month version: 1.0.0
name: StackOverflow Hot
description: Hot questions from StackOverflow
author: codytseng
author_url: https://github.com/codytseng
category: Developer
tags:
- stackoverflow
- programming
- qa
config:
- key: TAG
name: Tag
type: list
required: false
description: Filter by tag (e.g. javascript, python, react). Leave empty for all tags.
- key: SORT
name: Sort
type: select
required: false
default: hot
description: Sort order for questions
options:
- hot
- activity
- votes
- creation
- week
- month module.exports = async (api) => {
const tags = api.config.get("TAG") ?? [];
const sort = api.config.get("SORT") || "hot";
async function fetchData() {
const toItems = (questions) =>
questions.map((q) => ({
id: q.question_id.toString(),
title: q.title,
subtitle: `${q.score} votes · ${q.answer_count} answers · ${q.tags.slice(0, 3).join(", ")}`,
url: q.link,
timestamp: q.creation_date,
}));
if (tags.length > 0) {
const pageSize = Math.min(100, Math.floor(500 / tags.length));
await Promise.allSettled(
tags.map(async (tag) => {
const res = await api.fetch(
`https://api.stackexchange.com/2.3/questions?order=desc&sort=${sort}&site=stackoverflow&pagesize=${pageSize}&tagged=${encodeURIComponent(tag)}`,
);
if (res.ok && res.json) {
api.emit(toItems(res.json.items));
}
}),
);
} else {
const res = await api.fetch(
`https://api.stackexchange.com/2.3/questions?order=desc&sort=${sort}&site=stackoverflow&pagesize=100`,
);
if (!res.ok || !res.json) {
throw new Error(`Failed to fetch Stack Overflow questions (HTTP ${res.status})`);
}
api.emit(toItems(res.json.items));
}
}
await fetchData();
return {
refresh: fetchData,
};
}; module.exports = async (api) => {
const tags = api.config.get("TAG") ?? [];
const sort = api.config.get("SORT") || "hot";
async function fetchData() {
const toItems = (questions) =>
questions.map((q) => ({
id: q.question_id.toString(),
title: q.title,
subtitle: `${q.score} votes · ${q.answer_count} answers · ${q.tags.slice(0, 3).join(", ")}`,
url: q.link,
timestamp: q.creation_date,
}));
if (tags.length > 0) {
const pageSize = Math.min(100, Math.floor(500 / tags.length));
await Promise.allSettled(
tags.map(async (tag) => {
const res = await api.fetch(
`https://api.stackexchange.com/2.3/questions?order=desc&sort=${sort}&site=stackoverflow&pagesize=${pageSize}&tagged=${encodeURIComponent(tag)}`,
);
if (res.ok && res.json) {
api.emit(toItems(res.json.items));
}
}),
);
} else {
const res = await api.fetch(
`https://api.stackexchange.com/2.3/questions?order=desc&sort=${sort}&site=stackoverflow&pagesize=100`,
);
if (!res.ok || !res.json) {
throw new Error(`Failed to fetch Stack Overflow questions (HTTP ${res.status})`);
}
api.emit(toItems(res.json.items));
}
}
await fetchData();
return {
refresh: fetchData,
};
};