qiita_trend 0.2.1 → 0.2.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/Gemfile.lock +2 -2
- data/lib/qiita_trend/configuration.rb +22 -0
- data/lib/qiita_trend/page.rb +27 -22
- data/lib/qiita_trend/target.rb +36 -0
- data/lib/qiita_trend/trend.rb +2 -2
- data/lib/qiita_trend/trend_type.rb +9 -0
- data/lib/qiita_trend/version.rb +1 -1
- data/lib/qiita_trend.rb +3 -0
- metadata +5 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fa41464be0966877b547ee5d68effeeda6ea9e5151068dc1d2f16b0a5285f566
         | 
| 4 | 
            +
              data.tar.gz: 5ffb824f9d816c58f5000eac1585081e9acf5daa2d3e670793e1b50e561e8866
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e8238cc259394bee8cffd6bc5838928d1f729a1190f4a6794f46f186f024f890cf917bdbd433dd51cb95410bb5be38280db44d820336088fc2ad12d2dbceb1ad
         | 
| 7 | 
            +
              data.tar.gz: 31649078cc8dac92dd22fa3f6c2986f62151561fbb86a3cfabae4339288e561fc880fd7e95675592108658e6d79486625d2a9829abc10e32046919d3113d87e8
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                qiita_trend (0.2. | 
| 4 | 
            +
                qiita_trend (0.2.2)
         | 
| 5 5 | 
             
                  mechanize
         | 
| 6 6 | 
             
                  nokogiri (~> 1.9)
         | 
| 7 7 |  | 
| @@ -35,7 +35,7 @@ GEM | |
| 35 35 | 
             
                mime-types-data (3.2019.0331)
         | 
| 36 36 | 
             
                mini_portile2 (2.4.0)
         | 
| 37 37 | 
             
                net-http-digest_auth (1.4.1)
         | 
| 38 | 
            -
                net-http-persistent (3.0 | 
| 38 | 
            +
                net-http-persistent (3.1.0)
         | 
| 39 39 | 
             
                  connection_pool (~> 2.2)
         | 
| 40 40 | 
             
                nokogiri (1.10.3)
         | 
| 41 41 | 
             
                  mini_portile2 (~> 2.4.0)
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module QiitaTrend
         | 
| 4 | 
            +
              class << self
         | 
| 5 | 
            +
                def configure
         | 
| 6 | 
            +
                  yield(configuration)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def configuration
         | 
| 10 | 
            +
                  @configuration ||= Configuration.new
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              class Configuration
         | 
| 15 | 
            +
                attr_accessor :user_name, :password
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def initialize
         | 
| 18 | 
            +
                  @user_name = 'set user name'
         | 
| 19 | 
            +
                  @password = 'set password'
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/qiita_trend/page.rb
    CHANGED
    
    | @@ -4,38 +4,43 @@ require 'mechanize' | |
| 4 4 |  | 
| 5 5 | 
             
            module QiitaTrend
         | 
| 6 6 | 
             
              class Page
         | 
| 7 | 
            -
                attr_reader :html
         | 
| 7 | 
            +
                attr_reader :target, :html, :cache
         | 
| 8 8 |  | 
| 9 9 | 
             
                QIITA_URI = 'https://qiita.com/'
         | 
| 10 | 
            +
                QIITA_LOGIN_URI = 'https://qiita.com/login'
         | 
| 10 11 |  | 
| 11 | 
            -
                def initialize( | 
| 12 | 
            -
                  @ | 
| 13 | 
            -
             | 
| 12 | 
            +
                def initialize(trend_type = TrendType::DAILY, date = nil)
         | 
| 13 | 
            +
                  @target = Target.new(trend_type, date)
         | 
| 14 | 
            +
                  @cache = Cache.new(target.cache)
         | 
| 14 15 |  | 
| 15 | 
            -
             | 
| 16 | 
            +
                  # 指定されたキャッシュファイルが存在しない場合は処理を終了
         | 
| 17 | 
            +
                  unless date.nil?
         | 
| 18 | 
            +
                    raise StandardError, '指定されたキャッシュファイルが存在しません' unless @cache.cached?
         | 
| 19 | 
            +
                  end
         | 
| 16 20 |  | 
| 17 | 
            -
                def create_html(ua)
         | 
| 18 21 | 
             
                  # キャッシュが存在する場合はキャッシュから取得
         | 
| 19 | 
            -
                   | 
| 20 | 
            -
                  return cache.load_cache if cache.cached?
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  # キャッシュが存在しない場合はキャッシュを作成しページ情報を取得する
         | 
| 23 | 
            -
                  agent = Mechanize.new
         | 
| 24 | 
            -
                  agent.user_agent_alias = ua
         | 
| 25 | 
            -
                  page = agent.get QIITA_URI
         | 
| 26 | 
            -
                  cache.create_cache(page.body)
         | 
| 22 | 
            +
                  @html = @cache.cached? ? @cache.load_cache : create_html(@target)
         | 
| 27 23 |  | 
| 28 | 
            -
                   | 
| 24 | 
            +
                  # キャッシュが存在しない時はキャッシュを作成する
         | 
| 25 | 
            +
                  @cache.create_cache(@html) unless @cache.cached?
         | 
| 29 26 | 
             
                end
         | 
| 30 27 |  | 
| 31 | 
            -
                 | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
                   | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 28 | 
            +
                private
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def create_html(target)
         | 
| 31 | 
            +
                  agent = Mechanize.new
         | 
| 32 | 
            +
                  agent.user_agent_alias = 'Mac Safari'
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  # ログイン処理
         | 
| 35 | 
            +
                  if target.need_login
         | 
| 36 | 
            +
                    form = agent.get(QIITA_LOGIN_URI).forms.first
         | 
| 37 | 
            +
                    form['identity'] = QiitaTrend.configuration.user_name
         | 
| 38 | 
            +
                    form['password'] = QiitaTrend.configuration.password
         | 
| 39 | 
            +
                    logged_page = form.submit
         | 
| 40 | 
            +
                    raise StandardError, 'ログインに失敗しました(ユーザー名とパスワードでログインできることを確認してください)' if logged_page.title.include?('Login')
         | 
| 38 41 | 
             
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  agent.get(target.url).body
         | 
| 39 44 | 
             
                end
         | 
| 40 45 | 
             
              end
         | 
| 41 46 | 
             
            end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module QiitaTrend
         | 
| 4 | 
            +
              class Target
         | 
| 5 | 
            +
                attr_reader :type, :url, :need_login, :cache
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def initialize(trend_type = TrendType::DAILY, date = nil)
         | 
| 8 | 
            +
                  @type = trend_type
         | 
| 9 | 
            +
                  @url = trend_url(trend_type)
         | 
| 10 | 
            +
                  @need_login = trend_type != TrendType::DAILY
         | 
| 11 | 
            +
                  @cache = cache_name(trend_type, date)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def trend_url(type)
         | 
| 17 | 
            +
                  case type
         | 
| 18 | 
            +
                  when TrendType::DAILY then 'https://qiita.com/'
         | 
| 19 | 
            +
                  when TrendType::WEEKLY then 'https://qiita.com/?scope=weekly'
         | 
| 20 | 
            +
                  when TrendType::MONTHLY then 'https://qiita.com/?scope=monthly'
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def cache_name(type, date)
         | 
| 25 | 
            +
                  return "#{date}_#{type}.html" unless date.nil?
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  if Time.now.hour >= 5 && Time.now.hour < 17
         | 
| 28 | 
            +
                    "#{Date.today.strftime('%Y%m%d')}05_#{type}.html"
         | 
| 29 | 
            +
                  elsif Time.now.hour >= 17
         | 
| 30 | 
            +
                    "#{Date.today.strftime('%Y%m%d')}17_#{type}.html"
         | 
| 31 | 
            +
                  elsif Time.now.hour < 5
         | 
| 32 | 
            +
                    "#{(Date.today - 1).strftime('%Y%m%d')}17_#{type}.html"
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
    
        data/lib/qiita_trend/trend.rb
    CHANGED
    
    | @@ -8,8 +8,8 @@ module QiitaTrend | |
| 8 8 | 
             
              class Trend
         | 
| 9 9 | 
             
                attr_reader :data
         | 
| 10 10 |  | 
| 11 | 
            -
                def initialize( | 
| 12 | 
            -
                  page =  | 
| 11 | 
            +
                def initialize(trend_type = TrendType::DAILY, date = nil)
         | 
| 12 | 
            +
                  page = Page.new(trend_type, date)
         | 
| 13 13 | 
             
                  parsed_html = Nokogiri::HTML.parse(page.html)
         | 
| 14 14 |  | 
| 15 15 | 
             
                  trends_data = JSON.parse(parsed_html.xpath('//div[@data-hyperapp-app="Trend"]')[0]['data-hyperapp-props'])
         | 
    
        data/lib/qiita_trend/version.rb
    CHANGED
    
    
    
        data/lib/qiita_trend.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: qiita_trend
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - dodonki1223
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019- | 
| 11 | 
            +
            date: 2019-08-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: mechanize
         | 
| @@ -171,8 +171,11 @@ files: | |
| 171 171 | 
             
            - bin/setup
         | 
| 172 172 | 
             
            - lib/qiita_trend.rb
         | 
| 173 173 | 
             
            - lib/qiita_trend/cache.rb
         | 
| 174 | 
            +
            - lib/qiita_trend/configuration.rb
         | 
| 174 175 | 
             
            - lib/qiita_trend/page.rb
         | 
| 176 | 
            +
            - lib/qiita_trend/target.rb
         | 
| 175 177 | 
             
            - lib/qiita_trend/trend.rb
         | 
| 178 | 
            +
            - lib/qiita_trend/trend_type.rb
         | 
| 176 179 | 
             
            - lib/qiita_trend/version.rb
         | 
| 177 180 | 
             
            - qiita_trend.gemspec
         | 
| 178 181 | 
             
            homepage: https://github.com/dodonki1223/qiita_trend
         |