Glanceway Glanceway
所有資料來源

StackOverflow Hot

開發者 v1.0.0

Hot questions from StackOverflow

@codytseng #stackoverflow #programming #qa

設定項目

名稱 鍵 類型 必填 預設值 描述
Tag TAG list 否 — Filter by tag (e.g. javascript, python, react). Leave empty for all tags.
Sort SORT select 否 hot Sort order for questions
hotactivityvotescreationweekmonth

原始碼

id: codytseng/stackoverflow-hot
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,
  };
};

相關資料來源