Напиши расширение для турбоварп где будет через лю...
Создано: 16 августа 2025 г.
Создано: 16 августа 2025 г.
Напиши расширение для турбоварп где будет через любое апи поиска без подписок токенов и тд отдавать json по запросу (блок (json по запросу (запрос)))
Окей! Ниже — готовое минимальное расширение для TurboWarp, которое добавляет репортёр-блок:
(json по запросу (запрос))
Под капотом оно использует открытое API Википедии (без ключей, подписок и токенов) и возвращает JSON со списком найденных страниц.
Сохраните это как 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(/"/g, '"') .replace(/&/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);
search-json.js
(например, GitHub Gist / свой хостинг).set [результат v] to (json по запросу (москва))
результат
,results[1].title
, results[1].url
и т.п.json{ "engine": "wikipedia", "query": "котики", "total": 5, "results": [ { "id": 123456, "title": "Кот", "description": "вид кошачьих", "snippet": "Домашняя кошка — ...", "url": "https://ru.wikipedia.org/wiki/Кот", "thumbnail": "https://upload.wikimedia.org/..." } ] }
fetch
из расширения работает напрямую.Если вам нужен другой источник без ключей (например, англ. Википедия, Викиданные или Wikisource), легко поменять базовый URL на en.wikipedia.org
и т.п. Нужна помощь — скажите, сделаю вариант с выбором языка/лимита прямо в блоке.
инвалид эксишон id
Похоже, у тебя вылезла ошибка “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(/"/g, '"') .replace(/&/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
.Хочешь — сделаю вариант с выбором языка/лимита прямо в блоке.