それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

大阪市立図書館のログインを楽にするUser.JS

大阪市立図書館のログインは非常に厄介です。ブラウザがうまく記憶してくれません。
しかも、大阪市立図書館は各区図書館毎にカードが発行され、各区図書館毎に予約しなくちゃ行けない。ネットで使うととても不便でした。

大阪市立図書館の特徴

  • 大阪市立図書館は中央図書館+各区図書館で構成されている
    • 大阪【市立大学】の図書館は別カード
    • 大阪【府立】図書館とは別
  • 利用カードはひとりで複数枚持つことが出来る。
  • 利用カードは各図書館で一枚作ることが出来る。
  • カードは各図書館で相互利用が可能
    • 予約は登録図書館で
    • 北区図書館で予約した本は北区図書館で受け取る。
    • 予約受け取りのために複数カードが当たり前
  • 大阪市民以外も利用可能
  • 遅い時間までやってて便利(平日は午後8時半まで)→開館時間
  • その他
    • 教科書も借りられる。
    • 市大連携
    • [大阪市立大学]利用者は[市立図書館]蔵書取寄せが可能(無料で
    • 【府立大学】も場合により可能

大阪市立図書館の良い点

  • 蔵書多い、とにかく多い。雑誌もとにかく多い
  • 駅から近い。
  • 雨に濡れずに行ける
  • 自習室充実

大阪市立図書館の駄目な点

  • WEB利用がめんどくさい

インターネットからの利用がとても面倒

インターネット利用を申し込むと3枚のカードが発行されます。

  1. 利用者カード
  2. WEBパスワード
  3. 乱数表


乱数表は名刺サイズのコピー用紙、パスワードは【感熱紙】です。困りますよね。

乱数表の所為でさらに煩雑になる。ログイン処理。

WEBから利用はとてもめんどくさい。銀行のような乱数表があるのでとてもめんどくさい。

  • IDとパスワードを入れる画面が別々
  • 乱数表がある

どういう事かというと。

IDとパスワードを入れる画面が別画面

→つまり、ブラウザがキチンと覚えない

乱数表がある

→毎回見なくちゃ行けない。

パスワードをメモっていても、乱数表で手間取るのです。しかも受け取り図書館毎にアカウントがあります。というかその都度、カード出すのも面倒

  • ID/PWの画面が別
  • 乱数表の存在
  • ひとりで複数アカウントが当たり前

という各種問題にぶち当たり、ブラウザやフォームの自動入力ソフトでは対応しきれないのです。そして、もちろんHTTPSなのでプロキシサーバでごまかす事も出来ません。


User.JSで問題を解決する。


アカウントを設定する

// ==UserScript==
// @include https://www.oml.city.osaka.jp/cgi-bin/internet/*
// ==/UserScript==
//このファイルの文字コードはUTF-8

//カードには、ID/パスワード/乱数表の三つがある。
//それぞれを以下のJSONに放り込んでおく

var cards=[
  {"library":"ふくしま","id":"53XXXXX20","pw":"9999",
   "code":{"A":"09","B":"93","C":"08","D":"02","E":"10","F":"27",
           "G":"57","H":"68","I":"25","J":"72"}},
  {"library":"市立中央","id":"10XXXX501","pw":"9999",
   "code":{"A":"11","B":"34","C":"73","D":"91","E":"61","F":"71",
           "G":"32","H":"54","I":"15","J":"11"}}
//共用関数
function check_login_cardnum(){
  id = document.forms[0].CARDNUM.value.slice(1,9)
  card = {}
  for(var i=0;i<cards.length;i++){
    if(id==cards[i]["id"].slice(0,8)){
      card = cards[i];
      return card;
    }
  }
}
]

ログイン画面でアカウントを選べるようにする

ログイン画面から複数選ぶ

// ==UserScript==
// @include https://www.oml.city.osaka.jp/cgi-bin/internet/opi_500.cgi*
// ==/UserScript==
//このファイルの文字コードはUTF-8
function show_my_login_button(){
  var html = document.forms[0].innerHTML
  for(var i=0;i<cards.length;i++){
    var input='<input value="'+cards[i]["library"]+'" type="button" onclick="document.forms[0].CARDNUM.value='+cards[i]["id"]+';">';
    html = input + html;
  }
  document.forms[0].innerHTML=html
}

document.addEventListener('DOMContentLoaded', function() {
  //実行したい処理
  show_my_login_button()
},false);

選んだアカウントのパスワードを入力する


パスワードを自動入力する

// ==UserScript==
// @include https://www.oml.city.osaka.jp/cgi-bin/internet/opi_501.cgi*
// ==/UserScript==
//このファイルの文字コードはUTF-8


function autoexec_passwd(){
  card = check_login_cardnum()
  var html = document.forms[0].innerHTML
  document.forms[0].innerHTML= "<div>"+card["library"]+"のパスワードを入力</div>"+html
  document.forms[0].PASWD.value = card["pw"]
}

document.addEventListener('DOMContentLoaded', function() {
  //実行したい処理
  autoexec_passwd()
},false);

最後に乱数表に自動入力する

// ==UserScript==
// @include https://www.oml.city.osaka.jp/cgi-bin/internet/opi_502.cgi*
// ==/UserScript==
//このファイルの文字コードはUTF-8

function auto_complete_code_area(){
  card = check_login_cardnum()
  var KIND1 = document.forms[0].PASS_KIND1.value
  var KIND2 = document.forms[0].PASS_KIND2.value
  document.forms[0].PASS_KEY1.value=card["code"][KIND1]
  document.forms[0].PASS_KEY2.value=card["code"][KIND2]
  
}


document.addEventListener('DOMContentLoaded', function() {
  ////実行したい処理
  auto_complete_code_area()
},false);


これでログイン画面から複数の図書館カードを選べるようになった。大阪市立図書館はシステムに金掛けるべきだよ。いや金掛けなくてもイイから、大阪市立大学の工学部の学生研修で安上がりで近代的なモノを作ってもらうべき。

でもって、こんな風に、便利にすることが「不正アクセス禁止法」の「管理者の意図しないアクセス」になるので不正アクセス禁止法ってめんどくさいなと思う。


図書サービスは、堺市、大阪市、大阪市立大、大阪府立大、大阪府で共有して欲しいなと思う。