您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
11
// ==UserScript== // @name YouTube Music WebSocket Tracker // @namespace http://tampermonkey.net/ // @version 1.0.4 // @description 11 // @match *://music.youtube.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; let socket; function connectWebSocket() { if (socket && socket.readyState !== WebSocket.CLOSED) { console.log("WebSocket is already connecting or open."); return; } socket = new WebSocket("ws://localhost:5000/trackInfo"); socket.addEventListener('open', function(event) { console.log("WebSocket connection established."); }); socket.addEventListener('close', function(event) { console.log("WebSocket connection closed. Retrying in 5 seconds..."); setTimeout(connectWebSocket, 5000); }); socket.addEventListener('error', function(event) { console.log("WebSocket error. Closing socket..."); socket.close(); }); } connectWebSocket(); function sendTrackInfo() { let trackTitle = document.querySelector('.title.style-scope.ytmusic-player-bar').innerText; let artistName = document.querySelector('.byline.style-scope.ytmusic-player-bar').innerText; let buttonTitle = document.querySelector('.play-pause-button').title; let coverImage = document.querySelector('.thumbnail-image-wrapper .image').src; let videoId = ''; const linkElement = document.querySelector('a.ytp-title-link.yt-uix-sessionlink'); if (linkElement) { const url = new URL(linkElement.href); videoId = url.searchParams.get('v'); } const progressBar = document.querySelector('#progress-bar'); const currentTime = parseInt(progressBar.getAttribute('aria-valuenow'), 10); const totalDuration = parseInt(progressBar.getAttribute('aria-valuemax'), 10); console.log("Current Time:", currentTime, "Duration:", totalDuration); console.log("Полученный videoId:", videoId); if (trackTitle && artistName && coverImage) { let isPlaying = buttonTitle !== 'Play'; let data = JSON.stringify({ track: trackTitle, artist: artistName, cover: coverImage, currentTime: currentTime, totalDuration: totalDuration, isPlaying: isPlaying, videoId: videoId }); if (socket.readyState === WebSocket.OPEN) { socket.send(data); } else if (socket.readyState === WebSocket.CLOSED) { console.log("WebSocket is closed. Reconnecting..."); connectWebSocket(); } } else { console.log("Track information is not available yet."); } } setInterval(sendTrackInfo, 1000); })();