您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Zeigt die letzten Kommentare eines Benutzers an
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/528796/1560683/MyDealz%20Comment%20Viewer.js
// ==UserScript== // @name MyDealz Comment Viewer // @namespace http://tampermonkey.net/ // @version 2.1 // @description Zeigt die letzten Kommentare eines Benutzers an // @author MD928835 // @license MIT // ==/UserScript== (function() { 'use strict'; // Globale Funktion definieren window.viewUserComments = async function(username) { // SessionStorage für Kommentare leeren sessionStorage.removeItem('mydealz_comments'); const fetchDealTitle = async (threadId) => { const query = ` query getThread($filter: IDFilter!) { thread(threadId: $filter) { title } }`; try { const response = await fetch("https://www.mydealz.de/graphql", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables: { filter: { eq: threadId } } }) }); const result = await response.json(); return result.data.thread.title || "Titel nicht verfügbar"; } catch (error) { console.error(`Fehler beim Abrufen des Titels für threadId ${threadId}:`, error); return "Titel nicht verfügbar"; } }; try { // Profilseite abrufen const response = await fetch(`https://www.mydealz.de/profile/${username}?page=1`); if (!response.ok) throw new Error(`HTTP Fehler! Status: ${response.status}`); const html = await response.text(); // Kommentar- und Thread-IDs extrahieren const pattern = /href=https:\/\/www\.mydealz\.de\/.*?-(\d+)#(?:comment|reply)-(\d+)/g; const matches_raw = [...html.matchAll(pattern)]; const ids = matches_raw.map(match => ({ threadId: match[1], commentId: match[2], url: match[0].replace('href=', '') })); // Parallelisierte Anfragen für Kommentare und Titel const fetchPromises = ids.map(async ({ threadId, commentId, url }) => { const commentQuery = ` query comment($id: ID!) { comment(id: $id) { preparedHtmlContent createdAt createdAtTs } }`; try { const [commentResponse, title] = await Promise.all([ fetch("https://www.mydealz.de/graphql", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: commentQuery, variables: { id: commentId } }) }).then(res => res.json()), fetchDealTitle(threadId) ]); const commentData = commentResponse?.data?.comment; if (commentData) { const comment = commentData.preparedHtmlContent.replace(/<img[^>]*>/g, ''); const date = new Date(commentData.createdAtTs * 1000) .toLocaleString('de-DE', { day: '2-digit', month: '2-digit', year: '2-digit', hour: '2-digit', minute: '2-digit' }) .replace(',', ''); return { html: `<div class="comment-card" style="background-color:white;padding:1rem;margin:0.75rem 0;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,0.1);"><span title="${date}">${commentData.createdAt}</span> <b>${title}</b><br>${comment}<br><svg width="15px" height="16px" class="icon icon--comment" style="vertical-align: middle"><use xlink:href="/assets/img/ico_632f5.svg#comment"></use></svg> <a href='${url}' target='_blank'>Zum Kommentar</a></div>`, title, comment, dealId: threadId, commentId }; } } catch (error) { console.error(`Fehler bei der Verarbeitung von commentId ${commentId}:`, error); return null; } }); const pageResults = (await Promise.all(fetchPromises)).filter(r => r); // Ergebnisse sicher in sessionStorage speichern sessionStorage.setItem('mydealz_comments', JSON.stringify(pageResults)); // Popup anzeigen const resultWindow = window.open("", "Results", "width=1000,height=700,location=no,menubar=no,toolbar=no,status=no,titlebar=no"); if (resultWindow) { resultWindow.document.write(` <html> <head> <title>${username}s letzte Kommentare</title> <style> body { margin: 0; padding: 0; background: #f5f5f5; font-family: Arial, sans-serif; } .header { background: #005293; height: 56px; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; position: relative; } .logo { height: 40px; position: absolute; left: 20px; } .sort-options { text-align: center; padding: 10px; } .comments-container { margin: 20px; } .comment-card { background-color: white; padding: 1rem; margin: 0.75rem 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } </style> <script> function sortComments(type) { let comments = JSON.parse(sessionStorage.getItem('mydealz_comments')); if (type === 'all') { comments.sort((a, b) => b.commentId - a.commentId); } else { comments.sort((a, b) => b.dealId === a.dealId ? b.commentId - a.commentId : b.dealId - a.dealId); } document.getElementById('comments-container').innerHTML = comments.map(r => r.html).join(''); } </script> </head> <body> <div class="header"> <img src="https://www.mydealz.de/assets/img/logo/default-light_d4b86.svg" class="logo"> <a href="https://www.mydealz.de/profile/${username}" style="color:white;text-decoration:none" target="_blank">${username}s letzte ${pageResults.length} Kommentare</a> </div> <div class="sort-options"> Kommentare sortieren nach <label><input type="radio" name="sort" checked onclick="sortComments('all')"> alle chronologisch</label> <label><input type="radio" name="sort" onclick="sortComments('deal')"> beitragschronologisch</label> </div> <div id="comments-container" class="comments-container"> ${pageResults.map(r => r.html).join('')} </div> </body> </html>`); resultWindow.document.close(); resultWindow.focus(); } else { alert("Popup blockiert!"); } } catch (error) { console.error("Fehler:", error); alert(`Fehler: ${error.message}`); } }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址