fc2ブログ

愛知を中心に東海圏と東京の写真をおさめます。

2023-12

便意きてる(古本探索グリモンスクリプト完成)

便意系エントリは過去にも何度か。

過去データや各種アプリの設定が吹っ飛んでしまったWin10インストール。
メインで使っているブラウザFirefoxも例に漏れず。

一番きついのは自作のスクリプトが無くなってしまったこと。
本を家に置かない。本を読むのは買えた時。という断捨離感、シンプルライフを実践しているので
そんな私にとってなくてはならないのがOnline古本屋での価格が容易に分かること。
それを先人の知恵と努力をお借りして以下エントリーのように使ってきました。

UN-POUND 古本価格が分かればいいのでGreasemonkeyを頑張った
UN-POUND Amazonで古本価格を調べるGreasemonky


久しぶりにプログラミング。久しぶりにjava、っていうかjavaスクリプト。
phpとかjavaとか、いわゆるワンライナーできるスクリプト言語は私の構造化プログラミング感覚とは相容れない。
ForEachとかやばい。

「ワンライナー」とは、たった1行だけのプログラムです。PerlやRubyを使うと、1行だけでもかなりの仕事ができます。 プログラムを書きたいが、エディタを起動するほどの手間はかけたくない、というときに威力を発揮します。達人ともなると、ちょっとした文字置換や計算をするワンライナーを、即興で作って使い捨てることもあります



でもがんばってjavaスクリプトの気持ち悪さを飲み込みながら先人のプログラムを理解する。

そんなとき。強烈な便意が。


よく本屋で立ち読みしていると便意きちゃっう話は聞く。
私の場合は以下2シチュエーション。

1.自分の考えや方針ではうまくいかないことがわかった瞬間
2.自分の考えや方針でうまくいった瞬間

一昨日からトイレに行く回数が倍増。
出すもん出してるから腹も減る。

おかげで良いスクリプトできました。

2015gm_script.png
 
便意からプログラミングを経由してGreasemonkeyスクリプトの話へ。
 
スポンサーサイト



古本価格が分かればいいのでGreasemonkeyを頑張った

表示しているページに自分で要素を削ったり足したりできるのがGreasemonkey。
言語はほぼjavascript。
基本的にC言語知っていればどんな言語でも応用は聞く。

台風が近づいてきている。
窓から入ってくる風はすごく冷たい。
そんな早朝、熱い珈琲をすすりながらプログラミング。


■動機
Amazon Cross Book Checkがいよいよ動かなくなった。
原因はAmazonがサイトの作りを変えたから。

ACBCはAmazonサイトに古本価格を表示するFirefox用拡張スクリプト。
参考:UN-POUND Amazonで古本価格を調べるGreasemonky


■やりたいこと
古本価格を知りたい。
一気に複数サイトから古本価格を取得したい。


■対象サイト
私が本の管理に利用させていただいているサイト。
読書管理ツール - Bookboard.jp
bookboardjpMain.png

bookboard-20141005.jpg


■結果
bookboard2-20141005.jpg
すぱらしいーーー!!
  
 

テーマ:プログラミング - ジャンル:コンピュータ

Amazonに古本価格を表示するGreasemonkyスクリプト

20140126AMZOFF.png


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万行もあるプログラムを理解するにはコードを読むしかないのか。
    動作だけならカチャカチャと適当にいじってそれらしい機能を探し出せるけど、細かい制限や仕様をどうやって把握するのか。となると、冒頭の通りコードを読むしかないのかな。

    コードを読まなくても問題が起こった時に読めばそれで事足りる、という判定を下すためにコードを読んで判定しなければいけない。トンチじみてる。

    コード共通化のメリットとデメリット。
    メリット:一箇所の修正で完了。
    デメリット:影響範囲が広がる。
    でも一般的にはメリットを選択しますよね、ソフトウェアなら。なーんで自動車まで共通化なんてことするんだろう。インスタンス一つ一つを修正することになるねんで。

     | ホーム | 

     

    プロフィール

    hid

    Author:hid
    お問い合せはコメント欄へ

    最新記事

    最新コメント

    最新トラックバック

    月別アーカイブ

    カテゴリ

    検索フォーム

    RSSリンクの表示

    リンク

    このブログをリンクに追加する

    QRコード

    QR

     

    にほんブログ村 自転車ブログへ
    にほんブログ村