Kindle Unlimited フィルタ Fork

    
      
  • /*
     * @title Kindle 検索→Unlimited 対象タイトルのみフィルタ
     * @description Amazon Kindle検索時にKindle Unlimitedの「□ 読み放題対象タイトル」が出ないケースでもフィルタできるようにする
     * @include https://www.amazon.co.jp/*
     * @license MIT License
     * @javascript_url
     */
    
    ( () => {
    let unlimited_checkbox = document.querySelector( 'input[name="s-ref-checkbox-3169286051"]' );
    // [Kindle本トップページ](https://www.amazon.co.jp/gp/browse.html?node=2275256051)等に存在するチェックボックス
    
    if ( unlimited_checkbox && ( ! unlimited_checkbox.checked ) ) {
        unlimited_checkbox.click();
        return;
    }
    
    let unlimited_item = document.querySelector( '[id="p_n_feature_nineteen_browse-bin/3169286051"]' );
    
    if ( unlimited_item ) {
        unlimited_checkbox = unlimited_item.querySelector( 'input[type="checkbox"]' );
        
        if ( unlimited_checkbox.checked ) {
            return;
        }
        
        let unlimited_link = unlimited_item.querySelector( 'a[data-routing]' );
        
        if ( unlimited_link ) {
            location.href = unlimited_link.href;
            return;
        }
    }
    
    let query_map = [ ... new URL( location.href ).searchParams.entries() ].reduce( ( acc, cur ) => ( { ... acc, [ cur[ 0 ] ] : cur[ 1 ] } ), {} );
    
    if ( ! ( (  'dc' in query_map ) || ( query_map.i == 'digital-text' ) ) ) {
        // Kindleストア以外
        return;
    }
    
    const
        rh_unlimited = 'p_n_feature_nineteen_browse-bin:3169286051';
    
    let rh_list = ( 'rh' in query_map ) ? query_map.rh.split( ',' ) : [];
    
    if ( rh_list.includes( rh_unlimited ) ) {
        return;
    }
    
    rh_list.push( rh_unlimited );
    
    query_map.rh = rh_list.join( ',' );
    
    let unlimited_url = location.href.replace( /\?.*$/, '' ) + '?' + Object.entries( query_map ).map( q => q[ 0 ] + '=' + encodeURIComponent( q[ 1 ] ) ).join( '&' );
    
    location.href = unlimited_url;
    
    } )();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。