Напиши расширение для турбоварп где будет через лю...

Создано: 16 августа 2025 г.

Отвечено с использованием GPT-5 от Chat01

Вопрос

Напиши расширение для турбоварп где будет через любое апи поиска без подписок токенов и тд отдавать json по запросу (блок (json по запросу (запрос)))

Мысль

Thought for 19s

Ответ

Окей! Ниже — готовое минимальное расширение для TurboWarp, которое добавляет репортёр-блок:

(json по запросу (запрос))

Под капотом оно использует открытое API Википедии (без ключей, подписок и токенов) и возвращает JSON со списком найденных страниц.


Код расширения (JavaScript)

Сохраните это как search-json.js и подключите в TurboWarp как “Custom Extension”.

js
// TurboWarp extension: JSON search (Wikipedia, no tokens) (function(Scratch) { 'use strict'; class SearchJSON { getInfo() { return { id: 'searchjson_ru_wikipedia', name: 'Поиск → JSON', color1: '#3063f0', color2: '#274ac7', color3: '#1f3da5', blocks: [ { opcode: 'search', blockType: Scratch.BlockType.REPORTER, text: 'json по запросу [Q]', arguments: { Q: { type: Scratch.ArgumentType.STRING, defaultValue: 'котики' } } } ] }; } async search(args) { const q = String(args.Q || '').trim(); if (!q) return JSON.stringify({engine:'wikipedia', query:'', results:[]}); // ru.wikipedia: REST v1 поиск по страницам const url = `https://ru.wikipedia.org/w/rest.php/v1/search/page?q=${encodeURIComponent(q)}&limit=5`; try { const res = await fetch(url, { headers: { 'accept': 'application/json' } }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const data = await res.json(); // Нормализуем в удобный JSON const results = (data && data.pages ? data.pages : []).map(p => ({ id: p.id, title: p.title || p.key || '', description: p.description || '', snippet: (p.excerpt || '').replace(/<\/?span[^>]*>/g, '') .replace(/<\/?b>/g, '') .replace(/&quot;/g, '"') .replace(/&amp;/g, '&') .trim(), url: p.key ? `https://ru.wikipedia.org/wiki/${encodeURIComponent(p.key)}` : '', thumbnail: p.thumbnail ? p.thumbnail.url || '' : '' })); return JSON.stringify({ engine: 'wikipedia', query: q, total: results.length, results }); } catch (e) { return JSON.stringify({ engine: 'wikipedia', query: q, error: String(e), results: [] }); } } } Scratch.extensions.register(new SearchJSON()); })(Scratch);

Как подключить в TurboWarp

  1. Откройте редактор TurboWarp.
  2. Кликните «Расширения» → внизу «Custom Extension».
  3. Укажите публичный URL, где лежит ваш search-json.js (например, GitHub Gist / свой хостинг).
    Если хотите, могу упаковать код в data: URL — скажите, и я дам готовую ссылку.
  4. После подключения появится блок: json по запросу (текст).

Пример использования в проекте

  • Соберите строку: set [результат v] to (json по запросу (москва))
  • Дальше можете:
    • вывести всю строку результат,
    • или распарсить JSON в Scratch (например, через готовые JSON-парсеры для TurboWarp) и достать results[1].title, results[1].url и т.п.

Пример возвращаемого JSON (схема)

json
{ "engine": "wikipedia", "query": "котики", "total": 5, "results": [ { "id": 123456, "title": "Кот", "description": "вид кошачьих", "snippet": "Домашняя кошка — ...", "url": "https://ru.wikipedia.org/wiki/Кот", "thumbnail": "https://upload.wikimedia.org/..." } ] }

Почему именно это API

  • Бесплатно, без ключей и лимитов подписки.
  • Поддерживает CORS, поэтому fetch из расширения работает напрямую.
  • Возвращает уже готовый JSON.

Если вам нужен другой источник без ключей (например, англ. Википедия, Викиданные или Wikisource), легко поменять базовый URL на en.wikipedia.org и т.п. Нужна помощь — скажите, сделаю вариант с выбором языка/лимита прямо в блоке.

Вопрос

инвалид эксишон id

Мысль

Thought for 13s

Ответ

Похоже, у тебя вылезла ошибка “invalid extension id”. Это из-за поля getInfo().id: там недопустимые символы. Для надёжности используй только латинские буквы и цифры, без пробелов и спецсимволов (тогда всё грузится стабильно).

Вот исправленный вариант (заменил id на безопасный searchjsonruwiki):

js
// TurboWarp extension: JSON search (Wikipedia, no tokens) (function(Scratch) { 'use strict'; class SearchJSON { getInfo() { return { id: 'searchjsonruwiki', // <-- только a-z0-9 name: 'Поиск → JSON', color1: '#3063f0', color2: '#274ac7', color3: '#1f3da5', blocks: [ { opcode: 'search', blockType: Scratch.BlockType.REPORTER, text: 'json по запросу [Q]', arguments: { Q: { type: Scratch.ArgumentType.STRING, defaultValue: 'котики' } } } ] }; } async search(args) { const q = String(args.Q || '').trim(); if (!q) return JSON.stringify({engine:'wikipedia', query:'', results:[]}); const url = `https://ru.wikipedia.org/w/rest.php/v1/search/page?q=${encodeURIComponent(q)}&limit=5`; try { const res = await fetch(url, { headers: { 'accept': 'application/json' } }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const data = await res.json(); const results = (data && data.pages ? data.pages : []).map(p => ({ id: p.id, title: p.title || p.key || '', description: p.description || '', snippet: (p.excerpt || '').replace(/<\/?span[^>]*>/g, '') .replace(/<\/?b>/g, '') .replace(/&quot;/g, '"') .replace(/&amp;/g, '&') .trim(), url: p.key ? `https://ru.wikipedia.org/wiki/${encodeURIComponent(p.key)}` : '', thumbnail: p.thumbnail ? p.thumbnail.url || '' : '' })); return JSON.stringify({ engine: 'wikipedia', query: q, total: results.length, results }); } catch (e) { return JSON.stringify({ engine: 'wikipedia', query: q, error: String(e), results: [] }); } } } Scratch.extensions.register(new SearchJSON()); })(Scratch);

Если всё ещё ругается:

  • перезагрузи страницу с проектом,
  • удали старую кастом-ссылку и добавь заново,
  • убедись, что нет другого расширения с тем же id.

Хочешь — сделаю вариант с выбором языка/лимита прямо в блоке.

Поделиться этим Q&A