2012年07月03日

2012 07.03 Tue


広告を削除する基本的なタグ

Webページサンプル
[PR] 100円

広告を消すためには、htmlソースから該当タグを見つけなければなりません。
広告を表示しないようにhtmlソースを書き換えるのが今回のProxomitronの仕事です。
htmlソース

<pre class='htmlsrc_prx'>
<a href='http://sample.co.jp/'>[PR] 100円</a>
</pre>
a要素は開始タグと終了タグで括るタイプの要素であり、括られた部分にリンクを貼ります。
従って、<a href='http://sample.adserver.co.jp/'>...</a> を削除すれば広告はなくなります。

さて、マッチさせたい文字列は見つけたわけですが、その後にどの文字列を中心にマッチさせるべきかを考えなければなりません。
もちろん、対象の文字列をそのまま書き出してマッチさせる手もありますが、それでは1つの広告を消せても、他の場所の広告を消せません。
できるだけ多くの広告を消せるように、表現を考える必要があります。

ポイントは ユニークな文字列 を見つけることです。
ユニークな文字列とは特徴的な文字列、この場合は、「広告を表す基盤となる文字列」を差します。
何をおいてもこれさえ見れば広告と読み取れる文字列を見つければいいのです。

では、「ユニークな文字列」には何があるでしょうか。
まず、a要素 はユニークです。
a要素を見ればアンカーの貼られている文字列だけに制限できます。
次に、a要素にあるhref属性値に記述されているURLもユニークな文字列の1つです。
Webサイト作成者はコンテンツを長く保つためにも、URLを変えることを嫌います。
URLを変えると、そのURLにリンクされている全てのページのソースを見直さなければならず、その点検作業が大変なものとなるからです。
「URL, ファイルパス」を示す属性値にマッチさせるのは賢い方法です。

以上を踏まえて検索表現(Match欄)を作成していくわけですが、今回はメタキャラクタ,マッチングコマンドを使っているので、以前と比べて難しく感じると思います。
順を追って説明していきますので、頑張って追いかけてください。

<a\s

a要素に制限するため、<a と記述します。
a要素にはhref属性が指定されているため、<a ...href= となる事は確実です。
ですので、半角スペースを保証する \s を追記します。

<a\s[^>]++href=

次にhref属性まで消費しなければならないわけですが、href属性はa要素の内に収まっていなければなりません。
href属性は <a で始まって、> で終わる文字列の中に存在しなければならないわけです。
そのために、[^>]++ を使います。
[^>] は文字クラスを用いており、「> ではない1文字」を示します。
そして、++ は後ろをみながら直前の文字を繰り返します。
href= が後ろにくるまで、「> ではない1文字」を繰り返すこととなり、href属性がa要素の内にあることを保証できます。
最後に、前後の空白を吸収してくれるメタキャラクタ = を追記します。

<a\s[^>]++href=$AV(http://sample.co.jp/)

$AV はクオートの有無に関わらず、属性値にマッチしてくれるマッチングコマンドです。
上のように書けば、

  • href='http://sample.co.jp/'
  • href='http://sample.co.jp/'
  • href=http://sample.co.jp/

のいずれにもマッチします。
URLと違って、クオートの修正はあり得ることですので、その時に備えて $AV を使用しておくのは良いことだと思います。

$NEST(<a\s[^>]++href=$AV(http://sample.co.jp/),</a>)

$NEST は 開始タグ, 終了タグ にマッチさせるためのマッチングコマンドです。
a要素 は 開始タグ, 終了タグ を内包しているので、$NEST を利用できます。

開始タグに相当する記述は前回のステップで書き終わったので、$NEST の start match にそれを記述します。
(開始タグを最後まで記述していませんが、$NEST は開始タグの後半の文字列を省いても動作するため、省略しています。)
次に inner match ですが、今回は中要素にユニークな文字列がないので省略します。
最後に、終了タグの </a> を記述すれば検索表現(Match欄)の完成です。

仕上げに、フィルタ名, URL欄 を埋めます。
以下は完成したフィルタをエクスポートしたものです。

[Patterns]
Name = "Kill <a> ad"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 256
Match = "$NEST(<a\s[^>]++href=$AV(http://sample.co.jp/),</a>)"

URL欄に初めてみるマッチングコマンドがあります。
$TYPE はページタイプを制限するものです。
$TYPE(htm) と書くことで、「Webページ」に制限することができます。
CSS ですとか JavaScript ですとか...そういう別種のページにマッチすることを防いでくれます。
慣れると頻繁に使うマッチングコマンドですので、これも覚えてしまってください。

Replace欄に何も書かれていなければ置換テキストが見つからず、結果として削除される事になるのです。

お疲れさまでした。
参考になりましたらソーシャルメディアで共有してくださいませ。
posted by こさめ
edit  re
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/278738380
※言及リンクのないトラックバックは受信されません。

■ この記事へのトラックバック
カテゴリ
インターネット>ブラウザ・WEBメール(24)
インターネット>Firefoxアドオン、設定(15)
インターネット>Proxomitronフィルター(32)
インターネット>ブログ、WEBサービス(53)
インターネット>アフィリエイト・ポイントサイト(27)
インターネット>楽天、ポイントあれこれ(5)
インターネット>Windows最適設定(32)
インターネット>インターネット設定(17)
インターネット>デスクトップ改造・拡張(7)
インターネット>セキュリティソフト(6)
ブログカスタマイズ>カテゴリー、記事一覧系(38)
ブログカスタマイズ>jQuery(Script)文字系(23)
ブログカスタマイズ>CSS(Script)デザイン(28)
ブログカスタマイズ>ブログパーツ(7)
ブログカスタマイズ>携帯モバイル系(3)
ブログカスタマイズ>SEO・アクセスアップ(31)
マルチメディア>Brackets(5)
マルチメディア>画像系ソフト(6)
マルチメディア>DVD・動画プレイヤー(15)
マルチメディア>動画編集ソフト(6)
マルチメディア>音楽再生プレイヤー(16)
マルチメディア>ネットラジオ配信・編集(3)
マルチメディア>P2Pテレビソフト(4)
マルチメディア>おもしろ動画・感動動画(25)
デザイン>フリー素材 画像(5)
デザイン>HP・ブログ フリー素材(6)
デザイン>イラスト(非素材)(8)
デザイン>作詞作曲編曲MP3(5)
雑記>PC部品・音楽機材(7)
雑記>映画・アニメ・漫画・芸能(14)
雑記>どうでもいい雑学知識(6)
雑記>ゲーム(6)
雑記>スマホ・携帯電話(6)
雑記>カーナビ・ETC(3)
雑記>ネット銀行とか(2)
雑記>18禁?ちょいエロネタ(3)

 (C) 2006 - kosame All rights.