kindle_manager 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +7 -1
 - data/lib/kindle_manager/client.rb +23 -20
 - data/lib/kindle_manager/file_store.rb +6 -5
 - data/lib/kindle_manager/version.rb +1 -1
 - data/lib/kindle_manager.rb +0 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4d0d0cbbeb7edce8852f3de2f76c624ce3471108
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ce85a47e95df6d2cabcac0168c61350dd550b7b9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 82a79e14d3eaa9c53a8efe63b6374295bd08341a358575173cdd1efefa2497838d1004db517427b0a571fb2777b32264b0b3bcbf7c1e0f3bbc5e7fd2c5736858
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 14720099a4849797df39e4e9a22a8063f01604475cc8f994a7581fe7d5bea9212fbe6fef88fab1677dde59eeb3362827e1c27cee2bc7b4fa911330f3b8732f0c
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -26,6 +26,12 @@ Or install it yourself as: 
     | 
|
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
            Create _.env_ following the instructions of https://github.com/kyamaguchi/amazon_auth
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            ```
         
     | 
| 
      
 30 
     | 
    
         
            +
            amazon_auth
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            vi .env
         
     | 
| 
      
 33 
     | 
    
         
            +
            ```
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       29 
35 
     | 
    
         
             
            And `Dotenv.load` or `gem 'dotenv-rails'` may be required when you use this in your app.
         
     | 
| 
       30 
36 
     | 
    
         | 
| 
       31 
37 
     | 
    
         
             
            ### Run
         
     | 
| 
         @@ -37,7 +43,7 @@ bin/console 
     | 
|
| 
       37 
43 
     | 
    
         
             
            In console
         
     | 
| 
       38 
44 
     | 
    
         | 
| 
       39 
45 
     | 
    
         
             
            ```
         
     | 
| 
       40 
     | 
    
         
            -
            client = KindleManager::Client.new
         
     | 
| 
      
 46 
     | 
    
         
            +
            client = KindleManager::Client.new(debug: true)
         
     | 
| 
       41 
47 
     | 
    
         
             
            client.fetch_kindle_list
         
     | 
| 
       42 
48 
     | 
    
         
             
            books = client.load_kindle_books
         
     | 
| 
       43 
49 
     | 
    
         | 
| 
         @@ -5,6 +5,7 @@ module KindleManager 
     | 
|
| 
       5 
5 
     | 
    
         
             
                def initialize(options = {})
         
     | 
| 
       6 
6 
     | 
    
         
             
                  @debug = options.fetch(:debug, false)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  @limit = options.fetch(:limit, nil)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @options = options
         
     | 
| 
       8 
9 
     | 
    
         
             
                  begin
         
     | 
| 
       9 
10 
     | 
    
         
             
                    @client = AmazonAuth::Client.new
         
     | 
| 
       10 
11 
     | 
    
         
             
                  rescue => e
         
     | 
| 
         @@ -19,22 +20,17 @@ module KindleManager 
     | 
|
| 
       19 
20 
     | 
    
         
             
                end
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
22 
     | 
    
         
             
                def store
         
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
                  @store ||= KindleManager::FileStore.new(nil, latest: true)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                def setup_file_store_with_session
         
     | 
| 
       27 
     | 
    
         
            -
                  @store = KindleManager::FileStore.new(session)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @store ||= KindleManager::FileStore.new(@options)
         
     | 
| 
       28 
24 
     | 
    
         
             
                end
         
     | 
| 
       29 
25 
     | 
    
         | 
| 
       30 
26 
     | 
    
         
             
                def fetch_kindle_list
         
     | 
| 
       31 
27 
     | 
    
         
             
                  sign_in
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
      
 28 
     | 
    
         
            +
                  store.session = session
         
     | 
| 
       33 
29 
     | 
    
         
             
                  go_to_kindle_management_page
         
     | 
| 
       34 
30 
     | 
    
         
             
                  begin
         
     | 
| 
       35 
31 
     | 
    
         
             
                    load_next_kindle_list
         
     | 
| 
       36 
32 
     | 
    
         
             
                  rescue => e
         
     | 
| 
       37 
     | 
    
         
            -
                    byebug
         
     | 
| 
      
 33 
     | 
    
         
            +
                    byebug if defined?(Byebug)
         
     | 
| 
       38 
34 
     | 
    
         
             
                    # retry ?
         
     | 
| 
       39 
35 
     | 
    
         
             
                    puts e
         
     | 
| 
       40 
36 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -54,8 +50,16 @@ module KindleManager 
     | 
|
| 
       54 
50 
     | 
    
         
             
                end
         
     | 
| 
       55 
51 
     | 
    
         | 
| 
       56 
52 
     | 
    
         
             
                def go_to_kindle_management_page
         
     | 
| 
      
 53 
     | 
    
         
            +
                  puts "Visiting kindle management page" if @debug
         
     | 
| 
       57 
54 
     | 
    
         
             
                  wait_for_selector('#shopAllLinks', 5)
         
     | 
| 
       58 
     | 
    
         
            -
                   
     | 
| 
      
 55 
     | 
    
         
            +
                  3.times do
         
     | 
| 
      
 56 
     | 
    
         
            +
                    session.all('a').find{|e| e['href'] =~ %r{/gp/digital/fiona/manage/} }.click
         
     | 
| 
      
 57 
     | 
    
         
            +
                    wait_for_selector('.navHeader_myx', 5)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    if session.first('.navHeader_myx')
         
     | 
| 
      
 59 
     | 
    
         
            +
                      puts "Page found '#{session.first('.navHeader_myx').text}'" if @debug
         
     | 
| 
      
 60 
     | 
    
         
            +
                      break
         
     | 
| 
      
 61 
     | 
    
         
            +
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
       59 
63 
     | 
    
         
             
                end
         
     | 
| 
       60 
64 
     | 
    
         | 
| 
       61 
65 
     | 
    
         
             
                def load_next_kindle_list
         
     | 
| 
         @@ -65,21 +69,22 @@ module KindleManager 
     | 
|
| 
       65 
69 
     | 
    
         
             
                    if @limit && @limit < number_of_fetched_books
         
     | 
| 
       66 
70 
     | 
    
         
             
                      break
         
     | 
| 
       67 
71 
     | 
    
         
             
                    elsif has_more_button?
         
     | 
| 
       68 
     | 
    
         
            -
                       
     | 
| 
      
 72 
     | 
    
         
            +
                      snapshot_page
         
     | 
| 
       69 
73 
     | 
    
         
             
                      @current_loop = 0
         
     | 
| 
       70 
74 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                      puts "Clicking 'Show More'"
         
     | 
| 
      
 75 
     | 
    
         
            +
                      puts "Clicking 'Show More'" if @debug
         
     | 
| 
       72 
76 
     | 
    
         
             
                      session.execute_script "window.scrollBy(0,-800)"
         
     | 
| 
       73 
77 
     | 
    
         
             
                      show_more_button.click
         
     | 
| 
       74 
78 
     | 
    
         
             
                      sleep 1
         
     | 
| 
       75 
79 
     | 
    
         
             
                      raise('Clicking of more button may have failed') if has_more_button?
         
     | 
| 
       76 
80 
     | 
    
         
             
                    else
         
     | 
| 
       77 
     | 
    
         
            -
                      puts " 
     | 
| 
      
 81 
     | 
    
         
            +
                      puts "Loading books with scrolling #{@current_loop+1}" if @debug
         
     | 
| 
       78 
82 
     | 
    
         
             
                      session.execute_script "window.scrollBy(0,10000)"
         
     | 
| 
       79 
83 
     | 
    
         
             
                    end
         
     | 
| 
       80 
84 
     | 
    
         
             
                    sleep 5
         
     | 
| 
       81 
85 
     | 
    
         
             
                    @current_loop += 1
         
     | 
| 
       82 
86 
     | 
    
         
             
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
                  puts "Stopped loading" if @debug
         
     | 
| 
       83 
88 
     | 
    
         
             
                  snapshot_page
         
     | 
| 
       84 
89 
     | 
    
         
             
                end
         
     | 
| 
       85 
90 
     | 
    
         | 
| 
         @@ -100,8 +105,11 @@ module KindleManager 
     | 
|
| 
       100 
105 
     | 
    
         
             
                end
         
     | 
| 
       101 
106 
     | 
    
         | 
| 
       102 
107 
     | 
    
         
             
                def number_of_fetched_books
         
     | 
| 
       103 
     | 
    
         
            -
                   
     | 
| 
       104 
     | 
    
         
            -
                   
     | 
| 
      
 108 
     | 
    
         
            +
                  re = (AmazonInfo.domain =~ /\.jp\z/ ? /(\d+)〜(\d+)/ : /(\d+) - (\d+)/)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  text = session.first('.contentCount_myx').text
         
     | 
| 
      
 110 
     | 
    
         
            +
                  m = text.match(re)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  return m[2].to_i if m.present?
         
     | 
| 
      
 112 
     | 
    
         
            +
                  raise("Couldn't get the number of fetched books [#{text}]")
         
     | 
| 
       105 
113 
     | 
    
         
             
                end
         
     | 
| 
       106 
114 
     | 
    
         | 
| 
       107 
115 
     | 
    
         
             
                def loading?
         
     | 
| 
         @@ -110,13 +118,8 @@ module KindleManager 
     | 
|
| 
       110 
118 
     | 
    
         | 
| 
       111 
119 
     | 
    
         
             
                def snapshot_page
         
     | 
| 
       112 
120 
     | 
    
         
             
                  store.record_page
         
     | 
| 
       113 
     | 
    
         
            -
                  debug_print_page
         
     | 
| 
       114 
     | 
    
         
            -
                end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                def debug_print_page
         
     | 
| 
       117 
121 
     | 
    
         
             
                  if @debug
         
     | 
| 
       118 
     | 
    
         
            -
                    puts Time.current.strftime("%Y-%m-%d %H:%M:%S")
         
     | 
| 
       119 
     | 
    
         
            -
                    puts "Loop: #{@current_loop}"
         
     | 
| 
      
 122 
     | 
    
         
            +
                    puts "Saving page" + Time.current.strftime("%Y-%m-%d %H:%M:%S")
         
     | 
| 
       120 
123 
     | 
    
         
             
                    puts session.first('.contentCount_myx').text if session.first('.contentCount_myx')
         
     | 
| 
       121 
124 
     | 
    
         
             
                    puts
         
     | 
| 
       122 
125 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1,12 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module KindleManager
         
     | 
| 
       2 
2 
     | 
    
         
             
              class FileStore
         
     | 
| 
       3 
     | 
    
         
            -
                attr_accessor :dir_name
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_accessor :dir_name, :session
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                def initialize( 
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(options = {})
         
     | 
| 
       6 
6 
     | 
    
         
             
                  @dir_name = options.fetch(:dir_name) do
         
     | 
| 
       7 
     | 
    
         
            -
                    options[: 
     | 
| 
      
 7 
     | 
    
         
            +
                    tmp_dir_name = options[:create] ? nil : find_latest_dir_name
         
     | 
| 
      
 8 
     | 
    
         
            +
                    tmp_dir_name.presence || Time.current.strftime("%Y%m%d%H%M%S")
         
     | 
| 
       8 
9 
     | 
    
         
             
                  end
         
     | 
| 
       9 
     | 
    
         
            -
                  @session = session
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @session = options.fetch(:session, nil)
         
     | 
| 
       10 
11 
     | 
    
         
             
                end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
                def base_dir
         
     | 
| 
         @@ -48,7 +49,7 @@ module KindleManager 
     | 
|
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
51 
     | 
    
         
             
                def find_latest_dir_name
         
     | 
| 
       51 
     | 
    
         
            -
                  self.class.list_download_dirs.sort.last.split('/').last
         
     | 
| 
      
 52 
     | 
    
         
            +
                  self.class.list_download_dirs.sort.last.to_s.split('/').last
         
     | 
| 
       52 
53 
     | 
    
         
             
                end
         
     | 
| 
       53 
54 
     | 
    
         | 
| 
       54 
55 
     | 
    
         
             
                private
         
     | 
    
        data/lib/kindle_manager.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: kindle_manager
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Kazuho Yamaguchi
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-04- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-04-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: amazon_auth
         
     |