Scrapboxページ内の全リンクを取得する
モチベーション
書籍プロジェクトとメインプロジェクトを分けた
読書メモのリンクだけはメインプロジェクトでも機能させたい
要件
[]で囲まれた文字列をすべて取得
画像やGyazoやYoutubeや外部リンクは取得しない
httpを含まないものにする
Scrapbox記法を除外
文末
.icon
文頭
[* ]
[$ a]
[\]
[- ]
これで大丈夫だ
code:js
// ==UserScript==
// @name Scrapbox Linked Texts Extractor with Context Menu
// @version 1.0
// @description Extract all linked texts from a Scrapbox page with brackets and copy to clipboard via context menu.
// @author You
// @grant GM_setClipboard
// @grant GM_registerMenuCommand
// ==/UserScript==
(function() {
'use strict';
// Function to extract project name and page title from URL
function extractProjectAndPage() {
const urlParts = window.location.pathname.split('/');
return { projectName: urlParts1, pageTitle: decodeURIComponent(urlParts2) }; }
// Function to fetch page data from Scrapbox API
async function fetchPageData(projectName, pageTitle) {
const response = await fetch(https://scrapbox.io/api/pages/${projectName}/${pageTitle});
return await response.json();
}
// Function to copy links to clipboard
function copyLinksToClipboard(links) {
const formattedLinks = links.map(link => [${link}]).join(', ');
GM_setClipboard(formattedLinks, 'text');
alert('Links copied to clipboard:\n' + formattedLinks);
}
// Main function to process page data
async function processPage() {
const { projectName, pageTitle } = extractProjectAndPage();
const pageData = await fetchPageData(projectName, pageTitle);
if (pageData && pageData.links) {
copyLinksToClipboard(pageData.links);
} else {
alert('No links found on this page.');
}
}
// Register the script in the context menu
GM_registerMenuCommand("Extract Links", processPage, 'e');
})();