qiita_trend 0.4.8 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f340c9bd896889d3328ca2e2df7127fcbd9ec03e0452baef8fc1960ed508b2aa
4
- data.tar.gz: 9b446ac321c031d503b73d694e68295acf485ba23a6a8d4dd7c27dcab3446434
3
+ metadata.gz: 8a73fc251bb36d817331e9cc0e311dedfe4f269c750ceda90e55a28cb5888ffe
4
+ data.tar.gz: 5f2f5f8e6c7778f8712f4e21f103d3d8421fe69f4c32dc66ec5fe6043f0a11e6
5
5
  SHA512:
6
- metadata.gz: 065a262b04b7e9f3b19d72a5cf9471d8e7cbed1465465193098190f0490211d199e9f771a970f813822eefe7b13adaef6d849d8b07d2bf89d86ff9735a77323e
7
- data.tar.gz: f2bbf97d05c5bea4c6137398312742f542b33278ba658cfe120a59d300152eec466a17b5987117dd9c8c8b7ba0742d769d60f38af72012e2f787344e0df4d79f
6
+ metadata.gz: 9faaa422189653c626a611919b3de48735fae61b2747bf6d4e791c8c17b931940445204b5b0087d5c160c367cf31d869c2bf7be174695b0e702e6feecce7c966
7
+ data.tar.gz: 26cb95bea2a55c5eb49db2394f268ec55db0183225a5bdff25356a487639dea31d95ecad44de4c2ace1e2f968e2a9d3c8e6f17844bb5a438bd9ba2e7e3895fda
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qiita_trend (0.4.8)
4
+ qiita_trend (0.4.9)
5
5
  mechanize (~> 2.7)
6
6
  nokogiri (~> 1.11)
7
7
 
data/README.md CHANGED
@@ -8,10 +8,10 @@ Qiitaのトレンドを10秒で取得することができます
8
8
 
9
9
  ## 概要
10
10
 
11
- - [Qiita](https://qiita.com/)のTOPページをスクレイピングしDaily、Weekly、Monthlyのトレンドを取得します
11
+ - [Qiita](https://qiita.com/)のTOPページをスクレイピングしTOPページに表示されているトレンドを取得します
12
12
  - [Qiita](https://qiita.com/)のAPIにトレンドを取得する方法がないため
13
- - トレンドはDaily、Weekly、Monthlyそれぞれを日付と更新時間(5時と17時)の組み合わせごとにキャッシュを行います
14
- - Weekly、Monthlyに関してはQiitaにログインしないと取得できないためユーザー名とパスワード設定する必要があります(Dailyに関しては何も設定しなくても取得できます)
13
+ - トレンドは「通常のもの(通常トレンド)」と「ログインした時に表示されるユーザーのトレンド(ユーザートレンド)」のそれぞれを日付と更新時間(5時と17時)の組み合わせごとにキャッシュを行います
14
+ - ユーザートレンドに関してはQiitaにログインしないと取得できないためユーザー名とパスワード設定する必要があります(通常トレンドに関しては何も設定しなくても取得できます)
15
15
  - 過去のトレンドを取得することができます(**あくまでもキャッシュファイルから復元するためキャッシュファイルの無い過去のトレンドは取得することができません**)
16
16
  - いいね数は性質上取得した時の時間に依存します。どうしても現在時刻のいいね数が欲しい場合はキャシュファイルを手動で削除してもう一度実行してください
17
17
 
@@ -27,7 +27,7 @@ Qiitaのトレンドを10秒で取得することができます
27
27
  $ gem install qiita_trend
28
28
  ```
29
29
 
30
- ### QiitaのDailyのトレンドを10秒で取得する
30
+ ### Qiitaの通常トレンドを10秒で取得する
31
31
 
32
32
  ターミナルで`ruby -r qiita_trend -e "pp QiitaTrend::Trend.new.items"`を実行することでQiitaのトレンドを10秒(**gem install qiita_trendも含めて**)で取得できます
33
33
 
@@ -53,7 +53,7 @@ $ ruby -r qiita_trend -e "pp QiitaTrend::Trend.new.items"
53
53
  ...
54
54
  ```
55
55
 
56
- ### Dailyのトレンドの簡易表示
56
+ ### 通常トレンドの簡易表示
57
57
 
58
58
  index + タイトル名 + いいね数 + ユーザー名
59
59
 
@@ -68,7 +68,7 @@ $ ruby -r qiita_trend -e "QiitaTrend::Trend.new.items.each_with_index {|t, i| pu
68
68
  [5]畳み込みニューラルネットワークは何を見ているか(69) - okn-yu
69
69
  ```
70
70
 
71
- ### Dailyのトレンドのタイトル一覧
71
+ ### 通常トレンドのタイトル一覧
72
72
 
73
73
  ```shell
74
74
  $ ruby -r qiita_trend -e "QiitaTrend::Trend.new.items.each {|t| puts t['title']}"
@@ -81,7 +81,7 @@ KAGGLEでどこから手を付けていいか分からず学ぶことが多す
81
81
  畳み込みニューラルネットワークは何を見ているか
82
82
  ```
83
83
 
84
- ### Dailyのトレンドのうち`new`がついているものをブラウザで一括で開く
84
+ ### 通常トレンドのうち`new`がついているものをブラウザで一括で開く
85
85
 
86
86
  ```shell
87
87
  $ ruby -r qiita_trend -e "QiitaTrend::Trend.new.new_items.each {|t| system('open ' + t['article'])}"
@@ -97,21 +97,21 @@ gem 'qiita_trend'
97
97
 
98
98
  Gemfileに追加したら`bundle install`してください
99
99
 
100
- ### Dailyのトレンドを取得する
100
+ ### 通常トレンドを取得する
101
101
 
102
102
  ```ruby
103
- daily_trend = QiitaTrend::Trend.new
103
+ normal_trend = QiitaTrend::Trend.new
104
104
 
105
- # Dailyのトレンドを全て取得する
106
- p daily_trend.items
105
+ # 通常トレンドを全て取得する
106
+ p normal_trend.items
107
107
 
108
- # DailyのトレンドでNEWのものだけを取得する
109
- p daily_trend.new_items
108
+ # 通常トレンドでNEWのものだけを取得する
109
+ p normal_trend.new_items
110
110
  ```
111
111
 
112
- ### Weekly、Monthlyのトレンドを取得する
112
+ ### ユーザートレンドを取得する
113
113
 
114
- WeeklyとMonthlyのトレンドを取得する時はQiitaにログインしている必要があるため、ログイン出来るユーザーとパスワードの設定が必要です
114
+ ユーザートレンドを取得する時はQiitaにログインしている必要があるため、ログイン出来るユーザーとパスワードの設定が必要です
115
115
  ログインできないユーザー名とパスワードを指定している時は`LoginFailureError`の例外が発生します
116
116
 
117
117
  ```ruby
@@ -121,34 +121,35 @@ QiitaTrend.configure do |config|
121
121
  config.password = 'パスワード'
122
122
  end
123
123
 
124
- # Weeklyの全てのトレンドとNEWのものだけを取得
125
- weekly_trend = QiitaTrend::Trend.new(QiitaTrend::TrendType::WEEKLY)
126
- p weekly_trend.items
127
- p weekly_trend.new_items
124
+ # ユーザーのレンドを取得
125
+ personal_trend = QiitaTrend::Trend.new(QiitaTrend::TrendType::PERSONAL)
126
+ p personal_trend.items
127
+ ```
128
+
129
+ ログインするユーザーとパスワードは環境変数に設定することもできます
128
130
 
129
- # Monthlyの全てのトレンドとNEWのものだけを取得
130
- monthly_trend = QiitaTrend::Trend.new(QiitaTrend::TrendType::MONTHLY)
131
- p monthly_trend.items
132
- p monthly_trend.new_items
131
+ ```
132
+ export QIITA_TREND_USER_NAME='ユーザー名'
133
+ export QIITA_TREND_PASSWORD='パスワード'
133
134
  ```
134
135
 
135
136
  ### キャッシュファイルからトレンドを取得する
136
137
 
137
138
  キャッシュファイルが存在しない場合は`NotExistsCacheError`の例外が発生します
138
- WeeklyもMonthlyの取得方法もDailyと同様です
139
+ ユーザートレンドの取得方法も通常トレンドと同様です
139
140
 
140
141
  ```ruby
141
- # 2019年8月8日5時更新分のDailyのトレンドを取得する
142
- daily_trend_05 = QiitaTrend::Trend.new(QiitaTrend::TrendType::DAILY, '2019080805')
142
+ # 2019年8月8日5時更新分の通常トレンドを取得する
143
+ normal_trend_05 = QiitaTrend::Trend.new(QiitaTrend::TrendType::NORMAL, '2019080805')
143
144
 
144
- p daily_trend_05.items
145
- p daily_trend_05.new_items
145
+ p normal_trend_05.items
146
+ p normal_trend_05.new_items
146
147
 
147
- # 2019年8月8日17時更新分のDailyのトレンドを取得する
148
- daily_trend_17 = QiitaTrend::Trend.new(QiitaTrend::TrendType::DAILY, '2019080817')
148
+ # 2019年8月8日17時更新分のnormalのトレンドを取得する
149
+ normal_trend_17 = QiitaTrend::Trend.new(QiitaTrend::TrendType::NORMAL, '2019080817')
149
150
 
150
- p daily_trend_17.items
151
- p daily_trend_17.new_items
151
+ p normal_trend_17.items
152
+ p normal_trend_17.new_items
152
153
  ```
153
154
 
154
155
  ### itemsメソッド、new_itemsメソッドについて
@@ -225,7 +226,7 @@ irb(main):001:0> pp QiitaTrend::Trend.new.items[0]
225
226
  <tr>
226
227
  <td>is_new_arrival</td>
227
228
  <td>「NEW」のついている記事か</td>
228
- <td>TrueかFalseが入ります</td>
229
+ <td>TrueかFalseが入ります。ログインした時に表示されるユーザーのトレンドに関してはnilになります</td>
229
230
  </tr>
230
231
  </tbody>
231
232
  </table>
@@ -235,9 +236,8 @@ irb(main):001:0> pp QiitaTrend::Trend.new.items[0]
235
236
  キャッシュファイルはデフォルトだと`ユーザーのHOMEディレクトリ/qiita_cache/`に出力されます
236
237
 
237
238
  ```
238
- /Users/dodonki1223/qiita_cache/2019080205_daily.html
239
- /Users/dodonki1223/qiita_cache/2019080205_weekly
240
- /Users/dodonki1223/qiita_cache/2019080205_monthly.html
239
+ /Users/dodonki1223/qiita_cache/2019080205_normal.html
240
+ /Users/dodonki1223/qiita_cache/2019080205_personal
241
241
  ```
242
242
 
243
243
  プログラムで下記のように追記してください
@@ -251,6 +251,12 @@ QiitaTrend.configure do |config|
251
251
  end
252
252
  ```
253
253
 
254
+ キャッシュファイルの出力先は環境変数に設定することもできます
255
+
256
+ ```
257
+ QIITA_TREND_CACHE_DIR='/Users/dodonki1223/hoge/'
258
+ ```
259
+
254
260
  ## 注意
255
261
 
256
262
  このgemは勉強用で作成したものでソースにはアンチパターンなコメント(処理を説明するようなコメントなど)が書かれています。そこはご容赦ください
@@ -23,9 +23,9 @@ module QiitaTrend
23
23
  # コンストラクタ
24
24
  # Configurationクラスのインスタンスを返します
25
25
  def initialize
26
- @user_name = nil
27
- @password = nil
28
- @cache_directory = nil
26
+ @user_name = ENV['QIITA_TREND_USER_NAME']
27
+ @password = ENV['QIITA_TREND_PASSWORD']
28
+ @cache_directory = ENV['QIITA_TREND_CACHE_DIR']
29
29
  end
30
30
  end
31
31
  end
@@ -10,6 +10,7 @@ module QiitaTrend
10
10
  class Trend
11
11
  # @return [Array] トレンドデータ
12
12
  attr_reader :data
13
+ attr_reader :trend_type
13
14
 
14
15
  # コンストラクタ
15
16
  #
@@ -18,11 +19,12 @@ module QiitaTrend
18
19
  # @raise [LoginFailureError] ログインに失敗した時に発生する
19
20
  # @raise [NotExistsCacheError] 存在しないキャッシュファイルを指定した時に発生する
20
21
  def initialize(trend_type = TrendType::NORMAL, date = nil)
22
+ @trend_type = trend_type
21
23
  page = Page.new(trend_type, date)
22
24
  parsed_html = Nokogiri::HTML.parse(page.html)
23
25
  xpath_str = "//script[@data-component-name=\"#{data_component_name(trend_type)}\"]"
24
26
  trends_data = JSON.parse(parsed_html.xpath(xpath_str)[0].text)
25
- @data = trends_data['trend']['edges']
27
+ @data = get_data(trends_data, trend_type)
26
28
  end
27
29
 
28
30
  # Qiitaの対象のトレンドをすべて取得
@@ -44,9 +46,12 @@ module QiitaTrend
44
46
  end
45
47
 
46
48
  # Qiitaの対象のトレンドからNEWのものだけ取得
49
+ # トレンドタイプがPERSONALの場合はNEWの概念が無いのでnilである
47
50
  #
48
51
  # @return [Array] Qiitaの対象のトレンドからNEWのものだけ
49
52
  def new_items
53
+ return nil if @trend_type == TrendType::PERSONAL
54
+
50
55
  items.select do |trend|
51
56
  trend['is_new_arrival'] == true
52
57
  end
@@ -56,9 +61,19 @@ module QiitaTrend
56
61
 
57
62
  # QiitaのトレンドのFeed名を取得する
58
63
  #
64
+ # @param [TrendType] trend_type トレンドタイプ
59
65
  # @return [String] トレンドタイプによるFeed名
60
66
  def data_component_name(trend_type)
61
- trend_type == TrendType::PERSONAL ? 'HomePersonalizedFeed' : 'NewHomeArticleTrendFeed'
67
+ trend_type == TrendType::PERSONAL ? 'HomePersonalizedFeed' : 'HomeArticleTrendFeed'
68
+ end
69
+
70
+ # Qiitaのトレンドのデータを取得する
71
+ #
72
+ # @param [Hash] trends_data トレンドデータ
73
+ # @param [TrendType] trend_type トレンドタイプ
74
+ # @return [Array] トレンドタイプによるトレンドデータ
75
+ def get_data(trends_data, trend_type)
76
+ trend_type == TrendType::PERSONAL ? trends_data['personalizedFeed']['edges'] : trends_data['trend']['edges']
62
77
  end
63
78
 
64
79
  # ユーザーの画像のURLを取得する
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QiitaTrend
4
- VERSION = '0.4.8'
4
+ VERSION = '0.4.9'
5
5
  end
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.4.8
4
+ version: 0.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - dodonki1223
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-12 00:00:00.000000000 Z
11
+ date: 2021-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize