MendeleyでCiNiiから論文本文のPDFごとインポートする
皆様、あけましておめでとうございます。年末年始も卒論の執筆に追われています。
さて、表題どおり。これを実現出来たら論文管理がどれだけ楽になるでしょう。卒論提出したら実装する予定です。
追記 2014/1/13 卒論提出しましたので書き足しました
Mendeleyって?
「Mendeleyは学術論文の管理とオンラインでの情報共有を目的とした、デスクトップアプリケーションおよびウェブアプリケーションの引用管理ソフトウェアである」(Mendeley - Wikipediaより引用)
いわゆる文献管理ソフトです。公式サイトはこちら→Mendeley
で、このMendeleyでは、Webから論文をインポートするBookmarklet、「Web Importer」が提供されています→Mendeley Web Importer
論文の書誌ページを開いてワンクリックで、論文情報が取り込めます。Web Importerは本文PDFも同時にインポートする機能を備えているのですが、CiNiiだとそれが機能しません。それを可能にしたいというのがこの記事の趣旨です。
やり方
Web Importerの中身であるhttps://www.mendeley.com/minified/bookmarklet.js
を開いて中身を全てテキストエディタなどにコピペし、以下の通り文字列を検索し、それぞれ置き換えて下さい。
data.url=window.location.href;
→data.url='';
var source=removeScriptTag();
→ 削除var mendeleyHroot=source.match(/^https?:\/\/[^/]+/);
→var mendeleyHroot="https://www.mendeley.com";
- Drag the "Save To Mendeley" button to your Bookmarks Bar
という指示にしたがって、「Save To Mendeley」をお気に入りにバーに登録します。その後、登録したボタンを編集し、「URL」のところに以上で変更を加えたテキストをコピペすればおしまいです。
ワンクリックでPDFまで取り込めるようになります。
注意事項としては、CiNii以外のサイトではうまく動かない恐れがありますので、その場合は通常のWeb Importerをお使い下さい。また当然ですが、PDFが取得できるのはオープンアクセスのPDFが公開されている場合に限ります。
技術的な話(読まなくても良いです) ―― Web Importer の仕組みを理解する
Web Importerは、Mendeley の API を Javascript から叩いて、書誌情報ページのHTMLをまるっと Mendeley のサーバーにアップロードしているようです。自分が見ているHTMLをそのままアップロードするので、たとえログインしないと見られないようなページであってもインポートが可能になっています(詳しく動作を知りたい方はWeb Importerのソースを読んでみてね)。
PDFの取得
ただPDFだけは別で、PDFに対しては Mendeley のサーバーが直接アクセスし、取得を試みます。ですからPDFに直接アクセスすることが不可能だと(例えば会員制のサイトだったりすると)、Mendeleyはうまく取得することができません。
参考→Mendeley | The web importer isn't importing PD...
書誌情報の取得
また書誌情報は通常、meta要素により取得されています*1。
Mendeley Web Importer - Information for Publishers | Mendeleyのページにその詳細があり、論文本文のPDFをMendeleyに教えるためのコードは以下の通りです。
<meta name="citation_pdf_url" content="論文本文のPDF">
*2
書誌情報取得先の優先順位
加えて、Web Importerの説明ページによると、CiNiiについては公式にインポートをサポートしているようです。いろいろと実験してみたところ、公式にサポートされているサイト上の論文をインポートしようとした場合、こちらが送ったHTMLと実際のページ、両方ともMendeleyのサーバーが取得して、実際のページを優先して判断を行っているようです(したがって、ユーザーが送ってきたHTMLと実際のページに齟齬がある場合、実際のページが優先されます)。
以上をまとめると、MendeleyからPDFを直接インポートするために必要なことは以下の3点です。
- 本文PDFが直接アクセス可能である状態にあること
- 書誌情報ページに本文PDFへのリンクが指定してあること
- 書誌情報取得先の優先順位を考えてMendeleyにうまくこちらの望む書誌情報を取得させること
これらの条件をクリアするために、上記のように Javascript の書き換えたというわけです。詳しくは解説しませんが、ご要望があればまあ解説するかもしれません…
(ちなみにソースコードの解析から実現まで5時間くらいかかりました)
*1:そうでない場合もありますが、それはあまり本記事とは関係ないのでここでは割愛します。
*2:ちなみに、上記のページにはこのmetaタグが何故か書いてなかったので、東京大学のレポジトリに書かれていたmetaタグを参考にしました。東京大学のレポジトリからは、Mendeleyは論文本文のPDFごとインポート可能です。