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 +4 -4
- data/Gemfile.lock +1 -3
- data/README.md +42 -36
- data/lib/qiita_trend/configuration.rb +3 -3
- data/lib/qiita_trend/page.rb +1 -1
- data/lib/qiita_trend/target.rb +13 -10
- data/lib/qiita_trend/trend.rb +18 -3
- data/lib/qiita_trend/trend_type.rb +4 -6
- data/lib/qiita_trend/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad6633f75fafb54ce0bbc8438e3f94ae716ff1001baecac98ba5f141a6d59efd
|
4
|
+
data.tar.gz: a71a9b6fd1901f0031c248d8c8a2624de99dbce2b979d44a2c28ecc8708f3aad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
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ページをスクレイピングし
|
11
|
+
- [Qiita](https://qiita.com/)のTOPページをスクレイピングしTOPページに表示されているトレンドを取得します
|
12
12
|
- [Qiita](https://qiita.com/)のAPIにトレンドを取得する方法がないため
|
13
|
-
-
|
14
|
-
-
|
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
|
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
|
-
###
|
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
|
-
###
|
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
|
-
###
|
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
|
-
###
|
100
|
+
### 通常トレンドを取得する
|
101
101
|
|
102
102
|
```ruby
|
103
|
-
|
103
|
+
normal_trend = QiitaTrend::Trend.new
|
104
104
|
|
105
|
-
#
|
106
|
-
p
|
105
|
+
# 通常トレンドを全て取得する
|
106
|
+
p normal_trend.items
|
107
107
|
|
108
|
-
#
|
109
|
-
p
|
108
|
+
# 通常トレンドでNEWのものだけを取得する
|
109
|
+
p normal_trend.new_items
|
110
110
|
```
|
111
111
|
|
112
|
-
###
|
112
|
+
### ユーザートレンドを取得する
|
113
113
|
|
114
|
-
|
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
|
-
#
|
125
|
-
|
126
|
-
p
|
127
|
-
|
124
|
+
# ユーザーのレンドを取得
|
125
|
+
personal_trend = QiitaTrend::Trend.new(QiitaTrend::TrendType::PERSONAL)
|
126
|
+
p personal_trend.items
|
127
|
+
```
|
128
|
+
|
129
|
+
ログインするユーザーとパスワードは環境変数に設定することもできます
|
128
130
|
|
129
|
-
|
130
|
-
|
131
|
-
|
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
|
-
|
139
|
+
ユーザートレンドの取得方法も通常トレンドと同様です
|
139
140
|
|
140
141
|
```ruby
|
141
|
-
# 2019年8月8日5
|
142
|
-
|
142
|
+
# 2019年8月8日5時更新分の通常トレンドを取得する
|
143
|
+
normal_trend_05 = QiitaTrend::Trend.new(QiitaTrend::TrendType::NORMAL, '2019080805')
|
143
144
|
|
144
|
-
p
|
145
|
-
p
|
145
|
+
p normal_trend_05.items
|
146
|
+
p normal_trend_05.new_items
|
146
147
|
|
147
|
-
# 2019年8月8日17時更新分の
|
148
|
-
|
148
|
+
# 2019年8月8日17時更新分のnormalのトレンドを取得する
|
149
|
+
normal_trend_17 = QiitaTrend::Trend.new(QiitaTrend::TrendType::NORMAL, '2019080817')
|
149
150
|
|
150
|
-
p
|
151
|
-
p
|
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
|
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/
|
239
|
-
/Users/dodonki1223/qiita_cache/
|
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 =
|
27
|
-
@password =
|
28
|
-
@cache_directory =
|
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
|
data/lib/qiita_trend/page.rb
CHANGED
@@ -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::
|
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)
|
data/lib/qiita_trend/target.rb
CHANGED
@@ -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::
|
19
|
+
def initialize(trend_type = TrendType::NORMAL, date = nil)
|
20
20
|
@type = trend_type
|
21
|
-
@url = trend_url
|
22
|
-
@need_login = trend_type
|
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
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
# キャッシュ名を取得する
|
data/lib/qiita_trend/trend.rb
CHANGED
@@ -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::
|
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
|
-
|
24
|
-
|
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
|
-
# トレンドタイプ:
|
7
|
-
|
8
|
-
# トレンドタイプ:
|
9
|
-
|
10
|
-
# トレンドタイプ:Monthly
|
11
|
-
MONTHLY = 'monthly'
|
6
|
+
# トレンドタイプ:Normal
|
7
|
+
NORMAL = 'normal'
|
8
|
+
# トレンドタイプ:Personal
|
9
|
+
PERSONAL = 'personal'
|
12
10
|
end
|
13
11
|
end
|
data/lib/qiita_trend/version.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.
|
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-
|
11
|
+
date: 2021-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|