あおしまの日記

あおしまさんの日記らしいです。個人的に興味がある事を時々書きます。スマートウォッチPebble日本語パックを作成、公開しています。

ScrapboxにInterWikiっぽいものを入れてみた

過去Wikiデータの再活用

別のscrapboxページに過去のWIkiデータをimportしたものを持っているのだが、その時点でInterWikiがリンクにならない事が不便であった。

aoshimak.hatenadiary.jp
aoshimak.hatenadiary.jp


特に、本の情報にAmazonのリンクと書影をつけていたのが、すぐ飛べない、書影が出てこないのがどうにも惜しい。そこで、とりあえずjavascriptってそれ何おいしいの?というレベルの自分ですが、UserScriptという仕組みを使ってそれっぽい事が出来るか挑戦してみた記録です。

InterWikiとは?

InterWikiとは、Wiki間の相互リンクを簡便化する仕組みです(でした)。例えば「Wikipedia:日本」と書き込むと、InterWikiNameページ内の定義リストを使って内部的に「URL+引数」に書き換えられたリンク( https://ja.wikipedia.org/wiki/日本 )が生成され、これをクリックすると当該ページに飛ぶ事ができた。他の用法としては、他WIkiのページに飛ぶときに、エンコードされたページ名を含むフルURL等だと可読性に乏しく、入力も楽になるために便利に使われた。

また個人的には、「URL+引数」の自動変換で他の一義的なリンクが生成できることから、検索や商品サイト等へのリンク、特に書籍が絡むメモでAmazonのページやGoogleの検索結果へのジャンプを積極活用していた。そうした補完を前提とした形式で記述された記録が手元に残っているが、scrapboxにはInterWikiのようなリンクの自動生成機能がないため、これをUserScriptで補うことで、昔の記録のリンク情報等を再活用したい。

コード

とりあえず、Amazonへのリンク変換を作ってみよう、ということで、右も左も分からないながら作ってみた。
前提として、以下のような記法のデータがあるものとする。Scrapbox内では[]で囲われているが該当するページは無いため、empty-page-linkである事が前提でコードを書いてある。

[Amazon:4-756-10120-8]

Scrapboxで動作させるには、自分ページを作り、そこにscript.jsとして貼り付け、リロードすることで、自分だけにScrapboxに作用するようになる。

現状では課題も多い(後述)

  $('a:contains(Amazon:).empty-page-link').each(function() {
  	//リンクからISBN番号を取得
     var str = $(this).attr('href').replace(".", "").replace("/", "").replace("-", "").replace(/Amazon:(.*)/g, "$1");
  
  	//AmazonのURLを生成
 		var amaurl = "http://www.amazon.co.jp/exec/obidos/ASIN/"+ str ;
 		var img = 'http://images-jp.amazon.com/images/P/'+str+'.09.TZZZZZZZ.jpg';
 	
 		var imgsrc = '<img class="image" src=' + img + ' >';
 		
     //上記で格納した文字列で上書き
     $(this).attr('href', amaurl);
     $(this).text('Amazon-'+str);
     // $(this).html(imgsrc);
 	});

課題

  • javascriptまだまだよくわからん
  • scrapboxの中身もよくわからん
    • これにまつわる事だが、リンク近くをクリックすると書き換えたリンクが元に戻ってしまう問題(重大)
  • 書影出せない問題
  • 他のInterWikiNameに拡張したいけど、汎用性を持たせられないか?
  • InterWikiNameのページを読み込んで、自動変換すれば完璧だが、今の自分にその技術はない。
  • Amazonの書影を取ってきて埋め込みたいが、ASIN一義で画像が取って来れなくなったので、敷居がすごく高くて自分では難しそう。
  • Amazonから書籍メモをscrapboxに貼り付けるbookmarkletのコードをどう活用すれば良いのだろうか?