便意きてる(古本探索グリモンスクリプト完成)
便意系エントリは過去にも何度か。
過去データや各種アプリの設定が吹っ飛んでしまったWin10インストール。
メインで使っているブラウザFirefoxも例に漏れず。
一番きついのは自作のスクリプトが無くなってしまったこと。
本を家に置かない。本を読むのは買えた時。という断捨離感、シンプルライフを実践しているので
そんな私にとってなくてはならないのがOnline古本屋での価格が容易に分かること。
それを先人の知恵と努力をお借りして以下エントリーのように使ってきました。
UN-POUND 古本価格が分かればいいのでGreasemonkeyを頑張った
UN-POUND Amazonで古本価格を調べるGreasemonky
久しぶりにプログラミング。久しぶりにjava、っていうかjavaスクリプト。
phpとかjavaとか、いわゆるワンライナーできるスクリプト言語は私の構造化プログラミング感覚とは相容れない。
ForEachとかやばい。
でもがんばってjavaスクリプトの気持ち悪さを飲み込みながら先人のプログラムを理解する。
そんなとき。強烈な便意が。
よく本屋で立ち読みしていると便意きちゃっう話は聞く。
私の場合は以下2シチュエーション。
1.自分の考えや方針ではうまくいかないことがわかった瞬間
2.自分の考えや方針でうまくいった瞬間
一昨日からトイレに行く回数が倍増。
出すもん出してるから腹も減る。
おかげで良いスクリプトできました。

便意からプログラミングを経由してGreasemonkeyスクリプトの話へ。
過去データや各種アプリの設定が吹っ飛んでしまったWin10インストール。
メインで使っているブラウザFirefoxも例に漏れず。
一番きついのは自作のスクリプトが無くなってしまったこと。
本を家に置かない。本を読むのは買えた時。という断捨離感、シンプルライフを実践しているので
そんな私にとってなくてはならないのがOnline古本屋での価格が容易に分かること。
それを先人の知恵と努力をお借りして以下エントリーのように使ってきました。
UN-POUND 古本価格が分かればいいのでGreasemonkeyを頑張った
UN-POUND Amazonで古本価格を調べるGreasemonky
久しぶりにプログラミング。久しぶりにjava、っていうかjavaスクリプト。
phpとかjavaとか、いわゆるワンライナーできるスクリプト言語は私の構造化プログラミング感覚とは相容れない。
ForEachとかやばい。
「ワンライナー」とは、たった1行だけのプログラムです。PerlやRubyを使うと、1行だけでもかなりの仕事ができます。 プログラムを書きたいが、エディタを起動するほどの手間はかけたくない、というときに威力を発揮します。達人ともなると、ちょっとした文字置換や計算をするワンライナーを、即興で作って使い捨てることもあります
でもがんばってjavaスクリプトの気持ち悪さを飲み込みながら先人のプログラムを理解する。
そんなとき。強烈な便意が。
よく本屋で立ち読みしていると便意きちゃっう話は聞く。
私の場合は以下2シチュエーション。
1.自分の考えや方針ではうまくいかないことがわかった瞬間
2.自分の考えや方針でうまくいった瞬間
一昨日からトイレに行く回数が倍増。
出すもん出してるから腹も減る。
おかげで良いスクリプトできました。

便意からプログラミングを経由してGreasemonkeyスクリプトの話へ。
スポンサーサイト
古本価格が分かればいいのでGreasemonkeyを頑張った
表示しているページに自分で要素を削ったり足したりできるのがGreasemonkey。
言語はほぼjavascript。
基本的にC言語知っていればどんな言語でも応用は聞く。
台風が近づいてきている。
窓から入ってくる風はすごく冷たい。
そんな早朝、熱い珈琲をすすりながらプログラミング。
■動機
Amazon Cross Book Checkがいよいよ動かなくなった。
原因はAmazonがサイトの作りを変えたから。
ACBCはAmazonサイトに古本価格を表示するFirefox用拡張スクリプト。
参考:UN-POUND Amazonで古本価格を調べるGreasemonky
■やりたいこと
古本価格を知りたい。
一気に複数サイトから古本価格を取得したい。
■対象サイト
私が本の管理に利用させていただいているサイト。
読書管理ツール - Bookboard.jp


■結果

すぱらしいーーー!!
言語はほぼjavascript。
基本的にC言語知っていればどんな言語でも応用は聞く。
台風が近づいてきている。
窓から入ってくる風はすごく冷たい。
そんな早朝、熱い珈琲をすすりながらプログラミング。
■動機
Amazon Cross Book Checkがいよいよ動かなくなった。
原因はAmazonがサイトの作りを変えたから。
ACBCはAmazonサイトに古本価格を表示するFirefox用拡張スクリプト。
参考:UN-POUND Amazonで古本価格を調べるGreasemonky
■やりたいこと
古本価格を知りたい。
一気に複数サイトから古本価格を取得したい。
■対象サイト
私が本の管理に利用させていただいているサイト。
読書管理ツール - Bookboard.jp


■結果

すぱらしいーーー!!
Amazonに古本価格を表示するGreasemonkyスクリプト

Amazonの書籍ページに古本価格を表示するFirefox系スクリプト。先人の力を借り作り上げています。
最近、通勤電車でのスマホいじりにも飽きてきたので、読書熱が再燃しております。5日間で1~3冊ペースで読んでいます。すると色んな本が欲しくなるのです。
以前にも同様のスクリプト公開の記事をエントリーしました→Amazonで古本価格を調べるGreasemonky 2012年の大晦日にこんなことやってたんだなぁシミジミ。あれから早1年が過ぎているんですねぇ。その間ももちろんAmazonにはアクセスし、そのたびに古本価格が表示されていたのですが、確かにここ最近は「在庫なし」で表示されることが多いなぁくらいには感じていました。が、まさか古本サイトがリニューアルし、スクリプトが対応できておらず、その結果としての「在庫なし」だったとはつゆ知らず。
のべ2日かかって改修しました。とくにBookOffOnlineには手こずりました。
// ==UserScript==
// @name Amazon Cross Book Mod
// @namespace http://alpha99.blog.fc2.com/
// @description online used book store lookup from Amazon.
// @include http://www.amazon.co.jp/*
// ==/UserScript==
var SITEINFO = [
{
label: 'BOOKOFF Online',
url: 'http://www.bookoffonline.co.jp/disp/CSfDispListPage_001.jsp?&st=u&q=',
regexp: /class=\"mainprice\">(.+)(税込)定価より/,
isbn13: true,
},
{
label: 'フルイチオンライン', //フルイチオンライン
url: 'http://www.furu1online.net/SearchItem?DISP_COUNT=20&PAGE_INDEX=1&PROP_ID_9200=2&FREE_WORD=',
regexp: /([\d,]+)<\/strong> /,
isbn13: true,
//disabled: true
},
{
label: 'NET OFF',
url: 'http://www.netoff.co.jp/cmdtyallsearch/hdnAllSearchFlg/1/Ctgry/*/LRack/*/SetFlg/0?SetFlg=&hdnContinueCmdtyList=&hdnContinueCode=&hdnPage=0&hdnFormId=cmdtyalllist&hdnStartIndex=0&hdnEndIndex=500&hdnNarrowCtgry=&hdnAllSearchFlg=&hdnNarrowFlg=&actionNameTxt=&subtotal=&word=',
//afterISBN: '&used=0&author=&genre=&size=&pricef=&pricet=&issuef=&issuet=&maker=&isbn=&sort=&desc=&used=0&pg=0&pagingData=&iStartPageNo=1&nowPageNo=1&hdnCmdtyCode0=0010046487',
regexp: /class=\"priceTrue\">[.\s\S]+li class=\"price mat5\">([\d,]+)/,
isbn13: true,
//disabled: true
},
]
//main
if (!document.body.parentNode.innerHTML.match(/ISBN\-13:<\/b>\s(\d{3})\-(\d{9}[\dX])<\/li>/))
return;
var isbn13 = RegExp.$1 + RegExp.$2;
//alert(isbn13);
var block = document.evaluate(
"//div[@id='priceBlock']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (!block)
return;
for(i = 0, len = SITEINFO.length; i < len; i++){
var siteinfo = SITEINFO[i];
getValue(isbn13, siteinfo);
}
/*
var siteinfo = SITEINFO[3];
getValue(isbn13, siteinfo);
*/
function getValue(isbn13, siteinfo){
GM_xmlhttpRequest({
method : 'GET',
url : siteinfo.url + isbn13, //'http://www.bookoffonline.co.jp/display/L001,st=u,q=' + isbn13,
//overrideMimeType: mimeType,
overrideMimeType:'text/plain; charset=shift-jis',
headers: {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:8.0.1) Gecko/20100101 Firefox/8.0.1", // If not specified, navigator.userAgent will be used.
},
onload : function(resp) {
//alert(resp.responseText)
var link = document.createElement('a');
link.setAttribute('target', '_blank');
link.setAttribute('href', siteinfo.url + isbn13); //'http://www.bookoffonline.co.jp/display/L001,st=u,q=' + isbn13);
link.setAttribute('title', siteinfo.label); //'To BOOKOFF Online');
link.innerHTML =
'
' +
'' +
'» [' +
(resp.responseText.match(siteinfo.regexp) //(/mainprice\">\uffe5([\d,]+)/)
? '\u2605\u5728\u5eab\u3042\u308a ' + RegExp.$1 + ' \u2605' : '\u5728\u5eab\u306a\u3057...') +
'] ' +
siteinfo.label + //'\u30d6\u30c3\u30af\u30aa\u30d5\u30aa\u30f3\u30e9\u30a4\u30f3\u3067\u4e2d\u53e4\u691c\u7d22' +
'';
block.parentNode.insertBefore(link, block.nextSibling);
}
});
}
!ご注意!
ご使用にあたって発生した障害は一切責任を負えません。
コード読解進め方
40万行もあるプログラムを理解するにはコードを読むしかないのか。
動作だけならカチャカチャと適当にいじってそれらしい機能を探し出せるけど、細かい制限や仕様をどうやって把握するのか。となると、冒頭の通りコードを読むしかないのかな。
コードを読まなくても問題が起こった時に読めばそれで事足りる、という判定を下すためにコードを読んで判定しなければいけない。トンチじみてる。
動作だけならカチャカチャと適当にいじってそれらしい機能を探し出せるけど、細かい制限や仕様をどうやって把握するのか。となると、冒頭の通りコードを読むしかないのかな。
コードを読まなくても問題が起こった時に読めばそれで事足りる、という判定を下すためにコードを読んで判定しなければいけない。トンチじみてる。