返回首頁 

YandexGPT Summarize

Скрипт добавляет плавающую кнопку на страницы, которая при нажатии открывает YandexGPT (300.ya.ru) и передает текущий URL для создания обобщенного текста видео или статьи.


Install this script?
// ==UserScript==// @name         YandexGPT Summarize// @namespace    YandexGPT// @author       NK// @version      1.0// @description  Скрипт добавляет плавающую кнопку на страницы, которая при нажатии открывает YandexGPT (300.ya.ru) и передает текущий URL для создания обобщенного текста видео или статьи.// @match        *://*/*// @match        *://300.ya.ru/*// @grant        GM_xmlhttpRequest// @grant        GM_setValue// @grant        GM_getValue// @license      MIT// @homepage     https://github.com/NikitaKrulov/TampermonkeyYaGPT// @icon         https://300.ya.ru/favicon.ico// ==/UserScript==(function() {'use strict';// Check if we're on the Yandex GPT siteif (window.location.hostname === '300.ya.ru') {// Get the URL parameter if it existsconst urlParams = new URLSearchParams(window.location.search);const sourceUrl = urlParams.get('url');if (sourceUrl) {// Function to find and interact with elements on the Yandex GPT pagefunction fillAndSubmitForm() {// Use the exact selector for the textarea from the HTMLconst inputField = document.querySelector('textarea.textarea');// Use the exact selector for the submit button from the HTMLconst submitButton = document.querySelector('button.button.submit');if (inputField) {console.log('Found input field, filling with URL:', sourceUrl);// Focus the textarea firstinputField.focus();// Set the value and trigger eventsinputField.value = sourceUrl;inputField.dispatchEvent(new Event('input', { bubbles: true }));inputField.dispatchEvent(new Event('change', { bubbles: true }));// Add a brief delay to ensure the input is processedsetTimeout(() => {// If we found a submit button, enable and click itif (submitButton) {console.log('Found submit button, enabling and clicking it');// Remove disabled attributesubmitButton.removeAttribute('disabled');// Remove the disabled classsubmitButton.classList.remove('disabled');// Wait a brief moment and then clicksetTimeout(() => {submitButton.click();}, 300);} else {console.log('Submit button not found yet, retrying...');setTimeout(fillAndSubmitForm, 500);}}, 300);} else {console.log('Input field not found yet, retrying...');setTimeout(fillAndSubmitForm, 500);}}// Wait for the page to load and then attempt to fill the form// Try immediately and then retry a few more times if neededsetTimeout(fillAndSubmitForm, 500);setTimeout(fillAndSubmitForm, 1000);setTimeout(fillAndSubmitForm, 2000);}return;}var floatingButton = document.createElement('div');floatingButton.style.position = 'fixed';floatingButton.style.bottom = '20px';floatingButton.style.right = '20px';floatingButton.style.width = '40px';floatingButton.style.height = '40px';floatingButton.style.cursor = 'pointer';floatingButton.style.zIndex = '9999';var svgIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg');svgIcon.setAttribute('class', 'alice__icon');svgIcon.setAttribute('width', '40');svgIcon.setAttribute('height', '40');svgIcon.setAttribute('viewBox', '0 0 40 40');svgIcon.setAttribute('xmlns', 'http://www.w3.org/2000/svg');var path1 = document.createElementNS('http://www.w3.org/2000/svg', 'path');path1.setAttribute('fill-rule', 'evenodd');path1.setAttribute('clip-rule', 'evenodd');path1.setAttribute('d', 'M19.973 12.22c-.525 0-1.032.19-1.488.455-.46.269-.914.64-1.345 1.069-.864.857-1.702 2.005-2.396 3.21-.694 1.206-1.266 2.505-1.575 3.68-.155.588-.249 1.166-.251 1.697-.002.525.086 1.058.347 1.51.261.453.679.795 1.135 1.055.461.264 1.008.47 1.594.63 1.172.32 2.583.475 3.973.476 1.39.002 2.802-.149 3.974-.466.586-.159 1.134-.364 1.595-.627.457-.26.874-.602 1.136-1.055.261-.453.349-.985.347-1.511-.002-.532-.096-1.11-.25-1.698-.308-1.176-.878-2.478-1.571-3.685-.694-1.207-1.53-2.356-2.393-3.214-.432-.43-.885-.801-1.345-1.07-.456-.266-.963-.456-1.488-.456zm-5.41 10.871c-.08-.14-.147-.38-.145-.754.001-.367.068-.813.202-1.321.267-1.015.777-2.191 1.424-3.313.646-1.122 1.407-2.154 2.152-2.895.373-.37.727-.651 1.045-.837.322-.188.565-.251.732-.251.165 0 .408.063.73.252.318.185.671.467 1.044.837.744.742 1.504 1.775 2.15 2.898.645 1.124 1.155 2.301 1.421 3.318.133.508.2.956.201 1.323.002.374-.065.614-.146.756-.081.14-.256.317-.58.502-.318.18-.738.345-1.244.482-1.012.274-2.285.416-3.58.414-1.294-.001-2.567-.147-3.58-.423-.506-.138-.926-.303-1.245-.485-.324-.185-.499-.362-.58-.503z');path1.setAttribute('fill', 'currentColor');var path2 = document.createElementNS('http://www.w3.org/2000/svg', 'path');path2.setAttribute('fill-rule', 'evenodd');path2.setAttribute('clip-rule', 'evenodd');path2.setAttribute('d', 'M32 20c0 6.627-5.373 12-12 12S8 26.627 8 20 13.373 8 20 8s12 5.373 12 12zm-1.5 0c0 5.799-4.701 10.5-10.5 10.5S9.5 25.799 9.5 20 14.201 9.5 20 9.5 30.5 14.201 30.5 20z');path2.setAttribute('fill', 'currentColor');svgIcon.appendChild(path1);svgIcon.appendChild(path2);floatingButton.appendChild(svgIcon);document.body.appendChild(floatingButton);// Create an error message elementvar errorContainer = document.createElement('div');errorContainer.id = 'error-message';errorContainer.style.position = 'fixed';errorContainer.style.bottom = '70px';errorContainer.style.right = '20px';errorContainer.style.padding = '10px';errorContainer.style.backgroundColor = 'rgba(136, 16, 16, 0.9)';errorContainer.style.border = '1px solid red';errorContainer.style.borderRadius = '5px';errorContainer.style.zIndex = '9999';errorContainer.style.maxWidth = '300px';errorContainer.style.display = 'none';document.body.appendChild(errorContainer);// Make the button draggablevar isDragging = false;var startOffsetX = 0;var startOffsetY = 0;// Restore saved position if availablevar savedPositionX = GM_getValue('floatingButtonX');var savedPositionY = GM_getValue('floatingButtonY');if (savedPositionX !== undefined && savedPositionY !== undefined) {floatingButton.style.left = savedPositionX + 'px';floatingButton.style.top = savedPositionY + 'px';// Remove default bottom/right positioningfloatingButton.style.bottom = 'auto';floatingButton.style.right = 'auto';}// Mouse events for draggingfloatingButton.addEventListener('mousedown', startDrag);document.addEventListener('mousemove', drag);document.addEventListener('mouseup', endDrag);// Touch events for mobile devicesfloatingButton.addEventListener('touchstart', function(event) {var touch = event.touches[0];startDrag(touch);event.preventDefault(); // Prevent scrolling while dragging});document.addEventListener('touchmove', function(event) {var touch = event.touches[0];drag(touch);event.preventDefault(); // Prevent scrolling while dragging});document.addEventListener('touchend', endDrag);function startDrag(event) {isDragging = true;startOffsetX = (event.clientX || event.pageX) - floatingButton.offsetLeft;startOffsetY = (event.clientY || event.pageY) - floatingButton.offsetTop;}function drag(event) {if (isDragging) {var clientX = event.clientX || event.pageX;var clientY = event.clientY || event.pageY;// Calculate new positionvar newX = clientX - startOffsetX;var newY = clientY - startOffsetY;// Apply boundary checkingvar maxX = window.innerWidth - floatingButton.offsetWidth;var maxY = window.innerHeight - floatingButton.offsetHeight;newX = Math.max(0, Math.min(newX, maxX));newY = Math.max(0, Math.min(newY, maxY));// Update button positionfloatingButton.style.left = newX + 'px';floatingButton.style.top = newY + 'px';floatingButton.style.bottom = 'auto';floatingButton.style.right = 'auto';}}function endDrag() {if (isDragging) {isDragging = false;// Save position for persistenceGM_setValue('floatingButtonX', parseInt(floatingButton.style.left));GM_setValue('floatingButtonY', parseInt(floatingButton.style.top));}}// Function to show error messagefunction showError(message) {var errorElement = document.getElementById('error-message');errorElement.textContent = message;errorElement.style.display = 'block';// Hide after 5 secondssetTimeout(function() {errorElement.style.display = 'none';}, 5000);}// Add click event to the floating buttonfloatingButton.addEventListener('click', function() {// Store the current URL to be used on the Yandex GPT siteGM_setValue('sourceArticleUrl', window.location.href);// Open YandexGPT with the current URLwindow.open('https://300.ya.ru/?url=' + encodeURIComponent(window.location.href), '_blank');});})();