qiita_trend 0.4.7 → 0.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f0ee86709a430ad4746e77fda12993c3d06166dc4c9a41402c9ff8fa36929a5
4
- data.tar.gz: d74ac15ab1d63456b775b3792cfab42747f78e88c00bcd204c97386c078e56d6
3
+ metadata.gz: ad6633f75fafb54ce0bbc8438e3f94ae716ff1001baecac98ba5f141a6d59efd
4
+ data.tar.gz: a71a9b6fd1901f0031c248d8c8a2624de99dbce2b979d44a2c28ecc8708f3aad
5
5
  SHA512:
6
- metadata.gz: 69a33d9e13ea5b645db1c111f8bcfaa592332e45054389c0fa4466eb284ffa6511437761412a49cb15e1632eacb2c509170237a8460374a0aa7a07f15017efc8
7
- data.tar.gz: 9614b80041a22274d6b317a9350acd7857fceef306f0ce726041e54c4bdd3bf96c90a9a8c154f999d6a7e4c72e2bb167ac3357c660ca4c6274a8ec08074cbf0c
6
+ metadata.gz: 06426b8b6d6118d52c612aa110c21cf6ce3553d2d1f95c1eb7c24440834c0be93aedd5144ec7d770ce03e2fcee3d83cfc19a6105ddc74902e981bbd9170ffb50
7
+ data.tar.gz: 171a7c15b21baed1f98ee3ab328d310908ce94033d7c64cc8a1bbe8c6ee7f5b37688077364852e5c90347885d6a1659a37a5a2ccc332c1e796716f5c9faa4640
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qiita_trend (0.4.7)
4
+ qiita_trend (0.5.1)
5
5
  mechanize (~> 2.7)
6
6
  nokogiri (~> 1.11)
7
7
 
@@ -38,12 +38,10 @@ GEM
38
38
  mime-types (3.3.1)
39
39
  mime-types-data (~> 3.2015)
40
40
  mime-types-data (3.2021.0225)
41
- mini_portile2 (2.5.0)
42
41
  net-http-digest_auth (1.4.1)
43
42
  net-http-persistent (4.0.1)
44
43
  connection_pool (~> 2.2)
45
44
  nokogiri (1.11.2)
46
- mini_portile2 (~> 2.5.0)
47
45
  racc (~> 1.4)
48
46
  parallel (1.20.1)
49
47
  parser (3.0.1.0)
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
@@ -23,7 +23,7 @@ module QiitaTrend
23
23
  # @param [String] date 「YYYYMMDD05」,「YYYYMMDD17」形式のどちらか
24
24
  # @raise [LoginFailureError] ログインに失敗した時に発生する
25
25
  # @raise [NotExistsCacheError] 存在しないキャッシュファイルを指定した時に発生する
26
- def initialize(trend_type = TrendType::DAILY, date = nil)
26
+ def initialize(trend_type = TrendType::NORMAL, date = nil)
27
27
  @target = Target.new(trend_type, date)
28
28
  save_cache_directory = QiitaTrend.configuration.cache_directory.nil? ? Cache::DEFAULT_CACHE_DIRECTORY : QiitaTrend.configuration.cache_directory
29
29
  @cache = Cache.new(target.cache, save_cache_directory)
@@ -16,10 +16,10 @@ module QiitaTrend
16
16
  #
17
17
  # @param [TrendType] trend_type トレンドタイプ
18
18
  # @param [String] date 「YYYYMMDD05」,「YYYYMMDD17」形式のどちらか
19
- def initialize(trend_type = TrendType::DAILY, date = nil)
19
+ def initialize(trend_type = TrendType::NORMAL, date = nil)
20
20
  @type = trend_type
21
- @url = trend_url(trend_type)
22
- @need_login = trend_type != TrendType::DAILY
21
+ @url = trend_url
22
+ @need_login = need_login?(trend_type)
23
23
  @cache = cache_name(trend_type, date)
24
24
  end
25
25
 
@@ -27,14 +27,17 @@ module QiitaTrend
27
27
 
28
28
  # トレンドのURLを取得する
29
29
  #
30
- # @param [TrendType] type トレンドタイプ
31
30
  # @return [String] トレンドを取得するQiitaのページURL
32
- def trend_url(type)
33
- case type
34
- when TrendType::DAILY then 'https://qiita.com/'
35
- when TrendType::WEEKLY then 'https://qiita.com/?scope=weekly'
36
- when TrendType::MONTHLY then 'https://qiita.com/?scope=monthly'
37
- end
31
+ def trend_url
32
+ Page::QIITA_URI
33
+ end
34
+
35
+ # Qiitaにログインが必要か
36
+ #
37
+ # @param [TrendType] trend_type トレンドタイプ
38
+ # @return [Boolean] True:Qiitaへログインが必要、False:Qiitaへログイン不要
39
+ def need_login?(trend_type)
40
+ trend_type != TrendType::NORMAL
38
41
  end
39
42
 
40
43
  # キャッシュ名を取得する
@@ -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
  #
@@ -17,11 +18,13 @@ module QiitaTrend
17
18
  # @param [String] date 「YYYYMMDD05」,「YYYYMMDD17」形式のどちらか
18
19
  # @raise [LoginFailureError] ログインに失敗した時に発生する
19
20
  # @raise [NotExistsCacheError] 存在しないキャッシュファイルを指定した時に発生する
20
- def initialize(trend_type = TrendType::DAILY, date = nil)
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
- trends_data = JSON.parse(parsed_html.xpath('//script[@data-component-name="NewHomeArticleTrendFeed"]')[0].text)
24
- @data = trends_data['trend']['edges']
25
+ xpath_str = '//script[@data-component-name="HomeIndexPage"]'
26
+ trends_data = JSON.parse(parsed_html.xpath(xpath_str)[0].text)
27
+ @data = get_data(trends_data, trend_type)
25
28
  end
26
29
 
27
30
  # Qiitaの対象のトレンドをすべて取得
@@ -43,9 +46,12 @@ module QiitaTrend
43
46
  end
44
47
 
45
48
  # Qiitaの対象のトレンドからNEWのものだけ取得
49
+ # トレンドタイプがPERSONALの場合はNEWの概念が無いのでnilである
46
50
  #
47
51
  # @return [Array] Qiitaの対象のトレンドからNEWのものだけ
48
52
  def new_items
53
+ return nil if @trend_type == TrendType::PERSONAL
54
+
49
55
  items.select do |trend|
50
56
  trend['is_new_arrival'] == true
51
57
  end
@@ -53,6 +59,15 @@ module QiitaTrend
53
59
 
54
60
  private
55
61
 
62
+ # Qiitaのトレンドのデータを取得する
63
+ #
64
+ # @param [Hash] trends_data トレンドデータ
65
+ # @param [TrendType] trend_type トレンドタイプ
66
+ # @return [Array] トレンドタイプによるトレンドデータ
67
+ def get_data(trends_data, trend_type)
68
+ trend_type == TrendType::PERSONAL ? trends_data['personalizedFeed']['personalizedFeed']['edges'] : trends_data['trend']['trend']['edges']
69
+ end
70
+
56
71
  # ユーザーの画像のURLを取得する
57
72
  # URLデコードしクエリーパラメータを排除する
58
73
  #
@@ -3,11 +3,9 @@
3
3
  module QiitaTrend
4
4
  # トレンドタイプの機能を提供する
5
5
  class TrendType
6
- # トレンドタイプ:Daily
7
- DAILY = 'daily'
8
- # トレンドタイプ:Weekly
9
- WEEKLY = 'weekly'
10
- # トレンドタイプ:Monthly
11
- MONTHLY = 'monthly'
6
+ # トレンドタイプ:Normal
7
+ NORMAL = 'normal'
8
+ # トレンドタイプ:Personal
9
+ PERSONAL = 'personal'
12
10
  end
13
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QiitaTrend
4
- VERSION = '0.4.7'
4
+ VERSION = '0.5.1'
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.7
4
+ version: 0.5.1
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-06 00:00:00.000000000 Z
11
+ date: 2021-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize