LoginSignup
33
26

More than 1 year has passed since last update.

SUUMOの賃貸物件検索からレオパレス物件を除外する拡張機能(userscript)を作る

Posted at

初投稿です.

なにこれ

SUUMOで賃貸アパートを探していると,レオパレス物件ばかり出てきて嫌になりませんか?
私もSUUMOで検索するとレオパレス物件ばかり(しかも何部屋も募集があってスクロールが大変)だしレオパレス物件の評判についてTwitterで調べると

インターネットが最悪!壁が薄すぎて隣人のいびきすら聞こえる!雨漏りする!天井が剥がれた!マナーが最悪!家具家電付きで相殺されないほどのマイナス!なんだかんだ全部足したら月費用普通に高い!

など,普通かそれ以下か の2択らしく除外したくなりました.
しかしSUUMOにNGワード機能はないらしいので,Greasy Forkでuserscript×2を作りました.

機能

ができます.

使用方法

1.Tampermonkeyのインストール

まず使用ブラウザの拡張機能インストールページから Tampermonkey をインストールしてください.
ChromeならChrome ウェブストア,FirefoxならFirefoxアドオンからインストールできると思います.

2.Greasy Forkにアクセス

Greasy Fork(https://greasyfork.org/ja) にアクセスし「SUUMO」と検索すると私が作ったuserscriptが2つ出てくると思います.上のリンクから直接飛んだ場合はここは飛ばしていいです.
greasyfork.png

選択してみるとこういうページが出ると思うので「スクリプトをインストール」を押すとTampermonkeyが開くので「インストール」というボタンを押して完了です.
※userscriptのインストールには十分注意してください※
extensionpage.png
installpage.png

3.SUUMOのページで使ってみる

今回は除外ワードの方のuserscriptをインストールしてみました.
それではSUUMO東海版で

静岡県/浜松市中区 3.5万円以下 ワンルーム/1K アパート 駐車場あり/バス・トイレ別

を条件として検索してみましょう.浜松市にした理由はレオパレスがいっぱいあったからです.一人暮らしの学生で車ありみたいな想定です.

そのデモ動画です.除外前⇒"レオパレス"非表示⇒"浜松"非表示⇒リセットの流れです.

使用時の注意

なんかuserscriptが効かない...

賃貸物件検索してもuserscriptが効かない場合には「部屋ごとに表示」などを経由することで拡張機能が効くURLになると思います.

画面が変なのになった

除外を繰り返すと「まとめてお問い合わせする」ボタンが大量に出てきますが,直せませんそういう仕様です.面白がってやってください.
リロードすれば全部リセットされます.

なにかあったら

私のTwitter(@Hals_SC)にご連絡ください.

実装について

ここからは特に見なくてもいいゾーンです.

userscriptとは?
ユーザースクリプトは、Web ページを見たり使ったりするときの主導権をあなたに与えます。スクリプトをインストールすれば、ページの機能を使いやすくしたり、新たな機能を追加したり、迷惑なものを取り除いたりして、訪れたサイトをより便利にカスタマイズすることができます。Greasy Fork では、ユーザーが開発・投稿したスクリプトを公開しています。これらのスクリプトは自由にインストールでき、使うのも簡単です。 - https://greasyfork.org/ja より引用

まぁつまりはWebページをこっち側からいじれる機能です.YouTubeの配信チャットを某ニコニコのように流れるようにしたAtCoderのパフォーマンス予測をしたりなど様々なuserscriptが投稿されています.

今回私が書いたuserscript自体はJavaScript+jQueryで書かれています.
物件名が.cassetteitem_content-titleというクラスにあるため,このテキストを取得してincludes関数で"レオパレス"が含まれているか調べています.その物件情報全体が.cassetteitemクラスに指定されているため,最も近い祖先要素を返すclosest関数を使って物件タブを呼び出しhidden=trueに指定して非表示としています.

レオパレス非表示にする方.js
(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初めて書いたので何にもわかりませんでした.

除外ワード設定する方.js
(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はデータを使用してないし非表示にしてるだけなので多分大丈夫だと思います.怒られたら消します.

参考

33
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
26