初投稿です.
なにこれ
SUUMOで賃貸アパートを探していると,レオパレス物件ばかり出てきて嫌になりませんか?
私もSUUMOで検索するとレオパレス物件ばかり(しかも何部屋も募集があってスクロールが大変)だし、ネットには
インターネットが最悪!壁が薄すぎて隣人のいびきすら聞こえる!雨漏りする!天井が剥がれた!マナーが最悪!家具家電付きで相殺されないほどのマイナス!なんだかんだ全部足したら月費用普通に高い!
などのレビューがあふれています.
しかしSUUMOにNGワード機能はないらしいので,Greasy Forkでuserscript×2を作りました.
機能
- SUUMOの賃貸物件検索から物件名に "レオパレス"が含まれる物件 を除外 ⇒ SUUMOからレオパレス物件を除外(Exclude Leopalace from SUUMO)
- SUUMOの賃貸物件検索に 除外ワードを設定 し,物件名にそのワードが含まれる物件を除外 ⇒ SUUMOの賃貸物件検索に除外ワードを設定(SUUMO Chintai NG)
ができます.
使用方法
1.Tampermonkeyのインストール
まず使用ブラウザの拡張機能インストールページから Tampermonkey をインストールしてください.
ChromeならChrome ウェブストア,FirefoxならFirefoxアドオンからインストールできると思います.
2.Greasy Forkにアクセス
Greasy Fork(https://greasyfork.org/ja) にアクセスし「SUUMO」と検索すると私が作ったuserscriptが2つ出てくると思います.上のリンクから直接飛んだ場合はここは飛ばしていいです.
選択してみるとこういうページが出ると思うので「スクリプトをインストール」を押すとTampermonkeyが開くので「インストール」というボタンを押して完了です.
※userscriptのインストールには十分注意してください※
3.SUUMOのページで使ってみる
今回は除外ワードの方のuserscriptをインストールしてみました.
それではSUUMO東海版で
静岡県/浜松市中区 3.5万円以下 ワンルーム/1K アパート 駐車場あり/バス・トイレ別
を条件として検索してみましょう.~~浜松市にした理由はレオパレスがいっぱいあったからです.~~一人暮らしの学生で車ありみたいな想定です.
そのデモ動画です.除外前⇒"レオパレス"非表示⇒"浜松"非表示⇒リセットの流れです.
SUUMOの賃貸物件検索に除外ワード設定する拡張機能と,レオパレスを名前に含む物件を非表示にする拡張機能を作りました
— まぁじ (@Hals_SC) October 29, 2021
除外ワード: https://t.co/o17UtCgCzK
レオパレス除外: https://t.co/82SupsUFCI
↓除外ワード設定の動画です pic.twitter.com/D2WgFTviGK
使用時の注意
なんかuserscriptが効かない...
賃貸物件検索してもuserscriptが効かない場合には「部屋ごとに表示」などを経由することで拡張機能が効くURLになると思います.
画面が変なのになった
除外を繰り返すと「まとめてお問い合わせする」ボタンが大量に出てきますが,直せませんそういう仕様です.面白がってやってください.
リロードすれば全部リセットされます.
なにかあったら
GitHubまで連絡お願いします.
実装について
ここからは特に見なくてもいいゾーンです.
userscriptとは?
ユーザースクリプトは、Web ページを見たり使ったりするときの主導権をあなたに与えます。スクリプトをインストールすれば、ページの機能を使いやすくしたり、新たな機能を追加したり、迷惑なものを取り除いたりして、訪れたサイトをより便利にカスタマイズすることができます。Greasy Fork では、ユーザーが開発・投稿したスクリプトを公開しています。これらのスクリプトは自由にインストールでき、使うのも簡単です。 - https://greasyfork.org/ja より引用
まぁつまりはWebページをこっち側からいじれる機能です.YouTubeの配信チャットを某ニコニコのように流れるようにしたりAtCoderのパフォーマンス予測をしたりなど様々なuserscriptが投稿されています.
今回私が書いたuserscript自体はJavaScript+jQueryで書かれています.
物件名が.cassetteitem_content-title
というクラスにあるため,このテキストを取得してincludes
関数で"レオパレス"が含まれているか調べています.その物件情報全体が.cassetteitem
クラスに指定されているため,最も近い祖先要素を返すclosest
関数を使って物件タブを呼び出しhidden=true
に指定して非表示としています.
(function (){
const titles=$(".cassetteitem_content-title");
const exName=$("レオパレス").val();
let cnt=0;
for(let i=0;i<titles.length;i++){
try{
let item=titles[i].closest(".cassetteitem");
if(titles[i].textContent.includes(exName) && !item.hidden){
item.hidden=true;
cnt++;
}
}catch(TypeError){
{}
}
}
console.log(cnt+"件の"+exName+"物件を除外");
})();
除外ワード設定する方は上のコードをonClick
パラメータにしたボタンを追加しててごにょごびょしてるだけです(雑).jQuery初めて書いたので何にもわかりませんでした.
(function (){
$(".pagecaption").append(`<br>Exclude:<input value='レオパレス' id='excludeName' style="width:100pt">`);
$(".pagecaption").append(`<input type='submit' value='除外' onClick='(function (){
const titles=$(".cassetteitem_content-title");
const exName=$("#excludeName").val();
let cnt=0;
for(let i=0;i<titles.length;i++){
try{
let item=titles[i].closest(".cassetteitem");
if(titles[i].textContent.includes(exName) && !item.hidden){
item.hidden=true;
cnt++;
}
}catch(TypeError){
{}
}
}
console.log(cnt+"件の"+exName+"物件を除外");})();'
>`);
$(".pagecaption").append(`<input type='submit' value='リセット' onClick='(function (){
const titles=$(".cassetteitem_content-title");
for(let i=0;i<titles.length;i++){
try{
titles[i].closest(".cassetteitem").hidden=false;
}catch(TypeError){
{}
}
}
console.log("表示をリセット");
})();'
>`);
})();
おわりに
私のように賃貸アパートを探して不要な物件がヒットすることにイライラする人が一人でも減ることを望んでいます.アパートは無事決まり大家さんからの承認も来ました.やったね!
ちなみにSUUMOのサイトをスクレイピングする場合User-agentを指定してブロックしているので,ヘッダーに別のブラウザを指定すれば取得できます.でも規約違反かもしれません.
スクレイピングするときにはそのサイトの利用規約をしっかりと読み,違反行為じゃないことを確かめてからやりましょう.このuserscriptはデータを使用してないし非表示にしてるだけなので多分大丈夫だと思います.怒られたら消します.