ブログトップ 記事一覧 ログイン 無料ブログ開設

それはそれ。これはこれ。 このページをアンテナに追加 RSSフィード

2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2013 | 01 | 02 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2014 | 02 | 03 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 05 | 06 | 07 | 11 |
2016 | 07 |
2017 | 01 | 03 | 06 | 07 | 11 |
2018 | 05 |

2009-04-29(水)

[]Mechanizeの文字コード問題を何とかやっつけた Mechanizeの文字コード問題を何とかやっつけたを含むブックマーク Mechanizeの文字コード問題を何とかやっつけたのブックマークコメント

MechanizeがEUCのページ(mixiとか)をうまく解析してくれない件で、ずっと試行錯誤していたけど、思い立ってそのあたりのソースを追ってなんとか解決した。hookが用意してあるんだけど、そのhookにメソッドを追加する方法がわからないので、むりやり押し込む。それっぽい名前のhookなので、コード変換をやるとしたらここなんだろうと思う。

class WWW::Mechanize
    def set_hook
        @post_connect_hook.hooks << Proc.new do |params|
            params[:response_body] = NKF.nkf("-wm0",params[:response_body])
            params[:response]["Content-Type"]="text/html; charset=utf-8"
        end
    end
end

agent = WWW::Mechanize.new
agent.set_hook
page = agent.get("〜〜")とか

コード変換の自動認識がうまくいかない場合に備えて、nkfパラメータ入力文字コードを明示指定したほうがいいだろうが、上記コードでは省いた。


2009-07-11追記:

Mechanize0.9.3で文字コード認識改善され、この対処は不要に。


2009-11-25追記:

修正版が、id:otn:20091124 に。

2009-04-28(火)

[]Amazon+価格COM 別版 Amazon+価格COM 別版を含むブックマーク Amazon+価格COM 別版のブックマークコメント

id:otn:20090426 で書いた件で何をやっていたかというと、id:gigi-net:20090418:1240066430 で発表されたすごいアイデアAmazonで閲覧中の商品価格comから最低価格を取ってきて付加するGreasemonkeyスクリプト」を自分でも書いてみようと言うことです。最初に書いたのはこの日(4/18)でしたけど、すでに本家バージョンアップしてて(id:gigi-net:20090421:1240324155)、もう今更公開する意味はないかもしれないけど、せっかく書いたので公開しておきます。アイデアだけもらって独自コードです。


違いは、多分これくらい。

商品ページかどうかはURLパターンで判断

・型番がない場合は商品名で検索

・最低価格以外にメーカー名:商品名も出すので、誤検索の場合にそれとわかる

価格差は出さない

・見つからない場合は何も出さない


インストールはこちら⇒ http://homepage3.nifty.com/otn/amazonkakakucom.user.js


4/26で書いたように、Firefoxの場合は先にdocumentにappendしておけばtrのinnerHTMLにタグが書けるんだけど、appendより先にinnerHTMLをセットすると駄目というのが怪しいので、それはしないことにしました。


あと、価格欄の上に追加しようとしたら、なんと同じ id=priceBlock を持つdivが複数あるorz Amazonさん、非道いです。HTMLの基本ですよ。

しかも、見た限りでは2パターンある。

・priceBlockをそれぞれ含むpriceBlockTwister系が3つあり、そのうちpriceBlockTwisterだけがvisibleの場合

・priceBlockTwisterが無くてpriceBlockが1つだけの場合


課題としては、

商品ページのURLがこの2パターンで過不足無いか

・priceBlockまわりで他のパターンが無いか

検索で見つからないときの適当キーワードでのリカバリを考える・・・労力に見合うかどうか。多分しない

・誤検索を検知してなんとかリカバリする・・・ここまでする気は全くない


4/29追記

priceBlockTwisterの部分はマウスの動きで動的に書き換わることに気づいた。つまり、この中を書き換えてもマウスを動かすと消えてしまう。しょうがないので、テーブルの中に入れるのはあきらめて、その外に付けることにする。結果としてtrの追加じゃなくてdivの追加になり、直接innerHTMLを書き換えられるので簡単になった。テーブルじゃないのでコロンの横位置がずれるかと思ったけど、そうでもないので良かった。

下記はその変更版v1.1です。

// ==UserScript==
// @name           amazonkakakucom
// @version        1.1
// @namespace      http://d.hatena.ne.jp/otn/
// @description    Amazon+価格COM最安値
// @include        http://www.amazon.co.jp/*/dp/*
// @include        http://www.amazon.co.jp/gp/product/*
// ==/UserScript==
// http://homepage3.nifty.com/otn/amazonkakakucom.user.js
var key, proDiv, bTags, title;
// メーカー型番が書いてあればそれを
if((proDiv=document.getElementById("productDetailsDiv")) && (bTags=proDiv.getElementsByTagName("b"))){
	for(var i=0; i<bTags.length; ++i){
		if(bTags[i].textContent.substr(0,6)=="メーカー型番"){
			key=bTags[i].nextSibling.textContent;
			break;
		}
	}
}
// 書いてなければ商品タイトルを検索に使う
if(!key){
	if(title=document.getElementById("btAsinTitle")){
		key=title.textContent;
	}
}
if(key){
	GM_xmlhttpRequest({
		method:"GET", 
		url:"http://api.kakaku.com/Ver1.1/ItemSearch.aspx?SortOrder=pricerank"+
			"&Keyword="+encodeURIComponent(key),
		onload:doit
	});
}

function doit(resp){
	var root=document.createElement("div");
	root.innerHTML=resp.responseText;
	var priceTags=root.getElementsByTagName("LowestPrice");
	if(priceTags.length>0){
		var price=priceTags[0].textContent, wk;
		while(wk=price.replace(/([0-9]+)([0-9]{3})/,"$1,$2"), price!=wk) price=wk;
		var linkUrl=root.getElementsByTagName("ItemPageUrl")[0].textContent;
		var maker  =root.getElementsByTagName("MakerName"  )[0].textContent;
		var product=root.getElementsByTagName("ProductName")[0].textContent;
		var priceBlock=document.getElementById("priceBlock");
		var here;
		while(here=priceBlock.parentNode, here.nodeName!="TD") priceBlock=here;
		var div=document.createElement("div");
		div.innerHTML='<span class="priceBlockLabel">価格COM:</span>'+
		'<span><b class="priceLarge">¥'+price+'</b>'+
		'&nbsp;&nbsp;(<a href="'+linkUrl+'">'+maker+':'+product+'</a>)</span>';
		here.insertBefore(div,priceBlock);
	}
}

P.S.

本家改良版に書いてある金額へのカンマ付加のコード

while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));

参照元をたぐっていくと、最後はアダルトなページにww

JavaScriptで、演算子の左項が右項に先立って評価されるというのは言語仕様に書いてあるのだろうか?調べてないけど。

2009-04-26(日)

[]やられた やられたを含むブックマーク やられたのブックマークコメント

tbodyタグIDを付けておいて、Firefox3で下記のスクリプトを実行すると、

var x=document.getElementById("A");
var a=document.createElement("tr");
a.innerHTML="<td>AAAAAA</td>"; // ※1
x.appendChild(a);
var b=document.createElement("tr");
x.appendChild(b);
b.innerHTML="<td>BBBBBB</td>"; // ※2

結果として、

<table><tbody id="A">
<tr>AAAAAA</tr>
<tr><td>BBBBBB</td></tr>
</tbody></table>

という構造が出来る。※1の直後で alert(a.innerHTML) してみるとこの時点でtdタグ情報は消えている。※2の直後だとちゃんとtdの情報もある(当たり前)。


これはこういうものだろうか?と思って、IE7でやってみると、なんと※2がエラーになる。「未知の実行時エラーです」と。ググってみると、

TABLE と TFOOT と THEAD と TR 要素の innerHTML プロパティは、読み取り専用です。

やられた。そう言えばこの説明、以前に見たことあるけどすっかり忘れてました。


divにID="A"をつけておいて、下記を実行するとFirefox3でもIE7でも問題なし。うーむ。勉強になりました。

var x=document.getElementById("A");
var a=document.createElement("ol");
a.innerHTML="<li>AAAAAA</li>";
x.appendChild(a);
var b=document.createElement("ul");
x.appendChild(b);
x.lastChild.innerHTML="<li>BBBBBB</li>";

trタグなどをappendChildしたい場合は、innerHTMLにタグを書くんじゃなくてtdノードをappendChildしないといけない。

var x=document.getElementById("A");
var a=document.createElement("tr");
var b=document.createElement("td");
b.innerHTML="AAAAAA";
a.appendChild(b);
x.appendChild(a);

そもそも「innerHTML使うな」という話もあるだろうな。

2009-04-25(土)

[]一般ソフト脆弱性も教えてくれるKaspersky 一般ソフトの脆弱性も教えてくれるKasperskyを含むブックマーク 一般ソフトの脆弱性も教えてくれるKasperskyのブックマークコメント

スキャンを掛けてみるといくつか脆弱性が。どうもアプリ脆弱性も教えてくれるようで、情報ページに行くとバージョンアップしろと書いてある。

引っかかったのは、Adobe FlashVMware Server、Wireshark。それぞれバージョンアップ

あと、いくつかのDLL、OCXファイルも脆弱性として引っかかるが、場所からしてこれは使って無さそう。消していいものか。

C:\WINDOWS\SoftwareDistribution\Download\332d2b3cb45aedf9098161883a24dd36\msxml6.dll

C:\WINDOWS\WinSxS\x86_Microsoft.MSXML2_6bd6b9abf345378f_4.20.9848.0_x-ww_1b897e9a\msxml4.dll

C:\WINDOWS\WinSxS\x86_Microsoft.MSXML2_6bd6b9abf345378f_4.1.0.0_x-ww_b319d8da\msxml4.dll

C:\WINDOWS\SoftwareDistribution\Download\332d2b3cb45aedf9098161883a24dd36\flash.ocx


ああ、「除外オブジェクトに追加」も出来るのか。消すかどちらにするかはもうちょっと考えることにする。

トラックバック - http://d.hatena.ne.jp/otn/20090425

2009-04-23(木)

[]McAfeeからKasperskyに乗り換え McAfeeからKasperskyに乗り換えを含むブックマーク McAfeeからKasperskyに乗り換えのブックマークコメント

このところ、McAfeeアップデート時に、数分間他のプログラムがほとんど動かなくなる現象が出ている。以前はそんなこと無かったので、プログラムアップデートされたせいで悪くなった(CPUは上がってないので、何らかの排他ロックか?)と思われる。

来月に有効期限が切れることもあって、Kasperskyに乗り換えることにする。とりあえず試用版をインストールMcAfeeアンインストールしてから二回再起動しないといけないみたい。


値段は、McAfeeの3ライセンス版と、Kasperskyの1ライセンス版が同じくらいで、必要な2ライセンス版だと倍近い価格だけど、しょうがない。


フルスキャンししてみると・・・CPU使用率が跳ね上がる!コアを2つとも使って動作するようだ。しかも、affinity や priority の変更も出来ない。うーむスキャンを速く終わらせるという方針はいいとしても、コアは1つ空けておいて欲しい。まあ常時80-90%と言うわけでもないですが。

トラックバック - http://d.hatena.ne.jp/otn/20090423

2009-04-05(日)

[][]RD-X5ファームウェアアップデートIE7インストール RD-X5のファームウェアアップデートとIE7インストールを含むブックマーク RD-X5のファームウェアアップデートとIE7インストールのブックマークコメント

IE8も出たことだし、IE7に上げようかと。


問題は、IE7だとRD-X5EXの「ネットdeナビ」のダイジェスト認証が通らないこと。検索すると、アップデートモジュールが出ているようなので、まずはRD-X5ファームウェアアップデートから。まずはIE6で「ネットdeナビ」に入って、メンテナンス画面からアップデートを試みるが、「ダウンロード開始」をクリックすると、「ページが見つからない」という画面に。リンク切れか?と調べるがよくわからないので、RDダイアルに電話で問い合わせる。電話での問い合わせは初めてだ。原因は「Googleツールバーポップアップブロック」。ポップアップブロックと404エラー関係が直接的でないが、何らかのセキュリティーを掛けているのだろう。特定ハード専用のプログラムダウンロードにガードを掛ける理由がわからないが。

無事、アップデートが出来たので、次はIE7


WindowsUpdateで、非表示にしていた更新の復元でIE7を出して、アップデート。これも問題なし。。。かと思ったら、ワイヤレスネットワークが繋がらない。Wireless Zero Configurationのサービスが何故か止まっていたのが原因。自動になっているのでおかしいが、サービスを起動してワイヤレスネットワークを確認。念のためWindows再起動してみたがサービスは動いた。結局、原因不明。


その後、IE7 Proをインストール

トラックバック - http://d.hatena.ne.jp/otn/20090405