|
149 | 149 | // @description:zu Yengeza izimpendulo ze-AI ku-Google Search (inikwa amandla yi-Google Gemma + GPT-4o!) |
150 | 150 | // @author KudoAI |
151 | 151 | // @namespace https://kudoai.com |
152 | | -// @version 2025.9.16.1 |
| 152 | +// @version 2025.9.16.2 |
153 | 153 | // @license MIT |
154 | 154 | // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22170.667%22%20height=%22170.667%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M82.346%20159.79c-18.113-1.815-31.78-9.013-45.921-24.184C23.197%20121.416%2017.333%20106.18%2017.333%2086c0-21.982%205.984-36.245%2021.87-52.131C55.33%2017.74%2069.27%2011.867%2091.416%2011.867c17.574%200%2029.679%203.924%2044.309%2014.363l8.57%206.116-8.705%208.705-8.704%208.704-4.288-3.608c-13.91-11.704-35.932-14.167-53.085-5.939-3.4%201.631-9.833%206.601-14.297%2011.045C44.669%2061.753%2040.95%2070.811%2040.95%2086c0%2014.342%203.594%2023.555%2013.26%2033.995%2019.088%2020.618%2048.46%2022.539%2070.457%204.608l5.333-4.348%2011.333%203.844c6.234%202.114%2011.54%203.857%2011.791%203.873.252.015-2.037%203.008-5.087%206.65-6.343%207.577-20.148%2017.217-30.493%2021.295-8.764%203.454-23.358%205.06-35.198%203.873zM92%2086.333V74.667h60.648l-11.41%2011.41-11.411%2011.41-18.914.257L92%2098z%22/%3E%3C/svg%3E |
155 | 155 | // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22170.667%22%20height=%22170.667%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M82.346%20159.79c-18.113-1.815-31.78-9.013-45.921-24.184C23.197%20121.416%2017.333%20106.18%2017.333%2086c0-21.982%205.984-36.245%2021.87-52.131C55.33%2017.74%2069.27%2011.867%2091.416%2011.867c17.574%200%2029.679%203.924%2044.309%2014.363l8.57%206.116-8.705%208.705-8.704%208.704-4.288-3.608c-13.91-11.704-35.932-14.167-53.085-5.939-3.4%201.631-9.833%206.601-14.297%2011.045C44.669%2061.753%2040.95%2070.811%2040.95%2086c0%2014.342%203.594%2023.555%2013.26%2033.995%2019.088%2020.618%2048.46%2022.539%2070.457%204.608l5.333-4.348%2011.333%203.844c6.234%202.114%2011.54%203.857%2011.791%203.873.252.015-2.037%203.008-5.087%206.65-6.343%207.577-20.148%2017.217-30.493%2021.295-8.764%203.454-23.358%205.06-35.198%203.873zM92%2086.333V74.667h60.648l-11.41%2011.41-11.411%2011.41-18.914.257L92%2098z%22/%3E%3C/svg%3E |
|
1521 | 1521 |
|
1522 | 1522 | window.get = { |
1523 | 1523 |
|
1524 | | - json(url) { |
| 1524 | + json(url) { // requires lib/json5.js |
1525 | 1525 | return new Promise((resolve, reject) => { |
1526 | | - let retryCnt = 0; |
1527 | | - (function getData(url) { xhr({ |
1528 | | - method: 'GET', url: url, onload: resp => { |
1529 | | - if (resp.status == 404 && retryCnt < 1) { // try other format |
1530 | | - retryCnt++ ; getData(url.endsWith('.json') ? url + '5' : url.slice(0, -1)) |
1531 | | - } else handleResp(resp, resolve, reject) |
1532 | | - }, |
1533 | | - onerror: err => reject(new Error(`LOAD ERROR: ${err.message}`)) |
1534 | | - })})(url) |
1535 | | - |
1536 | | - function handleResp(resp, resolve, reject) { |
1537 | | - if (resp.status >= 300) { // status error |
1538 | | - const errType = resp.status >= 300 && resp.status < 400 ? 'REDIRECT' |
1539 | | - : resp.status >= 400 && resp.status < 500 ? 'CLIENT' : 'SERVER' |
1540 | | - return reject(new Error(`${errType} ERROR: ${resp.status}`)) |
1541 | | - } |
1542 | | - try { resolve(JSON5.parse(resp.responseText)) } |
1543 | | - catch (err) { reject(new Error(`PARSE ERROR: ${err.message}`)) } |
| 1526 | + let retryCnt = 0 ; getData(url) |
| 1527 | + |
| 1528 | + function getData(currentURL) { |
| 1529 | + xhr({ |
| 1530 | + method: 'GET', url: currentURL, |
| 1531 | + onload: ({ responseText, status }) => { |
| 1532 | + if (status >= 300 && status != 404) { |
| 1533 | + const errType = status < 400 ? 'REDIRECT' : status < 500 ? 'CLIENT' : 'SERVER' |
| 1534 | + return reject(new Error(`${errType} ERROR: ${status}`)) |
| 1535 | + } |
| 1536 | + try { |
| 1537 | + resolve(currentURL.endsWith('.json') ? JSON.parse(responseText) |
| 1538 | + : JSON5.parse(responseText)) |
| 1539 | + } catch (err) { |
| 1540 | + retryCnt < 1 ? tryAltDataFormat() : reject(new Error(`PARSE ERROR: ${err.message}`)) } |
| 1541 | + }, |
| 1542 | + onerror: err => { |
| 1543 | + retryCnt < 1 ? tryAltDataFormat() : reject(new Error(`LOAD ERROR: ${err.message}`)) } |
| 1544 | + }) |
1544 | 1545 | } |
| 1546 | + |
| 1547 | + function tryAltDataFormat() { |
| 1548 | + retryCnt++ ; getData(url.endsWith('.json') ? url + '5' : url.slice(0, -1)) } |
1545 | 1549 | }) |
1546 | 1550 | }, |
1547 | | - |
1548 | 1551 | async related(query) { |
1549 | 1552 |
|
1550 | 1553 | // Init API attempt props |
|
0 commit comments