📝

Bookmarkletを使ってWEBページをOGP画像付きでScrapboxにクリッピングする

2023/01/23に公開

最近Scrapboxを使い始めました ✨

そこで見ているページをScrapboxにクリップしたいなと思っていたところ、公式がBookmarkletとして用意してくれているようでした。

参考: http://hokoxjouhou.blog105.fc2.com/blog-entry-2222.html

ただし、公式のBookmarkletはOGP画像を取得してくれなかったので、OGP画像を取得し本文に表示するようにしてみました。
(あとページタイトルはdocument.titleで充分なのでそこも一旦そのまま)

(function () {
  var project = "tamanugi";
  var title = document.title;
  var lines = ["[" + window.location.href + " " + document.title + "]"];
  var ogImage = document.querySelector("meta[property='og:image']");
  if (ogImage) {
    lines.push("");
    lines.push("[" + ogImage.getAttribute("content") + "]");
  }
  var quote = window.getSelection().toString();
  if (quote.trim())
    lines = lines.concat(
      quote.split(/\n/g).map(function (line) {
        return " > " + line;
      })
    );
  lines.push("");
  var body = encodeURIComponent(lines.join("\n"));
  window.open(
    "https://scrapbox.io/" + project "/" +
      encodeURIComponent(title.trim()) +
      "?body=" +
      body
  );
})();

主に追加した部分は以下のところですね。単純にmetaタグから画像のURLを取得しているだけになります。

  var ogImage = document.querySelector("meta[property='og:image']");
  if (ogImage) {
    lines.push("");
    lines.push("[" + ogImage.getAttribute("content") + "]");
  }

上記のコードは整形していますが、Bookmarkletとして機能させる場合は1行にして、更にURLエンコードしておいたほうが無難です。

もし使われる場合は下記をご利用ください🙇‍♂️

javascript:%21function%28%29%7Bvar%20p%3D%22ここにプロジェクト名を入れる%22%2Ct%3Ddocument.title%2Ce%3D%5B%22%5B%22%2Bwindow.location.href%2B%22%20%22%2Bdocument.title%2B%22%5D%22%5D%2Co%3Ddocument.querySelector%28%22meta%5Bproperty%3D%27og%3Aimage%27%5D%22%29%3Bo%26%26%28e.push%28%22%22%29%2Ce.push%28%22%5B%22%2Bo.getAttribute%28%22content%22%29%2B%22%5D%22%29%29%3Bvar%20n%3Dwindow.getSelection%28%29.toString%28%29%3Bn.trim%28%29%26%26%28e%3De.concat%28n.split%28%2F%5Cn%2Fg%29.map%28function%28t%29%7Breturn%22%20%3E%20%22%2Bt%7D%29%29%29%2Ce.push%28%22%22%29%3Bvar%20r%3DencodeURIComponent%28e.join%28%22%5Cn%22%29%29%3Bwindow.open%28%22https%3A%2F%2Fscrapbox.io%2F%22%2Bp%2B%22%2F%22%2BencodeURIComponent%28t.trim%28%29%29%2B%22%3Fbody%3D%22%2Br%29%7D%28%29%3B

Discussion