From 30739db7ced24e07000fc200d9b239eaa28acfc1 Mon Sep 17 00:00:00 2001 From: Longtail Date: Sat, 31 Oct 2026 14:47:15 +0800 Subject: [PATCH] first commit --- .gitignore | 5 + README.md | 61 +++ dww11-article-importer.user.js | 471 ++++++++++++++++++ dww11-wechat-oneclick.user.js | 397 +++++++++++++++ dww11_make_package.py | 63 +++ .../README.md | 89 ++++ .../download_article.py | 283 +++++++++++ .../requirements.txt | 3 + .../image001.jpg | Bin 0 -> 67662 bytes .../image002.jpg | Bin 0 -> 52230 bytes .../image003.jpg | Bin 0 -> 67662 bytes .../为什么年轻人爱玩手机,背后的真相太无奈!.md | 73 +++ .../微信一键导入脚本说明.md | 59 +++ 本地文章导入脚本使用说明.md | 123 +++++ 14 files changed, 1627 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 dww11-article-importer.user.js create mode 100644 dww11-wechat-oneclick.user.js create mode 100644 dww11_make_package.py create mode 100644 wechat_official_acc_article_downloader/README.md create mode 100644 wechat_official_acc_article_downloader/download_article.py create mode 100644 wechat_official_acc_article_downloader/requirements.txt create mode 100644 wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image001.jpg create mode 100644 wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image002.jpg create mode 100644 wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image003.jpg create mode 100644 wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/为什么年轻人爱玩手机,背后的真相太无奈!.md create mode 100644 wechat_official_acc_article_downloader/微信一键导入脚本说明.md create mode 100644 本地文章导入脚本使用说明.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..95f6fa9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +__pycache__/ +*.py[cod] +.venv/ +*.dww11.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..0f49cc1 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# dww11 文档与文章导入工具 + +这个项目用于把网页文章保存到本地,并导入广谈大湾网发帖页面。项目中的工具彼此配合,也可以单独使用。 + +## 项目内容 + +### 1. 微信公众号文章下载器 + +目录:`wechat_official_acc_article_downloader/` + +`download_article.py` 可以下载微信公众号或普通网页文章,保存为 Markdown 文件和本地图片。 + +```bash +cd wechat_official_acc_article_downloader +uv run --no-project --python 3.12 \ + --with-requirements requirements.txt \ + python download_article.py '文章链接' +``` + +运行后会在当前目录生成文章文件夹,其中包含 Markdown 文件和图片。需要给其他程序调用时,可以加上 `--json` 输出 JSON 结果。 + +### 2. 本地文章导入脚本 + +文件:`dww11-article-importer.user.js` + +这是一个 Tampermonkey 用户脚本。它可以读取包含 Markdown 和图片的文章目录,预览内容,并把正文和配图填写到广谈大湾网的新发帖页面。脚本不会自动发表帖子。 + +使用前请先安装 Tampermonkey,然后在脚本管理面板中导入该文件。详细步骤见 `本地文章导入脚本使用说明.md`。 + +### 3. 文章打包工具 + +文件:`dww11_make_package.py` + +这个工具可以把文章目录打包成用户脚本可读取的 JSON 文件: + +```bash +python3 dww11_make_package.py '文章目录' -o '文章包.json' +``` + +它只读取和打包本地文件,不会上传或发布文章。 + +### 4. 微信一键导入脚本 + +文件:`dww11-wechat-oneclick.user.js` + +这个 Tampermonkey 脚本可以在广谈大湾网发帖页面中,通过微信公众号文章链接调用网站采集功能,并自动整理标题、正文、图片和来源说明。导入后请人工检查,脚本不会自动保存或发表。 + +## 推荐使用流程 + +1. 用文章下载器下载微信公众号文章。 +2. 检查生成的 Markdown 和图片。 +3. 使用本地文章导入脚本,或在网站中使用微信一键导入脚本。 +4. 确认标题、正文和图片无误后,再由用户手动保存或发表。 + +## 注意事项 + +- 需要自行安装 Python、uv 和 Tampermonkey。 +- 微信文章可能因验证、登录或页面变化而无法下载。 +- 脚本只处理本地文件或当前网页允许访问的内容,不绕过网站权限。 +- `.venv`、系统临时文件和生成的文章数据不属于项目源码,不应提交到 Git。 + diff --git a/dww11-article-importer.user.js b/dww11-article-importer.user.js new file mode 100644 index 0000000..d0cb909 --- /dev/null +++ b/dww11-article-importer.user.js @@ -0,0 +1,471 @@ +// ==UserScript== +// @name 广谈大湾网 · 本地文章目录导入 +// @namespace local.dww11.article-importer +// @version 1.0.0 +// @description 选择整个文章目录,导入 Markdown 标题、正文与本地配图;保留人工发布与程序接口。 +// @match https://www.dww11.com/forum.php* +// @match https://dww11.com/forum.php* +// @run-at document-idle +// @grant none +// @noframes +// @license MIT +// ==/UserScript== + +(function (root, factory) { + 'use strict'; + const core = factory(); + if (typeof module === 'object' && module.exports) module.exports = core; + else core.mount(root); +})(typeof window === 'undefined' ? null : window, function () { + 'use strict'; + const VERSION = '1.0.0'; + const MAX_IMAGE_SIZE = 20 * 1024 * 1024; + const IMAGE_EXT = /\.(?:jpe?g|png|gif)$/i; + + function normalizePath(path) { + const parts = []; + const value = String(path).replace(/\\/g, '/').normalize('NFC'); + if (/^(?:\/|[a-z]:|[a-z]+:)/i.test(value)) throw new Error('请使用目录内的相对路径:' + path); + for (const part of value.split('/')) { + if (!part || part === '.') continue; + if (part === '..') { + if (!parts.length) throw new Error('图片路径超出所选目录:' + path); + parts.pop(); + } else parts.push(part); + } + return parts.join('/'); + } + + function imagePath(mdPath, target) { + if (/^(?:[a-z][\w+.-]*:|\/\/|\/)/i.test(target)) throw new Error('图片必须在所选目录内,请先下载:' + target); + let decoded; + try { decoded = decodeURIComponent(target); } catch { throw new Error('图片路径编码无效:' + target); } + return normalizePath(mdPath.slice(0, mdPath.lastIndexOf('/') + 1) + decoded); + } + + // A small, intentionally bounded Markdown reader. Raw HTML is never executed. + // Links/images support balanced parentheses, angle destinations and optional titles. + function readLink(text, start) { + const image = text.startsWith('![', start); + if (!image && text[start] !== '[') return null; + const left = start + (image ? 2 : 1); + let end = left; + for (; end < text.length; end++) { + if (text[end] === '\\') { end++; continue; } + if (text[end] === ']') break; + } + if (text.slice(end, end + 2) !== '](') return null; + let pos = end + 2, depth = 1, quoted = '', angle = false; + for (; pos < text.length; pos++) { + const ch = text[pos]; + if (ch === '\\') { pos++; continue; } + if (quoted) { if (ch === quoted) quoted = ''; continue; } + if (!angle && depth === 1 && /\s/.test(text[pos - 1]) && (ch === '"' || ch === "'")) { quoted = ch; continue; } + if (ch === '<') { angle = true; continue; } + if (ch === '>') { angle = false; continue; } + if (!angle && ch === '(') depth++; + if (!angle && ch === ')' && --depth === 0) break; + } + if (depth) return null; + let target = text.slice(end + 2, pos).trim(); + const destination = target.match(/^<([^>]+)>\s*(?:["'][\s\S]*["'])?$/); + target = destination ? destination[1] : target.replace(/\s+["'][\s\S]*["']\s*$/, ''); + target = target.replace(/\\([()\\ ])/g, '$1'); + return { image, label: text.slice(left, end), target, end: pos + 1 }; + } + + function inline(text, onImage) { + let out = ''; + for (let pos = 0; pos < text.length;) { + if (text[pos] === '\\' && pos + 1 < text.length) { out += text[pos + 1]; pos += 2; continue; } + const link = readLink(text, pos); + if (link) { + if (link.image) out += onImage(link.target, link.label); + else if (/^(https?:\/\/|mailto:)/i.test(link.target) && !/[\[\]\r\n"']/.test(link.target)) { + out += '[url=' + link.target + ']' + inline(link.label, onImage) + '[/url]'; + } else out += link.label + ' (' + link.target + ')'; + pos = link.end; + continue; + } + if (text[pos] === '`') { + const end = text.indexOf('`', pos + 1); + if (end > pos + 1) { out += text.slice(pos + 1, end); pos = end + 1; continue; } + } + let matched = false; + for (const [mark, tag] of [['**', 'b'], ['__', 'b'], ['~~', 's'], ['*', 'i'], ['_', 'i']]) { + if (!text.startsWith(mark, pos) || (mark === '_' && /\w/.test(text[pos - 1] || ''))) continue; + const end = text.indexOf(mark, pos + mark.length); + if (end <= pos + mark.length) continue; + out += '[' + tag + ']' + inline(text.slice(pos + mark.length, end), onImage) + '[/' + tag + ']'; + pos = end + mark.length; matched = true; break; + } + if (!matched) out += text[pos++]; + } + return out; + } + + function markdownToBBCode(markdown, onImage) { + const lines = markdown.replace(/\r\n?/g, '\n').split('\n'); + const output = []; + let list = '', quote = false, code = false, fence = ''; + const closeList = () => { if (list) output.push('[/list]'); list = ''; }; + for (let index = 0; index < lines.length; index++) { + const line = lines[index]; + const codeMark = line.match(/^\s*(`{3,}|~{3,})/); + if (codeMark && (!code || codeMark[1][0] === fence)) { + closeList(); + output.push(code ? '[/code]' : '[code]'); + code = !code; fence = codeMark[1][0]; continue; + } + if (code) { output.push(line.replace(/\[\/code\]/gi, '[/code]')); continue; } + const quoted = /^\s*>\s?/.test(line); + if (quoted !== quote) { closeList(); output.push(quoted ? '[quote]' : '[/quote]'); quote = quoted; } + const content = quoted ? line.replace(/^\s*>\s?/, '') : line; + const item = content.match(/^\s*(?:([-+*])|\d+[.)])\s+(.+)$/); + if (item) { + const type = item[1] ? '[list]' : '[list=1]'; + if (list !== type) { closeList(); output.push(type); list = type; } + output.push('[*]' + inline(item[2], onImage)); continue; + } + closeList(); + const heading = content.match(/^\s{0,3}(#{1,6})\s+(.+?)\s*#*$/); + if (heading) output.push('[b]' + inline(heading[2], onImage) + '[/b]'); + else if (/^\s*(?:---+|\*\*\*+|___+)\s*$/.test(content)) output.push('[hr]'); + else output.push(inline(content, onImage)); + } + closeList(); + if (quote) output.push('[/quote]'); + if (code) output.push('[/code]'); + return output.join('\n').trim(); + } + + function compile(markdown, mdPath, fileMap, titleOverride) { + let body = String(markdown).replace(/^\uFEFF/, '').replace(/\r\n?/g, '\n'); + const firstHeading = body.match(/^\s*#\s+([^\n]+)\n?/); + const title = String(titleOverride || firstHeading?.[1] || mdPath.split('/').pop().replace(/\.md$/i, '')).trim(); + if (firstHeading) body = body.slice(firstHeading[0].length).trim(); + if (!title || Array.from(title).length > 80) throw new Error('标题为空或超过 80 字,请修改 Markdown 标题后重试。'); + if (!body.trim()) throw new Error('正文为空。'); + const warnings = []; + if (/<\/?[a-z][^>]*>/i.test(body)) warnings.push('存在 HTML,将作为文字保留;请检查排版。'); + if (/^\s*\|.*\|\s*$/m.test(body)) warnings.push('表格暂按原文保留,需手动检查。'); + if (/!\[[^\]]*\]\s*\[[^\]]*\]/.test(body) || /^\s*\[[^\]]+\]:/m.test(body)) { + throw new Error('暂不支持引用式 Markdown 图片/链接,请改成 ![](图片路径) 或 [文字](网址)。'); + } + const images = new Map(); + // Validate every image before any network request; repeated references upload once. + markdownToBBCode(body, (target) => { + const path = imagePath(mdPath, target); + const file = fileMap.get(path); + if (!file) throw new Error('找不到配图:' + path); + if (!IMAGE_EXT.test(path)) throw new Error('网站仅支持 JPG、JPEG、PNG、GIF:' + path); + if (!file.size || file.size >= MAX_IMAGE_SIZE) throw new Error('配图为空或达到 20 MB:' + path); + images.set(path, file); + return '[图片:' + path + ']'; + }); + return { title, body, mdPath, images, warnings, + render(aids) { + return markdownToBBCode(body, target => { + const path = imagePath(mdPath, target); + const aid = aids.get(path); + if (!/^[1-9]\d*$/.test(String(aid))) throw new Error('配图尚未上传:' + path); + return '[attachimg]' + aid + '[/attachimg]'; + }); + } + }; + } + + async function prepareFiles(files, markdownPath) { + const fileMap = new Map(); + for (const file of Array.from(files)) { + const path = normalizePath(file.webkitRelativePath || file.name); + if (fileMap.has(path)) throw new Error('文件路径重复:' + path); + fileMap.set(path, file); + } + const candidates = Array.from(fileMap.keys()).filter(p => /\.md$/i.test(p)).sort(); + if (!candidates.length) throw new Error('所选目录中没有 .md 文件。'); + if (!markdownPath && candidates.length > 1) return { candidates, files: Array.from(files) }; + const mdPath = markdownPath || candidates[0]; + const md = fileMap.get(mdPath); + if (!md) throw new Error('指定的 Markdown 文件不存在。'); + return compile(await md.text(), mdPath, fileMap); + } + + async function preparePackage(data) { + if (!data || data.schemaVersion !== 1 || typeof data.markdown !== 'string' || !Array.isArray(data.images)) { + throw new Error('文章包格式错误,需要 schemaVersion: 1、markdown 和 images。'); + } + const map = new Map(); + for (const item of data.images) { + const path = normalizePath(item.path); + if (map.has(path)) throw new Error('文章包图片路径重复:' + path); + let blob = item.blob; + if (!blob && typeof item.base64 === 'string') { + const binary = atob(item.base64); + blob = new Blob([Uint8Array.from(binary, ch => ch.charCodeAt(0))], { type: item.mime || 'application/octet-stream' }); + } + if (!blob || typeof blob.arrayBuffer !== 'function') throw new Error('文章包缺少图片数据:' + path); + map.set(path, blob); + } + return compile(data.markdown, normalizePath(data.markdownPath || 'article.md'), map, data.title); + } + + function parseAid(text) { + const value = String(text).trim(); + // The site's actual WebUploader adapter uses a positive integer response. + if (!/^(?:[1-9]\d*|"[1-9]\d*")$/.test(value)) throw new Error('服务器未返回有效附件编号(可能登录过期、超出权限或上传失败)。'); + return value.replace(/"/g, ''); + } + + function mount(win) { + const doc = win.document; + const params = new URLSearchParams(win.location.search); + if (params.get('mod') !== 'post' || params.get('action') !== 'newthread' || !doc.querySelector('#subject') || !doc.querySelector('#e_textarea')) return; + if (win.DWW11Importer) return; + let article = null, busy = false, candidates = null, lastResult = null, savedBackup = null, stageRevision = 0; + const cache = new Map(), urls = [], logs = []; + const host = doc.createElement('div'); + host.id = 'dww11-importer'; + host.style.cssText = 'position:fixed;right:18px;bottom:18px;z-index:2147483000'; + const shadow = host.attachShadow({ mode: 'open' }); + shadow.innerHTML = `
本地文章导入 · 1.0
+ 选择整个文章文件夹,检查后上传配图并填写。发布由你操作。网站自带的自动保存仍可能运行。 +

+ + +

尚未选择目录

+ + +
`; + doc.body.appendChild(host); + const $ = id => shadow.getElementById(id); + const summary = () => ({ version: VERSION, busy, ready: !!article, title: article?.title || null, + markdownPath: article?.mdPath || null, imageCount: article?.images.size || 0, + warnings: article?.warnings || [], result: lastResult }); + function notify(phase, message, extra = {}) { + $('status').textContent = message; + $('status').className = phase === 'error' ? 'error' : phase === 'complete' ? 'success' : ''; + logs.push({ time: new Date().toISOString(), phase, message, ...extra }); + $('log').hidden = false; + $('log').textContent = logs.slice(-8).map(l => l.message).join('\n'); + win.dispatchEvent(new CustomEvent('dww11-importer:progress', { detail: { phase, message, ...extra } })); + } + function releasePreviews() { while (urls.length) URL.revokeObjectURL(urls.pop()); } + function clearStage() { + article = null; lastResult = null; candidates = null; releasePreviews(); + $('preview').hidden = true; $('md').hidden = true; $('import').disabled = true; + } + function showArticle(prepared) { + article = prepared; lastResult = null; releasePreviews(); + $('preview').hidden = false; + $('title').textContent = article.title; + $('body').textContent = article.body; + $('warnings').textContent = article.warnings.join(';'); + $('images').replaceChildren(); + for (const [path, blob] of article.images) { + const img = doc.createElement('img'); + img.src = URL.createObjectURL(blob); urls.push(img.src); img.alt = path; img.title = path; + $('images').appendChild(img); + } + $('import').disabled = false; + notify('ready', `已检查:${article.images.size} 张图片。点击“上传配图并填写”开始导入。`); + return summary(); + } + async function stageFiles(files, options = {}) { + if (busy) throw new Error('正在导入,请稍候。'); + clearStage(); + const revision = ++stageRevision; + const list = Array.from(files); + const prepared = await prepareFiles(list, options.markdownPath); + if (revision !== stageRevision) return { cancelled: true }; + if (prepared.candidates) { + candidates = prepared.files; + $('md').replaceChildren(new Option('请选择目录中的 Markdown 文件', '')); + for (const path of prepared.candidates) $('md').appendChild(new Option(path, path)); + $('md').hidden = false; + notify('choose-markdown', '目录中有多个 Markdown 文件,请选择一篇。'); + return { candidates: prepared.candidates }; + } + return showArticle(prepared); + } + async function stagePackage(data) { + if (busy) throw new Error('正在导入,请稍候。'); + clearStage(); + const revision = ++stageRevision; + const prepared = await preparePackage(data); + if (revision !== stageRevision) return { cancelled: true }; + return showArticle(prepared); + } + const snapshot = () => ({ title: doc.querySelector('#subject').value, + mode: Number(win.wysiwyg), text: win.getEditorContents() }); + function assertEditor() { + for (const name of ['getEditorContents', 'switchEditor']) { + if (typeof win[name] !== 'function') throw new Error('未识别到网站编辑器:' + name + '。请刷新页面后重试。'); + } + if (!win.imgUpload?.settings || typeof win.updateImageList !== 'function') throw new Error('网站图片上传组件尚未就绪,请刷新后重试。'); + if (Number(win.allowbbcode) === 0 || Number(win.allowimgcode) === 0) throw new Error('当前版块或账号不支持正文格式/图片。'); + } + async function uploadImage(blob, path, settings) { + const url = new URL(settings.upload_url, win.location.href); + if (url.origin !== win.location.origin || url.pathname !== '/misc.php' || url.searchParams.get('operation') !== 'upload') { + throw new Error('上传地址与预期不符,已停止。'); + } + const hash = Array.from(new Uint8Array(await win.crypto.subtle.digest('SHA-256', await blob.arrayBuffer())), n => n.toString(16).padStart(2, '0')).join(''); + const key = url.href + ':' + settings.post_params.uid + ':' + hash; + if (cache.has(key)) { notify('upload', '复用已上传图片:' + path); return cache.get(key); } + const data = new FormData(); + for (const [key, value] of Object.entries(settings.post_params)) data.append(key, String(value)); + data.set('type', 'image'); + data.set('filetype', blob.type || (/\.png$/i.test(path) ? 'image/png' : /\.gif$/i.test(path) ? 'image/gif' : 'image/jpeg')); + data.append(settings.file_post_name || 'Filedata', blob, path.split('/').pop()); + const control = new AbortController(), timer = setTimeout(() => control.abort(), 90000); + try { + const response = await win.fetch(url.href, { method: 'POST', body: data, credentials: 'same-origin', redirect: 'error', signal: control.signal }); + if (!response.ok) throw new Error('图片上传请求失败:HTTP ' + response.status); + const aid = parseAid(await response.text()); + cache.set(key, aid); + return aid; + } catch (error) { + if (error.name === 'AbortError') throw new Error('上传超时;该图片可能已到达服务器,请检查网站图片列表后再重试。'); + throw error; + } finally { clearTimeout(timer); } + } + async function registerImages(aids) { + if (!aids.length) return; + const ids = new Set(aids); + doc.querySelectorAll('#imgattachlist [id^="image_td_"],#imgattachlist [id^="image_"]').forEach(el => { + const id = el.id.match(/^(?:image_td_|image_)(\d+)$/)?.[1]; if (id) ids.add(id); + }); + const ready = () => aids.every(id => doc.getElementById('image_' + id)); + if (ready()) return; + // Use the site's own list loader, which registers attachment form fields too. + win.updateImageList(1, Array.from(ids).join('|')); + await new Promise((resolve, reject) => { + const timer = setTimeout(() => { observer.disconnect(); reject(new Error('图片已上传,但网站图片列表加载超时。重试会复用本页已上传图片。')); }, 25000); + const check = () => { if (ready()) { clearTimeout(timer); observer.disconnect(); resolve(); } }; + const observer = new MutationObserver(check); + observer.observe(doc.body, { childList: true, subtree: true }); check(); + }); + } + function setEditor(title, bbcode) { + win.switchEditor(0); + if (Number(win.wysiwyg) !== 0) throw new Error('无法切换编辑器为纯文本模式。'); + const textarea = doc.querySelector('#e_textarea'); + textarea.value = bbcode; + doc.querySelector('#subject').value = title; + for (const el of [textarea, doc.querySelector('#subject')]) { + el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); + } + // Let Discuz generate the WYSIWYG content with native attachment metadata. + win.switchEditor(1); + const switcher = doc.querySelector('#e_switchercheck'); + if (switcher) switcher.checked = Number(win.wysiwyg) === 0; + } + async function importPrepared() { + if (busy) throw new Error('正在导入,请勿重复点击。'); + if (!article) throw new Error('请先选择文章目录或文章包。'); + assertEditor(); + for (const id of ['bbcodeoff', 'htmlon']) { + if (doc.getElementById(id)?.checked) throw new Error('请先关闭“禁用 Discuz! 代码”和“HTML 代码”,再导入。'); + } + const before = snapshot(); + if ((before.title.trim() || before.text.replace(/<[^>]*>/g, '').trim() || / { el.disabled = true; }); + // Prevent accidental submission of a partly imported article. + const blockSubmit = event => { event.preventDefault(); event.stopImmediatePropagation(); notify('busy', '正在导入,请等待完成后再操作发布。'); }; + const form = doc.querySelector('#postform'); + form.addEventListener('submit', blockSubmit, true); + const submitButtons = Array.from(form.querySelectorAll('button[type="submit"],button[name],input[type="submit"]')); + const previousDisabled = submitButtons.map(el => el.disabled); + submitButtons.forEach(el => { el.disabled = true; }); + let committed = false; + try { + const aids = new Map(); + const settings = win.imgUpload.settings; + const max = Math.min(MAX_IMAGE_SIZE, Number(settings.file_size_limit) * 1024 || MAX_IMAGE_SIZE); + for (const [path, blob] of selected.images) if (blob.size >= max) throw new Error('配图超过当前网站限制:' + path); + let index = 0; + for (const [path, blob] of selected.images) { + notify('upload', `上传 ${++index}/${selected.images.size}:${path}`, { completed: index - 1, total: selected.images.size }); + aids.set(path, await uploadImage(blob, path, settings)); + } + notify('register', '正在加载网站图片列表…'); + await registerImages(Array.from(new Set(aids.values()))); + const now = snapshot(); + if ((now.title !== before.title || now.text !== before.text) && !win.confirm('上传期间你修改了编辑器。是否用导入文章替换最新内容?')) { + notify('cancelled', '已保留当前正文;图片已上传,可稍后再次导入。'); return { cancelled: true }; + } + const backup = snapshot(); + const bbcode = selected.render(aids); + // Preserve a local, downloadable snapshot before changing title or body. + savedBackup = { title: backup.title, content: backup.text, mode: backup.mode, createdAt: new Date().toISOString() }; + try { + for (const id of ['bbcodeoff', 'htmlon']) { + const el = doc.getElementById(id); + if (el && id === 'bbcodeoff' && el.checked) throw new Error('请先取消“禁用 Discuz! 代码”,再重试。'); + if (el && id === 'htmlon' && el.checked) throw new Error('请先关闭“HTML 代码”,再重试。'); + } + setEditor(selected.title, bbcode); + const raw = win.getEditorContents(); + if (Number(win.wysiwyg) === 1) { + for (const id of new Set(aids.values())) if (!raw.includes('attachimg_' + id)) throw new Error('富文本图片转换未通过检查。'); + } else if (raw !== bbcode) throw new Error('正文填写校验失败。'); + if (doc.querySelector('#subject').value !== selected.title) throw new Error('标题填写校验失败。'); + committed = true; + } catch (error) { + // Restore the exact editor representation saved immediately before filling. + win.switchEditor(backup.mode); + if (backup.mode) win.editdoc.body.innerHTML = backup.text; + else doc.querySelector('#e_textarea').value = backup.text; + doc.querySelector('#subject').value = backup.title; + const switcher = doc.querySelector('#e_switchercheck'); if (switcher) switcher.checked = !backup.mode; + throw error; + } + lastResult = { title: selected.title, images: Object.fromEntries(aids), completedAt: new Date().toISOString() }; + notify('complete', `已填写标题、正文和 ${aids.size} 张配图。请检查排版,随后手动发表。`); + return lastResult; + } catch (error) { + notify('error', error.message + (committed ? '' : ' 标题和正文未替换;已上传的图片会保留。')); + throw error; + } finally { + busy = false; form.removeEventListener('submit', blockSubmit, true); + submitButtons.forEach((el, index) => { el.disabled = previousDisabled[index]; }); + controls.forEach(el => { el.disabled = false; }); + $('import').disabled = !article; + } + } + function downloadJSON(value, filename) { + const url = URL.createObjectURL(new Blob([JSON.stringify(value, null, 2)], { type: 'application/json' })); + const link = doc.createElement('a'); link.href = url; link.download = filename; link.click(); + setTimeout(() => URL.revokeObjectURL(url), 1000); + } + // Public v1 interface. Staging is read-only; importPrepared is the explicit upload/fill step. + // No postMessage listener, localhost service, publishing endpoint or saved credentials. + const api = Object.freeze({ version: VERSION, schemaVersion: 1, stageFiles, stagePackage, + getState: summary, openPicker: () => { if (!busy) $('folder').click(); }, importPrepared, + getBackup: () => savedBackup }); + win.DWW11Importer = api; + $('choose').onclick = () => { $('folder').value = ''; $('folder').click(); }; + $('package').onclick = () => { $('json').value = ''; $('json').click(); }; + const handleError = error => notify('error', error.message || String(error)); + $('folder').onchange = () => stageFiles($('folder').files).catch(handleError); + $('json').onchange = async () => { + try { const file = $('json').files[0]; if (file) await stagePackage(JSON.parse(await file.text())); } + catch (error) { handleError(error); } + }; + $('md').onchange = () => { + const files = candidates, path = $('md').value; + if (files && path) stageFiles(files, { markdownPath: path }).catch(handleError); + }; + $('import').onclick = () => importPrepared().catch(handleError); + $('diagnostics').onclick = () => downloadJSON({ ...summary(), logs }, 'dww11-import-diagnostics.json'); + win.addEventListener('pagehide', releasePreviews, { once: true }); + } + return { VERSION, normalizePath, imagePath, readLink, markdownToBBCode, compile, prepareFiles, preparePackage, parseAid, mount }; +}); diff --git a/dww11-wechat-oneclick.user.js b/dww11-wechat-oneclick.user.js new file mode 100644 index 0000000..afc0684 --- /dev/null +++ b/dww11-wechat-oneclick.user.js @@ -0,0 +1,397 @@ +// ==UserScript== +// @name 广谈大湾网 · 微信文章一键导入并排版 +// @namespace local.dww11.wechat-oneclick +// @version 1.0.9 +// @description 使用网站现有微信采集器,修正标题,统一正文4号黑色,追加1号银色来源;不点击保存或发布。 +// @match https://www.dww11.com/forum.php* +// @match https://dww11.com/forum.php* +// @grant GM_xmlhttpRequest +// @grant unsafeWindow +// @connect mp.weixin.qq.com +// @run-at document-idle +// @noframes +// ==/UserScript== + +(() => { + 'use strict'; + const ID = 'dww11-wx-oneclick'; + const FORMAT_ID = 'dww11-format-oneclick'; + let busy = false; + function setBusy(value) { + busy = value; + for (const id of [ID, FORMAT_ID]) { + const button = document.getElementById(id); + if (button) button.disabled = value; + } + } + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + const visible = el => el && el.getClientRects().length && getComputedStyle(el).display !== 'none'; + async function waitFor(fn, timeout = 10000) { + const deadline = Date.now() + timeout; + while (Date.now() < deadline) { + const result = fn(); + if (result) return result; + await sleep(100); + } + throw new Error('等待编辑器或采集窗口超时,请关闭遮挡窗口后重试。'); + } + function normalizeURL(raw) { + const url = new URL(raw.trim().replace(/[\u200b-\u200d\ufeff]/g, '')); + if (url.protocol !== 'https:' || url.hostname !== 'mp.weixin.qq.com' || url.port || url.username || url.password || !/^\/(s(?:\/|$)|s$)/.test(url.pathname)) { + throw new Error('请输入 https://mp.weixin.qq.com/s/… 或 /s?… 微信文章地址。'); + } + url.hash = ''; + return url.href; + } + function cleanText(value) { + return String(value || '').replace(/\s+/g, ' ').trim(); + } + function metadata(html) { + const doc = new DOMParser().parseFromString(html, 'text/html'); + const text = selector => cleanText(doc.querySelector(selector)?.textContent); + const meta = selector => cleanText(doc.querySelector(selector)?.getAttribute('content')); + // 与下载组件一致,先确认是真正的文章,避免把验证页标题当成文章。 + if (!doc.querySelector('#js_content')) throw new Error('未找到微信文章正文,可能需要验证、登录,或文章已失效。'); + const title = text('#activity-name .js_title_inner') || text('#activity-name') || meta('meta[property="og:title"]') || meta('meta[name="twitter:title"]') || text('h1') || text('title'); + // 不读取 rich_media_meta_text 容器:它可能包含重复的隐藏作者,或实际上是日期/IP。 + // 来源使用蓝色链接 #js_name 的公众号名称,不使用灰色署名作者。 + const author = text('#js_name'); + if (!title || !author) throw new Error('微信未返回完整标题和公众号名称,可能需要验证或登录。'); + return { title, author }; + } + function fetchMetadata(url) { + return new Promise((resolve, reject) => { + GM_xmlhttpRequest({ + method: 'GET', url, timeout: 25000, anonymous: true, + onload(response) { + try { + if (response.status !== 200) throw new Error('微信返回状态 ' + response.status); + if (response.finalUrl && new URL(response.finalUrl).hostname !== 'mp.weixin.qq.com') throw new Error('微信地址发生了非预期跳转。'); + resolve(metadata(response.responseText)); + } catch (error) { reject(error); } + }, + onerror: () => reject(new Error('无法读取微信文章。')), + ontimeout: () => reject(new Error('读取微信文章超时。')) + }); + }); + } + async function getMetadata(url) { + try { return await fetchMetadata(url); } + catch (error) { + const title = prompt(error.message + '\n请从源文章复制完整标题(取消则停止导入):'); + if (title === null) return null; + const author = prompt('请填写源文章蓝色链接处的公众号名称(取消则停止导入):'); + if (author === null) return null; + if (!cleanText(title) || !cleanText(author)) throw new Error('标题和作者不能为空。'); + return { title: cleanText(title), author: cleanText(author) }; + } + } + function editorBody() { + return document.querySelector('#e_iframe')?.contentDocument?.body; + } + async function ensureVisualEditor() { + const checkbox = document.querySelector('#e_switchercheck'); + if (checkbox?.checked) checkbox.click(); + await waitFor(() => visible(document.querySelector('#e_iframe')) && editorBody()); + } + // 只监听本次现有采集器的响应,不重写其请求或图片附件处理。 + function watchImport(jq, url) { + let timer, resolveResult, rejectResult; + const result = new Promise((resolve, reject) => { resolveResult = resolve; rejectResult = reject; }); + const events = jq(document); + const cleanup = () => { clearTimeout(timer); events.off('.dww11wx'); }; + const finish = error => { cleanup(); error ? rejectResult(error) : resolveResult(); }; + events.on('ajaxComplete.dww11wx', (_event, xhr, settings) => { + let requestURL, sentURL; + try { + requestURL = new URL(settings.url, location.href); + sentURL = typeof settings.data === 'string' ? new URLSearchParams(settings.data).get('url') : settings.data?.url; + } catch { return; } + if (requestURL.origin !== location.origin || requestURL.searchParams.get('id') !== 'wxcj:cj' || sentURL !== url) return; + const parts = String(xhr.responseText || '').split('----wxcj----'); + if (xhr.status < 200 || xhr.status >= 300 || parts.length < 4 || !parts[2]?.trim()) { + finish(new Error('网站采集失败或返回内容不完整。未执行排版,请检查采集提示。')); + return; + } + finish(); + }); + timer = setTimeout(() => finish(new Error('网站采集超过90秒,未执行排版。采集器仍可能在后台返回,请勿连续重复导入。')), 90000); + return { result, cleanup }; + } + // 将微信 P/SECTION 的隐式换行改成真实 BR,避免论坛忽略 SECTION 边界。 + function flattenParagraphs(body) { + const selector = 'p,div,section,article,figure,figcaption,h1,h2,h3,h4,h5,h6'; + const marker = () => { + const br = body.ownerDocument.createElement('br'); + br.dataset.dww11Boundary = '1'; return br; + }; + for (const block of Array.from(body.querySelectorAll(selector)).reverse()) { + if (block.closest('table,ul,ol,blockquote')) continue; + block.replaceWith(marker(), ...block.childNodes, marker()); + } + let previous = false, pending = []; + function finish() { + const actual = pending.filter(br => !br.hasAttribute('data-dww11-boundary')); + let retained = false; + for (const br of pending) { + if (!br.hasAttribute('data-dww11-boundary')) continue; + if (previous && !actual.length && !retained) { br.removeAttribute('data-dww11-boundary'); retained = true; } + else br.remove(); + } + pending = []; + } + const walker = body.ownerDocument.createTreeWalker(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT); + const nodes = []; while (walker.nextNode()) nodes.push(walker.currentNode); + for (const node of nodes) { + if (node.nodeType === 1 && node.tagName === 'BR') pending.push(node); + else if ((node.nodeType === 3 && node.textContent.trim()) || (node.nodeType === 1 && ['IMG', 'VIDEO', 'HR', 'IFRAME'].includes(node.tagName))) { + finish(); previous = true; + } + } + // 末尾不保留由容器边界制造的额外换行。 + for (const br of pending) if (br.hasAttribute('data-dww11-boundary')) br.remove(); + } + function spaceImages(body) { + let previous = null, gapNodes = [], blankLines = 0; + const changes = []; + function content(kind, node) { + if (previous && previous.kind !== kind) { + let anchor = node; + while (anchor.parentElement && anchor.parentElement !== body && + !['TD', 'TH', 'LI', 'BLOCKQUOTE'].includes(anchor.parentElement.tagName) && !anchor.parentElement.contains(previous.node)) anchor = anchor.parentElement; + changes.push({ anchor, nodes: gapNodes.slice(), count: Math.max(2, blankLines) }); + } + previous = { kind, node }; gapNodes = []; blankLines = 0; + } + function visit(node) { + if (node.nodeType === 3) { + if (node.textContent.trim()) content('text', node); else gapNodes.push(node); + return; + } + if (node.nodeType !== 1 || ['SCRIPT', 'STYLE', 'NOSCRIPT'].includes(node.tagName)) return; + if (node.tagName === 'BR') { gapNodes.push(node); blankLines++; return; } + if (node.tagName === 'IMG') { content('image', node); return; } + for (const child of node.childNodes) visit(child); + } + for (const child of body.childNodes) visit(child); + for (const { anchor, nodes, count } of changes) { + for (const node of nodes) node.remove(); + const fragment = body.ownerDocument.createDocumentFragment(); + for (let i = 0; i < count; i++) fragment.append(body.ownerDocument.createElement('br')); + anchor.parentNode.insertBefore(fragment, anchor); + } + } + function formatBody(body, author, sourceText = null) { + const doc = body.ownerDocument; + body.querySelectorAll('[data-dww11-wx-source="1"]').forEach(el => el.remove()); + // Discuz 会把内联 color 值直接转为 [color=…]。 + // !important 不能出现在该值中;颜色和字号只用原生 FONT 属性。 + for (const el of [body, ...body.querySelectorAll('*')]) { + if (['SCRIPT', 'STYLE'].includes(el.tagName)) continue; + for (const property of ['font', 'font-size', 'color', '-webkit-text-fill-color']) { + el.style.removeProperty(property); + } + // 其他排版属性也不保留 CSS 优先级,避免它泄漏进论坛标签。 + for (const property of Array.from(el.style)) { + if (el.style.getPropertyPriority(property)) { + el.style.setProperty(property, el.style.getPropertyValue(property)); + } + } + if (!el.style.cssText) el.removeAttribute('style'); + } + // 去掉采集器或旧版脚本生成的嵌套 FONT,保留其中的内容和图片。 + for (const font of Array.from(body.querySelectorAll('font'))) { + font.replaceWith(...font.childNodes); + } + flattenParagraphs(body); + spaceImages(body); + // 所有正文内容和换行放在同一 FONT 中。不能使用只有 BR 的空 FONT: + // 论坛转换器可能清除空格式标签,导致空行退回默认1号或直接丢失。 + const articleFont = doc.createElement('font'); + articleFont.size = '4'; articleFont.color = '#000000'; + articleFont.dataset.dww11WxBody = '1'; + articleFont.append(...body.childNodes); + body.append(articleFont); + // A 自身的浏览器默认蓝色会覆盖外层继承色,链接文字另设黑色。 + for (const link of articleFont.querySelectorAll('a')) { + const linkFont = doc.createElement('font'); + linkFont.size = '4'; linkFont.color = '#000000'; + linkFont.append(...link.childNodes); link.append(linkFont); + } + // 只用于编辑器图片适配;帖子展示仍交给网站原有图片/附件规则。 + for (const img of articleFont.querySelectorAll('img')) { + img.style.maxWidth = '100%'; img.style.height = 'auto'; + } + const source = doc.createElement('p'); + source.dataset.dww11WxSource = '1'; + const font = doc.createElement('font'); + font.size = '1'; font.color = '#c0c0c0'; + const lines = (sourceText ?? `来源:${author},如有侵权,请联系删除。`).split('\n'); + lines.forEach((line, index) => { + if (index) font.append(doc.createElement('br')); + font.append(doc.createTextNode(line)); + }); + source.append(font); body.append(source); + } + function existingSource(body) { + // 按段落和 BR 读取末尾逻辑行,兼容嵌套 FONT、纯文本及末尾空段落。 + const lines = []; + let parts = []; + function flush() { + const text = cleanText(parts.map(part => part.node.textContent.slice(part.start, part.end)).join('')); + if (text) lines.push({ text, parts }); + parts = []; + } + function visit(node) { + if (node.nodeType === 3) { + // 保留文本中的显式换行,并记录精确位置,避免删除同容器中的正文。 + const value = node.textContent; + let start = 0; + for (let i = 0; i <= value.length; i++) { + if (i !== value.length && value[i] !== '\n') continue; + // HTML 缩进换行通常只是空白;只有后续是来源或版权行才分行。 + if (i < value.length && !/^\s*(?:(?:来源|文章来源|本文来源|图文来源|文字来源|作者|作者信息|来源作者|转自|转载自|出处)\s*[::]|如有侵权|若有侵权|侵权请|转载请|版权归)/.test(value.slice(i + 1))) continue; + if (i > start) parts.push({ node, start, end: i }); + if (i < value.length) flush(); + start = i + 1; + } + return; + } + if (node.nodeType !== 1 || ['SCRIPT', 'STYLE', 'NOSCRIPT'].includes(node.tagName)) return; + if (node.tagName === 'BR') { flush(); return; } + if (['IMG', 'VIDEO', 'AUDIO', 'IFRAME', 'HR'].includes(node.tagName)) { + flush(); lines.push({ text: '\ufffc', parts: [] }); return; + } + const block = /^(P|DIV|SECTION|ARTICLE|FIGURE|FIGCAPTION|H[1-6]|LI|TR|BLOCKQUOTE|PRE)$/.test(node.tagName); + if (block) flush(); + for (const child of node.childNodes) visit(child); + if (block) flush(); + } + for (const child of body.childNodes) visit(child); + flush(); + let first = -1; + for (let i = lines.length - 1; i >= 0; i--) { + if (/^(?:来源|文章来源|本文来源|图文来源|文字来源|作者|作者信息|来源作者|转自|转载自|出处)\s*[::]\s*\S/.test(lines[i].text)) { + first = i; + } else if (!/^(?:如有侵权|若有侵权|侵权请|转载请|版权归)/.test(lines[i].text)) { + break; + } + } + if (first < 0) return null; + const start = lines[first].parts[0]; + const range = body.ownerDocument.createRange(); + range.setStart(start.node, start.start); + range.setEnd(body, body.childNodes.length); + return { + text: lines.slice(first).map(line => line.text).join('\n'), + remove: () => range.deleteContents() + }; + } + async function runFormat(button) { + if (busy) return; + setBusy(true); + try { + await ensureVisualEditor(); + const body = editorBody(); + const source = existingSource(body); + const hasText = cleanText(body.textContent).replace(source ? cleanText(source.text) : '', '').trim(); + if (!hasText && !body.querySelector('img,video,audio,iframe,hr,table')) { + throw new Error('正文为空,请先输入或粘贴文章。'); + } + const raw = source ? '' : prompt('未在文末检测到来源/作者信息,请补充来源公众号名称(取消则停止排版):'); + if (raw === null) return; + const author = cleanText(raw); + if (!source && !author) throw new Error('来源公众号名称不能为空。'); + button.textContent = '正在排版…'; + // 已有来源保留原文,仅调整字号颜色;没有时才生成来源行。 + source?.remove(); + formatBody(body, author, source?.text ?? null); + alert(`排版完成。\n正文:4号黑色;来源:1号银色。\n${source ? source.text : `来源:${author}`}\n请人工检查后自行决定是否保存或发布。`); + } catch (error) { alert('排版未完成:' + error.message); } + finally { + setBusy(false); + button.textContent = '一键排版'; + } + } + async function run(button) { + if (busy) return; + const raw = prompt('粘贴微信公众号文章 URL:'); + if (raw === null || !raw.trim()) return; + setBusy(true); + let watcher; + try { + const url = normalizeURL(raw); + const jq = unsafeWindow.myJQ; + if (typeof jq !== 'function' || !jq.fn?.on) throw new Error('没有找到网站微信采集器的 myJQ,请刷新页面后重试。'); + const plugin = document.querySelector('#e_controls .wxcj'); + if (!plugin) throw new Error('当前页面没有微信采集组件。'); + button.textContent = '读取标题和作者…'; + const info = await getMetadata(url); + if (!info) return; + const subject = document.querySelector('#subject'); + if (!subject) throw new Error('没有找到标题框。'); + if (subject.maxLength > 0 && info.title.length > subject.maxLength) throw new Error('完整标题超过标题框长度限制,请先处理标题长度。'); + await ensureVisualEditor(); + button.textContent = '采集文章中…'; + plugin.click(); + const input = await waitFor(() => Array.from(document.querySelectorAll('.wxjc-dialog input')).find(visible)); + const submit = input.closest('.wxjc-dialog').querySelector('.wxjc-subimt'); + if (!submit) throw new Error('没有找到采集按钮。'); + input.value = url; + input.dispatchEvent(new Event('input', { bubbles: true })); + input.dispatchEvent(new Event('change', { bubbles: true })); + watcher = watchImport(jq, url); + // 先登记失败处理,避免点击失败时留下未处理的 Promise。 + watcher.result.catch(() => {}); + submit.click(); + await watcher.result; + button.textContent = '正在排版…'; + const body = await waitFor(() => editorBody()?.innerHTML.trim() && editorBody()); + formatBody(body, info.author); + subject.value = info.title; + subject.dispatchEvent(new Event('input', { bubbles: true })); + subject.dispatchEvent(new Event('change', { bubbles: true })); + subject.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true })); + // 正文保持在可视化编辑器,由网站正常提交流程转成 BBCode。 + // 不把 HTML 写入纯文本 message,也不调用任何保存/发布入口。 + alert(`导入并排版完成。\n标题:${info.title}\n作者:${info.author}\n正文:4号黑色;来源:1号银色。\n请人工检查后自行决定是否保存或发布。`); + } catch (error) { alert('导入未完成:' + error.message); } + finally { + watcher?.cleanup(); + setBusy(false); + button.textContent = '一键导入微信公众号并排版'; + } + } + function mount() { + const toolbar = document.querySelector('#e_controls'); + if (!toolbar || !document.querySelector('#subject')) return; + const style = 'position:relative;z-index:2;padding:0 12px;height:32px;line-height:30px;border:1px solid #159447;border-radius:4px;background:#159447;color:white;font-size:13px;cursor:pointer;'; + // 右浮动的同一组内使用 flex,保证排版按钮始终位于导入按钮左侧。 + let group = document.getElementById('dww11-wx-actions'); + if (!group) { + group = document.createElement('span'); + group.id = 'dww11-wx-actions'; + group.style.cssText = 'float:right;display:inline-flex;align-items:center;gap:8px;margin:6px 8px;'; + toolbar.append(group); + } + if (!document.getElementById(FORMAT_ID)) { + const button = document.createElement('button'); + button.id = FORMAT_ID; button.type = 'button'; + button.textContent = '一键排版'; button.style.cssText = style; + button.disabled = busy; + button.addEventListener('click', () => runFormat(button)); + group.prepend(button); + } + if (toolbar.querySelector('.wxcj') && !document.getElementById(ID)) { + const button = document.createElement('button'); + button.id = ID; button.type = 'button'; + button.textContent = '一键导入微信公众号并排版'; button.style.cssText = style; + button.disabled = busy; + button.addEventListener('click', () => run(button)); + group.append(button); + } + } + mount(); + const observer = new MutationObserver(mount); + observer.observe(document.documentElement, { childList: true, subtree: true }); +})(); diff --git a/dww11_make_package.py b/dww11_make_package.py new file mode 100644 index 0000000..13afdc2 --- /dev/null +++ b/dww11_make_package.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +"""Build a portable v1 article package for the DWW11 userscript (standard library only).""" +from __future__ import annotations + +import argparse +import base64 +import json +import mimetypes +from pathlib import Path + + +def make_package(directory: str | Path, markdown: str | None = None) -> dict: + """Return JSON-serializable data; no network access or publishing side effects.""" + root = Path(directory).expanduser().resolve(strict=True) + if not root.is_dir(): + raise ValueError("文章目录不存在") + choices = sorted(path for path in root.rglob("*") if path.is_file() and path.suffix.lower() == ".md") + if markdown: + selected = (root / markdown).resolve(strict=True) + elif len(choices) == 1: + selected = choices[0].resolve() + else: + raise ValueError("目录必须包含一个 Markdown 文件,或通过 --markdown 指定目录内相对路径") + if not selected.is_relative_to(root) or selected.suffix.lower() != ".md" or not selected.is_file(): + raise ValueError("Markdown 必须位于所选文章目录内") + images = [] + # Package local supported images. The importer uploads only those referenced by Markdown. + for path in sorted(root.rglob("*")): + if not path.is_file() or path.suffix.lower() not in {".jpg", ".jpeg", ".png", ".gif"}: + continue + if not path.resolve().is_relative_to(root): + raise ValueError(f"图片符号链接指向目录外:{path.name}") + if not 0 < path.stat().st_size < 20 * 1024 * 1024: + raise ValueError(f"图片为空或达到 20 MB:{path.name}") + images.append({"path": path.relative_to(root).as_posix(), + "mime": mimetypes.guess_type(path.name)[0] or "application/octet-stream", + "base64": base64.b64encode(path.read_bytes()).decode("ascii")}) + return {"schemaVersion": 1, "markdownPath": selected.relative_to(root).as_posix(), + "markdown": selected.read_text(encoding="utf-8-sig"), "images": images} + + +def main() -> None: + parser = argparse.ArgumentParser(description="把文章目录打包为油猴脚本可导入的 JSON;不上传或发布") + parser.add_argument("directory", help="包含 Markdown 和图片的目录") + parser.add_argument("--markdown", help="多个 Markdown 时指定目录内的相对路径") + parser.add_argument("-o", "--output", help="输出文件路径;未指定时输出到标准输出") + args = parser.parse_args() + try: + content = json.dumps(make_package(args.directory, args.markdown), ensure_ascii=False, indent=2) + if args.output: + output = Path(args.output).expanduser() + # Never silently overwrite an article or an existing package. + with output.open("x", encoding="utf-8") as handle: + handle.write(content + "\n") + print(json.dumps({"ok": True, "package": str(output.resolve())}, ensure_ascii=False)) + else: + print(content) + except (OSError, ValueError) as error: + parser.exit(1, f"打包失败:{error}\n") + + +if __name__ == "__main__": + main() diff --git a/wechat_official_acc_article_downloader/README.md b/wechat_official_acc_article_downloader/README.md new file mode 100644 index 0000000..9bba3a9 --- /dev/null +++ b/wechat_official_acc_article_downloader/README.md @@ -0,0 +1,89 @@ +# 网页文章离线下载 + +使用 uv 管理 Python 环境和依赖(Python 3.10 或更新版本)。将 `download_article.py` 与 `requirements.txt` 放在同一个目录,并确保已安装 uv。 + +## 安装与运行 + +在这两个文件所在目录打开终端,执行: + +```sh +uv run --no-project --python 3.12 --with-requirements requirements.txt python download_article.py 'https://mp.weixin.qq.com/s/Jcu2J5YlaMdxbAUgLMd56A' +``` + +uv 会自动准备 Python 3.12 和所需依赖,无需手动创建或激活虚拟环境。后续运行相同命令即可复用缓存。依赖继续通过 `requirements.txt` 管理,无需创建 `pyproject.toml`。 + +默认在**运行命令时的当前目录**创建文章目录,也可以用 `-o /你的/保存目录` 指定父目录。 + +```text +当前目录/ +└── 文章标题/ + ├── 文章标题.md + ├── image001.png + └── image002.jpg +``` + +图片后缀按实际文件内容判断;同一地址的图片只下载一次。正文中的图片引用使用相对路径,离线阅读时请保留整个目录。支持微信的延迟加载图片和行内 CSS 背景图,保留常见的标题、段落、列表、链接、表格等 Markdown 格式;公众号的复杂视觉排版不会原样复刻。 + +Markdown 开头不添加原文链接和作者/公众号信息,文章末尾统一追加 `来源:公众号作者,如有侵权,请联系删除。`。无法获取公众号作者时使用“未知作者”。接口返回的 `source_url` 仍保留,方便调用方追踪来源。 + +文件名中系统不允许的字符会替换为 `_`,过长标题会截短。已有同名目录时创建 `文章标题 (2)/文章标题 (2).md`,不会覆盖已有内容。 + +## 其他任务通过命令行调用 + +```sh +uv run --no-project --python 3.12 --with-requirements requirements.txt python download_article.py 'https://mp.weixin.qq.com/s/Jcu2J5YlaMdxbAUgLMd56A' --json +``` + +也可以从标准输入读取单个 JSON 请求: + +```sh +printf '%s' '{"url":"https://mp.weixin.qq.com/s/Jcu2J5YlaMdxbAUgLMd56A","output_root":".","timeout":30,"allow_missing_images":false}' | uv run --no-project --python 3.12 --with-requirements requirements.txt python download_article.py --stdin-json +``` + +每次进程处理一个网址。JSON 模式下,标准输出只有一个 JSON 对象,路径均为绝对路径。调用方应解析 JSON,不要依赖错误消息的具体文字。 + +成功返回退出码 `0`: + +```json +{ + "ok": true, + "title": "文章标题", + "source_url": "https://example.com/article", + "directory": "/完整路径/文章标题", + "markdown": "/完整路径/文章标题/文章标题.md", + "images": ["/完整路径/文章标题/image001.png"], + "warnings": [] +} +``` + +失败返回退出码 `1`: + +```json +{"ok": false, "error": "错误说明", "error_type": "ArticleDownloadError"} +``` + +命令行参数格式错误由 argparse 返回退出码 `2`,说明写入标准错误。`--stdin-json` 使用 JSON 中的参数,不使用其他命令行下载选项。 + +## 其他 Python 任务直接调用 + +将脚本放入调用方的 Python 模块搜索路径,并在调用方的 uv 环境中安装本脚本 `requirements.txt` 所列依赖后: + +```python +from download_article import save_article + +result = save_article( + url="https://mp.weixin.qq.com/s/Jcu2J5YlaMdxbAUgLMd56A", + output_root=".", + timeout=30, + allow_missing_images=False, +) +saved_directory = result.directory # 已保存文件所在目录(绝对路径字符串) +print(saved_directory) +# 完整结果可调用 result.to_dict() +``` + +函数失败时抛出异常,调用方可自行捕获。默认任何图片失败都会终止保存并清理半成品。若只希望尽量保存正文,可传 `allow_missing_images=True` 或命令行添加 `--allow-missing-images`,失败图片会替换为文字提示,详情写入 `warnings`。 + +微信可能返回验证、登录或失效页面,脚本会报告未找到正文,不会绕过访问限制。普通网页使用 article/main/body 提取,不适用于必须执行 JavaScript 才出现正文的页面。原文中的外链仍需联网,文章文字及成功下载的图片可离线查看。 + +如果接口对外提供服务,请由调用方限制网址及重定向目的地,只允许可信站点;此脚本本身允许访问运行机器能连接的 HTTP 地址。 diff --git a/wechat_official_acc_article_downloader/download_article.py b/wechat_official_acc_article_downloader/download_article.py new file mode 100644 index 0000000..df35f3b --- /dev/null +++ b/wechat_official_acc_article_downloader/download_article.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +"""下载微信/普通网页文章为 Markdown。Python 接口:save_article(url, output_root='.')。""" + +from __future__ import annotations + +import argparse +import base64 +from dataclasses import asdict, dataclass +import json +from pathlib import Path +import re +import shutil +import sys +import tempfile +from urllib.parse import unquote, urljoin, urlsplit + +import requests +from bs4 import BeautifulSoup +from markdownify import markdownify +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry + + +class ArticleDownloadError(RuntimeError): + """页面不是文章、图片下载失败等可向调用方报告的错误。""" + + +@dataclass +class ArticleResult: + title: str + source_url: str + directory: str + markdown: str + images: list[str] + warnings: list[str] + + def to_dict(self) -> dict: + return asdict(self) + + +def safe_name(title: str) -> str: + """跨平台目录/文件名;目录名与其中 Markdown 的文件名保持一致。""" + name = re.sub(r'[<>:"/\\|?*\x00-\x1f\x7f]', '_', title) + name = re.sub(r'\s+', ' ', name).strip(' .') + # 同时限制 UTF-8 字节数,给 .md 和重名后缀保留空间。 + name = name.encode('utf-8')[:180].decode('utf-8', errors='ignore').rstrip(' .') + if not name: + name = '未命名文章' + if re.fullmatch(r'(?i:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\..*)?', name): + name = '_' + name + return name + + +def _session() -> requests.Session: + session = requests.Session() + session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + }) + retry = Retry(total=3, backoff_factor=0.6, + status_forcelist=[429, 500, 502, 503, 504], allowed_methods=['GET']) + session.mount('https://', HTTPAdapter(max_retries=retry)) + session.mount('http://', HTTPAdapter(max_retries=retry)) + return session + + +def _get(session: requests.Session, url: str, timeout: float, limit: int, + referer: str | None = None) -> tuple[bytes, str, str]: + if urlsplit(url).scheme not in ('http', 'https'): + raise ArticleDownloadError(f'不支持的下载地址:{url[:200]}') + headers = {'Referer': referer} if referer else {} + with session.get(url, timeout=(min(timeout, 15), timeout), + headers=headers, stream=True) as response: + response.raise_for_status() + chunks, size = [], 0 + for chunk in response.iter_content(65536): + size += len(chunk) + if size > limit: + raise ArticleDownloadError(f'文件超过大小限制({limit // 1024 // 1024} MB):{url[:200]}') + chunks.append(chunk) + return b''.join(chunks), response.headers.get('Content-Type', ''), response.url + + +def _image_ext(data: bytes, mime: str) -> str: + if data.startswith(b'\xff\xd8\xff'): + return '.jpg' + if data.startswith(b'\x89PNG\r\n\x1a\n'): + return '.png' + if data.startswith((b'GIF87a', b'GIF89a')): + return '.gif' + if data[:4] == b'RIFF' and data[8:12] == b'WEBP': + return '.webp' + if len(data) >= 12 and data[4:8] == b'ftyp' and data[8:12] in (b'avif', b'avis'): + return '.avif' + if b' str: + for attr in ('data-src', 'data-original', 'data-actualsrc', 'data-lazy-src', 'src'): + value = img.get(attr) + if value and str(value).strip(): + return str(value).strip() + srcset = img.get('data-srcset') or img.get('srcset') + if srcset: + return str(srcset).split(',')[-1].strip().split()[0] + return '' + + +def save_article(url: str, output_root: str | Path = '.', *, timeout: float = 30, + allow_missing_images: bool = False) -> ArticleResult: + """返回绝对路径。默认任意图片失败即报错,不留下半成品;已有目录不会被覆盖。 + + allow_missing_images=True 时,失败图片被替换为文字占位,并记入 warnings。 + 网络/HTTP 错误可能抛出 requests.RequestException,文章错误抛出 ArticleDownloadError。 + 调用方应只传入可信的公开网页 URL(本函数允许访问调用机器能访问的 HTTP 地址)。 + """ + if not isinstance(url, str) or urlsplit(url).scheme not in ('http', 'https') or not urlsplit(url).hostname: + raise ValueError('url 必须是完整的 http:// 或 https:// 地址') + if timeout <= 0: + raise ValueError('timeout 必须大于 0') + if not isinstance(allow_missing_images, bool): + raise ValueError('allow_missing_images 必须是布尔值') + with _session() as session: + raw, content_type, final_url = _get(session, url, timeout, 20 * 1024 * 1024) + if content_type and not any(t in content_type.lower() for t in ('html', 'xhtml', 'text/plain')): + raise ArticleDownloadError('网址返回的不是 HTML 网页') + # 微信为 UTF-8;普通网页由 HTML 的 charset 标记/BeautifulSoup 自动识别。 + soup = BeautifulSoup(raw, 'html.parser') + is_wechat = urlsplit(url).hostname == 'mp.weixin.qq.com' + content = soup.select_one('#js_content') + if is_wechat and content is None: + raise ArticleDownloadError('未找到微信文章正文,可能需要验证、登录,或文章已失效。请在浏览器中确认链接可访问。') + if content is None: + content = soup.select_one('article') or soup.select_one('main') or soup.body + if content is None: + raise ArticleDownloadError('网页没有可保存的正文') + title_tag = soup.select_one('#activity-name') or soup.select_one('h1') + title_meta = soup.select_one('meta[property="og:title"]') + title = (title_tag.get_text(' ', strip=True) if title_tag else '') + title = title or (title_meta.get('content', '').strip() if title_meta else '') + title = title or (soup.title.get_text(' ', strip=True) if soup.title else '') or '未命名文章' + for tag in content.select('script, style, noscript, iframe, form, button'): + tag.decompose() + # 部分微信排版把插图放在行内 CSS 背景中,也转为普通图片参与下载。 + for tag in list(content.find_all(style=True)): + for match in re.finditer(r'url\(\s*[\'\"]?(.*?)[\'\"]?\s*\)', str(tag['style'])): + source = match.group(1).strip() + if source and not source.startswith('#'): + background = soup.new_tag('img', src=source, alt='') + tag.insert(0, background) + if not content.get_text(strip=True) and not content.find('img'): + raise ArticleDownloadError('文章正文为空,可能需要浏览器执行 JavaScript') + for link in content.find_all('a', href=True): + href = str(link['href']).strip() + if href and not href.startswith('#'): + absolute = urljoin(final_url, href) + if urlsplit(absolute).scheme in ('http', 'https', 'mailto', 'tel'): + link['href'] = absolute + else: + del link['href'] + + root = Path(output_root).expanduser().resolve() + root.mkdir(parents=True, exist_ok=True) + stage = Path(tempfile.mkdtemp(prefix='.article-', dir=root)) + images, warnings, downloaded = [], [], {} + try: + for img in list(content.find_all('img')): + source = _image_source(img) + if not source: + img.replace_with(soup.new_string('[图片缺少下载地址]')) + if not allow_missing_images: + raise ArticleDownloadError('正文中存在没有下载地址的图片') + warnings.append('正文中存在没有下载地址的图片') + continue + image_url = urljoin(final_url, source) + try: + if image_url not in downloaded: + if source.startswith('data:image/'): + header, payload = source.split(',', 1) + data = base64.b64decode(payload, validate=True) if ';base64' in header else unquote(payload).encode() + mime = header[5:].split(';')[0] + if len(data) > 50 * 1024 * 1024: + raise ArticleDownloadError('内嵌图片超过 50 MB') + else: + data, mime, _ = _get(session, image_url, timeout, 50 * 1024 * 1024, final_url) + ext = _image_ext(data, mime) + filename = f'image{len(images) + 1:03d}{ext}' + (stage / filename).write_bytes(data) + images.append(filename) + downloaded[image_url] = filename + # 清除懒加载/响应式属性,使转换器只引用本地文件。 + alt = str(img.get('alt') or '') + img.attrs = {'src': downloaded[image_url], 'alt': alt} + except (requests.RequestException, ArticleDownloadError, ValueError) as exc: + if not allow_missing_images: + raise ArticleDownloadError(f'图片下载失败:{image_url[:200]};{exc}') from exc + warnings.append(f'图片下载失败:{image_url[:200]};{exc}') + img.replace_with(soup.new_string(f'[图片下载失败:{img.get("alt") or "未命名图片"}]')) + + body = markdownify(str(content), heading_style='ATX', bullets='-', + strip=['picture', 'source']).strip() + # 微信富文本中各段常没有标准 p 标签;markdownify 仍会保留文字和图片顺序。 + author_tag = soup.select_one('#js_name') + date_tag = soup.select_one('#publish_time') + author = author_tag.get_text(' ', strip=True) if author_tag else '' + author = author or '未知作者' + metadata = [] + if date_tag and date_tag.get_text(strip=True): + metadata.append(f'发布时间:{date_tag.get_text(" ", strip=True)}') + text = f'# {title}\n\n' + if metadata: + text += '\n\n'.join(metadata) + '\n\n---\n\n' + text += body + f'\n\n来源:{author},如有侵权,请联系删除。\n' + basename = safe_name(title) + # 原子认领新目录,支持多个进程并发保存同名文章。 + index = 1 + while True: + name = basename if index == 1 else f'{basename} ({index})' + destination = root / name + try: + destination.mkdir() + break + except FileExistsError: + index += 1 + try: + (stage / f'{name}.md').write_text(text, encoding='utf-8') + for item in stage.iterdir(): + shutil.move(str(item), destination / item.name) + except BaseException: + shutil.rmtree(destination, ignore_errors=True) + raise + return ArticleResult(title, url, str(destination), str(destination / f'{name}.md'), + [str(destination / x) for x in images], warnings) + finally: + shutil.rmtree(stage, ignore_errors=True) + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('url', nargs='?', help='文章网址') + parser.add_argument('-o', '--output-root', default='.', help='保存到此目录下,默认当前目录') + parser.add_argument('--timeout', type=float, default=30, help='每次网络请求超时秒数') + parser.add_argument('--allow-missing-images', action='store_true', help='允许图片失败,保留文字与失败提示') + parser.add_argument('--json', action='store_true', help='向标准输出写入 JSON,便于其他任务调用') + parser.add_argument('--stdin-json', action='store_true', help='从标准输入读取一个 JSON 请求,并返回 JSON') + args = parser.parse_args() + json_mode = args.json or args.stdin_json + try: + if args.stdin_json: + payload = json.load(sys.stdin) + if not isinstance(payload, dict): + raise ValueError('JSON 请求必须是对象') + unknown = set(payload) - {'url', 'output_root', 'timeout', 'allow_missing_images'} + if unknown: + raise ValueError(f'未知参数:{", ".join(sorted(unknown))}') + if 'url' not in payload: + raise ValueError('JSON 请求缺少 url') + result = save_article(**payload) + else: + if not args.url: + raise ValueError('请提供网址,或使用 --stdin-json') + result = save_article(args.url, args.output_root, timeout=args.timeout, + allow_missing_images=args.allow_missing_images) + if json_mode: + print(json.dumps({'ok': True, **result.to_dict()}, ensure_ascii=False)) + else: + print(result.directory) + for warning in result.warnings: + print(f'警告:{warning}', file=sys.stderr) + return 0 + except Exception as exc: + if json_mode: + print(json.dumps({'ok': False, 'error': str(exc), 'error_type': type(exc).__name__}, ensure_ascii=False)) + else: + print(f'下载失败:{exc}', file=sys.stderr) + return 1 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/wechat_official_acc_article_downloader/requirements.txt b/wechat_official_acc_article_downloader/requirements.txt new file mode 100644 index 0000000..4d42bf4 --- /dev/null +++ b/wechat_official_acc_article_downloader/requirements.txt @@ -0,0 +1,3 @@ +requests>=2.32,<3 +beautifulsoup4>=4.12,<5 +markdownify>=1.1,<2 diff --git a/wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image001.jpg b/wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cc11db33bed3f2c0a5134f14737c2732f20779c GIT binary patch literal 67662 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]NSTqC|r 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 z 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 M3 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 P%5;)ULP;c$dVl}fZHm4s literal 0 HcmV?d00001 diff --git a/wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image003.jpg b/wechat_official_acc_article_downloader/为什么年轻人爱玩手机,背后的真相太无奈!/image003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cc11db33bed3f2c0a5134f14737c2732f20779c GIT binary patch literal 67662 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]NSTqC|r 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 z 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 E*` 当成标题。 +- 来源名称:只读取蓝色链接 `#js_name` 的公众号名称,不使用灰色 `#js_author_name` 署名作者或作者元数据。缺失时提示手动填写公众号名称。 +- 正文:工具栏的 4 档字号,使用原生 HTML `font size="4"`,不再附加18px样式,避免网站转换时字号错档,统一黑色。保留图片、段落、链接、粗体等结构。 +- 末尾追加:`来源:<作者>,如有侵权,请联系删除。`,使用原生 `font size="1" color="#c0c0c0"`,即1档字号和截图中的银色。 +- 如果当前处于纯文本模式,导入前自动切到可视化模式,完成后保持可视化,交由网站原有提交流程转换正文。 +- 采集会按网站原有方式替换当前标题、正文,并处理图片附件;这不是追加导入。 + +## 验证范围与失败处理 + +已只读检查 Chrome 中网站的工具栏、采集插件代码、标题框和字号菜单。未在真实网站上运行导入、保存或发表。 + +本地模拟页验证通过:按钮→URL输入→调用现有采集组件→等待成功响应→修正完整标题→正文4号黑色→来源1号银色;图片、链接和粗体保留。模拟页使用虚构采集响应,并不访问微信或网站采集接口。 + +已对照用户提供的微信 F12 页面结构和 `wechat_official_acc_article_downloader/download_article.py` 的解析方式。实际结构解析结果为完整标题“为什么年轻人爱玩手机,背后的真相太无奈!”和作者“老赵讲道理”,作者不重复。11项离线解析回归测试和完整模拟导入流程均通过。解析前还会检查 `#js_content`,避免把验证页误认为文章。 + +本次浏览器安全策略阻止读取微信源页面,因此微信网络请求尚未做真实联网验证。微信验证页、登录要求、网络限制或页面结构变化都可能使自动读取失败。这时脚本会提示手动填写完整标题和作者,取消任一步则停止后续采集。 + +采集失败、返回格式异常或超时,不继续排版。网站采集器自身可能已改动编辑器;脚本不保证撤销网站采集操作。超过90秒时原采集器仍可能返回,先确认状态再重试,避免重复采集。 + +微信正文及图片导入能力沿用网站插件,脚本不负责修复网站插件自身的遗漏或失效。标题仍须符合网站长度限制,脚本不自动截断标题。 + +## 1.0.3 手机端排版字符修复 + +旧版在正文颜色样式中使用了 `!important`,网站转换为论坛代码时会生成类似 `[color=#000 !important]` 的无效标签,手机版可能将其直接显示。新版清理正文内联字号/颜色样式及其他样式优先级,展开嵌套 FONT,只用 `font size="4" color="#000000"` 设置正文、`font size="1" color="#c0c0c0"` 设置来源,避免污染论坛代码。 + +更新脚本不能自动修复已经保存的帖子。受影响的文章需要在编辑页面重新导入,再由用户自行检查和保存。没有自动修改、保存或发布现有帖子。 + +## 1.0.4 图片间距 + +正文文字与图片相邻时,自动补足一个空白行(两个换行)。识别已有 BR 和段落边界,不重复增加已有空行;文字、图片和段落的顺序保持不变。 + +## 1.0.5 图片上下空行修正 + +修正图片容器末尾 BR 会被折叠而使图片下方没有空行的问题。图文间的换行移至下一段内容开头,使用 `
` 表示纯换行,不插入空格或 NBSP,并清理图文间原有的占位空格。行内图文保留两个 BR,独立块图文补一行;已有较多换行保留。 + +## 1.0.6 连续4号字体与手机排版 + +不再使用仅含 BR 的空 FONT。正文、图片及图文间的两个 BR 全部位于同一个连续的 `font size="4" color="#000000"` 内,来源仍单独使用1号银色。将微信段落容器的隐式边界转成真实 BR,避免 SECTION 边界被忽略;不插入空格或 NBSP。图片在编辑器内限制最大宽度并保持比例。 + +新增桌面820px和手机375px宽度的本地检查,以及 HTML→论坛标签→HTML 的简化模拟转换检查;这不是网站真实提交流程的验证。安装新版后需重新导入,已有文章不会自动改写。 + +## 1.0.7 来源名称修正 + +来源标识改为 `#js_name` 蓝色链接的公众号名称。例如公众号为“室内设计师有料儿”、灰色署名作者为“粉条条”时,末尾显示“来源:室内设计师有料儿,如有侵权,请联系删除。”。缺少公众号节点时提示人工填写,不回退到署名作者。1.0.6 的字体、段落和图片间距处理保持原样。 diff --git a/本地文章导入脚本使用说明.md b/本地文章导入脚本使用说明.md new file mode 100644 index 0000000..22292c2 --- /dev/null +++ b/本地文章导入脚本使用说明.md @@ -0,0 +1,123 @@ +# 广谈大湾网本地文章导入 + +主脚本:`dww11-article-importer.user.js`,版本 1.0.0。单文件、无第三方运行依赖,可本地安装,也可自行提交到 Greasy Fork。本次没有替你安装或提交到 Greasy Fork。 + +## 安装和首次测试 + +1. 在 Chrome 中准备好 Tampermonkey(油猴)扩展。 +2. 打开 Tampermonkey 的管理面板,选择“添加新脚本”,删除默认模板,把 `dww11-article-importer.user.js` 的全部内容粘贴进去并保存。也可以使用扩展自身的文件导入功能导入这个 `.user.js` 文件。 +3. 打开或刷新 `https://www.dww11.com/forum.php?mod=post&action=newthread&fid=95`,保持登录状态。右下角应出现“本地文章导入 · 1.0”面板。 +4. 点击“选择文章目录”,选择整个 `为什么年轻人爱玩手机,背后的真相太无奈!` 文件夹。这个文件夹里应同时包含 `.md` 文件和三张 JPG,不要只选 Markdown。 +5. 面板会显示标题、正文原文预览、三张图片缩略图。这一步只读取本地文件,不上传图片、不填写网页。 +6. 点击“上传配图并填写”。这一步才会向广谈大湾网上传被正文引用的图片,随后填写标题、正文,尽可能切回网站富文本模式显示配图。 +7. 检查正文三处图片位置和末尾来源说明。脚本不点击“发表帖子”或“保存草稿”。实际发表仍由你操作。 + +浏览器若提示将所选文件夹的文件提供给网页,这是目录选择器的正常提示。脚本只发送被正文引用且通过检查的图片,不会将整个目录打包上传到网站。 + +如果看不到面板,先检查扩展是否已启用、是否允许在该网站运行脚本,以及当前页是否为 `action=newthread` 的新发帖页面。本版不在编辑旧帖或快速回复页运行。Tampermonkey/Chrome 若提示启用用户脚本支持,按扩展界面中的指引设置。 + +## 支持范围和失败处理 + +- 支持整个目录和子目录;一个目录中有多个 Markdown 时出现下拉选择框。 +- 标题取 Markdown 开头第一个 `# 标题`;无标题时取文件名。开头标题不会再插入正文。上限 80 字,超限会停止。 +- 支持正文段落、内联本地图片、常见加粗/斜体/删除线、链接、标题、基本列表、引用和代码块。内联代码保留文字;多层列表会简化为一层。表格和原始 HTML 按文字保留并给出提示,复杂公众号视觉样式不复刻。引用式 Markdown 图片/链接暂不支持,会报错。 +- 图片必须用 `![](image001.jpg)` 这类相对路径引用;支持子目录、空格及常见括号路径。远程图片、目录外路径、缺图、空文件、达到 20 MB 或网站不支持的后缀会在上传前拦截。当前站点支持 JPG/JPEG/PNG/GIF。 +- 只上传被当前文章引用的图片。相同内容按 SHA-256 去重,即使文件名不同也复用附件编号,正文每个引用位置仍然保留。 +- 这篇测试文章有三个图片引用,其中 `image001.jpg` 与 `image003.jpg` 的文件内容相同,因此预计只需要上传两个独立文件,但正文应显示三处图片。 +- 当前编辑器已有内容时先询问是否替换。上传期间又修改正文时,在填写前再询问。导入期间临时禁用网页提交按钮。 +- 图片上传或网站图片列表加载失败时,标题与正文不会被替换;已上传的图片仍在网站上。当前页面内重试会复用已成功返回附件编号的图片。刷新页面后缓存失效;上传超时可能是“服务器成功、客户端未收到结果”,此时先检查网站图片列表,避免重复上传。 +- 网站自带的编辑器自动保存可能在填写后继续运行。本脚本不关闭或改动网站自动保存设置,也不承诺页面完全无草稿痕迹。 +- “导出诊断”生成本地 JSON,包含阶段、文件路径、标题和附件编号等排错信息,不包含 Cookie、上传凭证或正文。需要反馈时可把这个文件交给维护者。 + +## 给下载程序的接口 + +浏览器页面提供 `window.DWW11Importer`,接口版本 1。读取文章、上传适配和面板各自分开,后续可替换输入来源;无需重写 Markdown 与附件插入逻辑。 + +```javascript +// 暂存浏览器已获准读取的文件。只检查与预览,不上传。 +await window.DWW11Importer.stageFiles(fileList); +// 多个 Markdown 时可直接指定其 webkitRelativePath: +await window.DWW11Importer.stageFiles(fileList, { + markdownPath: '文章目录/文章.md' +}); + +// 暂存文章包,同样不上传。推荐外部程序对接此接口。 +await window.DWW11Importer.stagePackage(articlePackage); + +// 显式执行“上传配图并填写”;不会发布。 +const result = await window.DWW11Importer.importPrepared(); +// result: { title, images: { 'image001.jpg': '附件编号' }, completedAt } +// 取消替换时返回 { cancelled: true };失败时 Promise reject。 + +window.DWW11Importer.getState(); // busy / ready / title / imageCount / warnings / result +window.DWW11Importer.getBackup(); // 最近一次填写前的标题、正文及模式(仅存在内存) +window.DWW11Importer.openPicker(); // 应从用户点击事件调用,打开目录选择器 + +window.addEventListener('dww11-importer:progress', event => { + console.log(event.detail); // { phase, message, completed?, total? } +}); +``` + +`stageFiles` 返回准备完成的摘要;目录有多个 Markdown 且未指定文件时返回 `{ candidates: [...] }` 并等待选择。`stagePackage` 返回摘要。`getBackup()` 的 `mode: 0` 表示论坛纯文本格式,`mode: 1` 表示编辑器 HTML;不要直接当 Markdown 使用。 + +没有提供自动监听外部网页消息、后台轮询本地目录、直接读取任意本地路径或自动发表接口。其他本地程序需通过文章包文件、浏览器扩展或自动化工具把文件内容送进上述接口。浏览器普通网页不能凭一个本地路径字符串读取硬盘。 + +### 文章包格式 + +```json +{ + "schemaVersion": 1, + "markdownPath": "文章.md", + "markdown": "# 标题\n\n正文\n\n![](images/01.jpg)", + "images": [ + { + "path": "images/01.jpg", + "mime": "image/jpeg", + "base64": "这里是文件的纯Base64内容,不含data前缀" + } + ] +} +``` + +所有路径相对于所选文章目录,图片相对于 Markdown 文件位置解析。可选 `title` 显式指定标题。浏览器内直接调用时,图片条目也可传 `{ path, blob: File或Blob }` 代替 Base64。 + +### 本地打包工具 + +`dww11_make_package.py` 使用 Python 标准库,无需额外安装依赖。 + +在 `dww11自动化` 目录执行: + +```sh +python3 dww11_make_package.py \ + 'tests/fixtures/article' \ + -o '测试文章.dww11.json' +``` + +再点击油猴面板的“导入文章包”,选择输出的 JSON。此功能是未来程序对接的补充;日常操作仍推荐直接选择整个文章目录。 + +- 不加 `-o` 时,标准输出就是文章包 JSON,方便其他程序解析。 +- 加 `-o` 时,标准输出为 `{ "ok": true, "package": "绝对路径" }`;不覆盖已有文件。 +- 多个 Markdown 时,用 `--markdown '子目录/文章.md'` 指定。 +- 文件打包失败退出码为 1;参数用法错误为 2。 + +现有下载程序返回的 `directory` 可以直接传给打包工具: + +```python +from dww11_make_package import make_package + +# download_result 是原下载器返回的结果对象 +article_package = make_package(download_result.directory) +# 后续由调用方保存为 JSON,或把 article_package 交给浏览器 stagePackage。 +``` + +这个工具仅打包本地数据,不会自动连接浏览器或发表文章。包文件含完整正文和图片,保留在你自己的电脑上即可。 + +## 验证记录与边界 + +离线测试使用项目自有测试文章,覆盖正文逐字保留、三处图片顺序、去重、缺图与路径检查、文章包接口、上传失败、富文本转换失败回滚,以及“只有图片上传请求、没有发表请求”。运行: + +```sh +node --test test-dww11-importer.cjs +``` + +网站适配依据当前页面和网站公开的 WebUploader、编辑器代码编写,上传参数在运行时从当前页面读取,未写入账号或凭证。本次未安装油猴脚本,也未进行真实网站上传;最终在线兼容性需由你首次测试确认。如果网站以后更换编辑器或上传协议,应更新适配部分。