lib/qiita_trend/trend.rb in qiita_trend-0.4.8 vs lib/qiita_trend/trend.rb in qiita_trend-0.4.9

- old
+ new

@@ -8,23 +8,25 @@ module QiitaTrend # Qiitaのトレンドの機能を提供する class Trend # @return [Array] トレンドデータ attr_reader :data + attr_reader :trend_type # コンストラクタ # # @param [TrendType] trend_type トレンドタイプ # @param [String] date 「YYYYMMDD05」,「YYYYMMDD17」形式のどちらか # @raise [LoginFailureError] ログインに失敗した時に発生する # @raise [NotExistsCacheError] 存在しないキャッシュファイルを指定した時に発生する def initialize(trend_type = TrendType::NORMAL, date = nil) + @trend_type = trend_type page = Page.new(trend_type, date) parsed_html = Nokogiri::HTML.parse(page.html) xpath_str = "//script[@data-component-name=\"#{data_component_name(trend_type)}\"]" trends_data = JSON.parse(parsed_html.xpath(xpath_str)[0].text) - @data = trends_data['trend']['edges'] + @data = get_data(trends_data, trend_type) end # Qiitaの対象のトレンドをすべて取得 # # @return [Array] Qiitaの対象のトレンドすべて @@ -42,24 +44,37 @@ value << result end end # Qiitaの対象のトレンドからNEWのものだけ取得 + # トレンドタイプがPERSONALの場合はNEWの概念が無いのでnilである # # @return [Array] Qiitaの対象のトレンドからNEWのものだけ def new_items + return nil if @trend_type == TrendType::PERSONAL + items.select do |trend| trend['is_new_arrival'] == true end end private # QiitaのトレンドのFeed名を取得する # + # @param [TrendType] trend_type トレンドタイプ # @return [String] トレンドタイプによるFeed名 def data_component_name(trend_type) - trend_type == TrendType::PERSONAL ? 'HomePersonalizedFeed' : 'NewHomeArticleTrendFeed' + trend_type == TrendType::PERSONAL ? 'HomePersonalizedFeed' : 'HomeArticleTrendFeed' + end + + # Qiitaのトレンドのデータを取得する + # + # @param [Hash] trends_data トレンドデータ + # @param [TrendType] trend_type トレンドタイプ + # @return [Array] トレンドタイプによるトレンドデータ + def get_data(trends_data, trend_type) + trend_type == TrendType::PERSONAL ? trends_data['personalizedFeed']['edges'] : trends_data['trend']['edges'] end # ユーザーの画像のURLを取得する # URLデコードしクエリーパラメータを排除する #