Glanceway Glanceway
Все источники

Wikipedia On This Day

Другое v1.0.0

Historical events that happened on today's date from Wikipedia

@codytseng #wikipedia #history #today

Настройки

Название Ключ Тип Обязательно По умолчанию Описание
Language LANGUAGE select Нет en Wikipedia language edition
enzhjadefres

Исходный код

version: 1.0.0
name: Wikipedia On This Day
description: Historical events that happened on today's date from Wikipedia
author: codytseng
author_url: https://github.com/codytseng
category: Other
tags:
  - wikipedia
  - history
  - today

config:
  - key: LANGUAGE
    name: Language
    type: select
    required: false
    default: en
    description: Wikipedia language edition
    options:
      - en
      - zh
      - ja
      - de
      - fr
      - es
import type { GlancewayAPI, SourceMethods } from "../../types";

interface OnThisDayEvent {
  text: string;
  year: number;
  pages?: {
    title: string;
    extract?: string;
    content_urls?: {
      desktop?: { page?: string };
    };
  }[];
}

interface OnThisDayResponse {
  selected: OnThisDayEvent[];
  events: OnThisDayEvent[];
}

export default (api: GlancewayAPI): SourceMethods => {
  const language = api.config.get("LANGUAGE") || "en";

  return {
    async refresh() {
      const now = new Date();
      const mm = String(now.getMonth() + 1).padStart(2, "0");
      const dd = String(now.getDate()).padStart(2, "0");

      const url = `https://api.wikimedia.org/feed/v1/wikipedia/${language}/onthisday/all/${mm}/${dd}`;

      const response = await api.fetch<OnThisDayResponse>(url);

      if (response.ok && response.json) {
        const events = [
          ...(response.json.selected || []),
          ...(response.json.events || []),
        ];

        const seen = new Set<string>();
        const items = [];

        for (const item of events) {
          const page = item.pages?.[0];
          const id = `${item.year}-${page?.title || item.text.slice(0, 50)}`;

          if (seen.has(id)) continue;
          seen.add(id);

          items.push({
            id,
            title: `${item.year} \u2014 ${item.text}`,
            subtitle: page?.extract,
            url: page?.content_urls?.desktop?.page,
          });

          if (items.length >= 25) break;
        }

        api.emit(items);
      }
    },
  };
};