質問編集履歴
3
言語の追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
2
文の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,19 +8,9 @@
|
|
8
8
|
|
9
9
|
### 発生している問題・エラーメッセージ
|
10
10
|
|
11
|
-
```
|
12
|
-
|
13
|
-
エラーメッセージ
|
14
11
|
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
### 該当のソースコード
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
```
|
13
|
+
```Ruby on rails
|
24
14
|
|
25
15
|
ソースコード
|
26
16
|
|
@@ -38,9 +28,7 @@
|
|
38
28
|
|
39
29
|
<div class="col-md-12 px-0 row">
|
40
30
|
|
41
|
-
<%= f.text_field :
|
31
|
+
<%= f.text_field :search, :value => @keyword %>
|
42
|
-
|
43
|
-
<%= f.select :views, {'1万以上': 1, '10万以上': 2, '100万以上':3}, { :include_blank => "指定してください▼" }, :required => true %>
|
44
32
|
|
45
33
|
<%= f.submit'検索', class: 'btn btn-primary' %>
|
46
34
|
|
@@ -74,8 +62,6 @@
|
|
74
62
|
|
75
63
|
<% @results.items.each do |item| %>
|
76
64
|
|
77
|
-
<% id = item.id %>
|
78
|
-
|
79
65
|
<% snippet = item.snippet %>
|
80
66
|
|
81
67
|
<p><%= snippet.title %></p>
|
@@ -108,11 +94,11 @@
|
|
108
94
|
|
109
95
|
before_action :require_user_logged_in, only: [:index]
|
110
96
|
|
111
|
-
|
97
|
+
require 'google/apis/youtube_v3'
|
112
98
|
|
113
99
|
def index
|
114
100
|
|
115
|
-
@results = find_videos(
|
101
|
+
@results = find_videos(@keyword)
|
116
102
|
|
117
103
|
end
|
118
104
|
|
@@ -124,13 +110,13 @@
|
|
124
110
|
|
125
111
|
|
126
112
|
|
127
|
-
def find_videos(keyword, after:
|
113
|
+
def find_videos(keyword, after: 7.months.ago, before: Time.now)
|
128
114
|
|
129
|
-
service = Google::Apis::YoutubeV3::YouTubeService.new
|
115
|
+
service = Google::Apis::YoutubeV3::YouTubeService.new
|
130
116
|
|
131
|
-
service.key = GOOGLE_API_KEY
|
117
|
+
service.key = GOOGLE_API_KEY
|
132
118
|
|
133
|
-
next_page_token = nil
|
119
|
+
next_page_token = nil
|
134
120
|
|
135
121
|
opt = {
|
136
122
|
|
@@ -138,7 +124,7 @@
|
|
138
124
|
|
139
125
|
type: 'video',
|
140
126
|
|
141
|
-
max_results:
|
127
|
+
max_results: 1,
|
142
128
|
|
143
129
|
order: :date,
|
144
130
|
|
@@ -150,11 +136,11 @@
|
|
150
136
|
|
151
137
|
}
|
152
138
|
|
139
|
+
@keyword = opt[:q]
|
140
|
+
|
153
141
|
service.list_searches(:snippet, opt)
|
154
142
|
|
155
143
|
end
|
156
|
-
|
157
|
-
|
158
144
|
|
159
145
|
end
|
160
146
|
|
1
誤字がありましたので修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
Ruby on RailsでYoutubeAPIを用いてキーワード検索や総再生回数を絞り込むフィルター使った検索サイトを作りたいのですが、Youtubeapiと検索機能の紐付けがよくわかりません。
|
4
4
|
|
5
|
+
実現したいのはfind_videosメソッドをindex.html.erbの:keywordと連動するようにしたいです。
|
6
|
+
|
5
7
|
■■な機能を実装中に以下のエラーメッセージが発生しました。
|
6
|
-
|
7
|
-
自分なりに検索機能を実装中に下記のエラーが発生しました。
|
8
8
|
|
9
9
|
### 発生している問題・エラーメッセージ
|
10
10
|
|
@@ -12,27 +12,7 @@
|
|
12
12
|
|
13
13
|
エラーメッセージ
|
14
14
|
|
15
|
-
NoMethodError in Toppages#index
|
16
15
|
|
17
|
-
Showing /home/ec2-user/environment/Mytube/app/views/toppages/index.html.erb where line #24 raised:
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
undefined method `each' for nil:NilClass
|
22
|
-
|
23
|
-
Extracted source (around line #24):
|
24
|
-
|
25
|
-
23tbody>
|
26
|
-
|
27
|
-
24 <% @videos.each do |video| %>
|
28
|
-
|
29
|
-
25 <tr><td><%= video.snippet.title %></td><td>
|
30
|
-
|
31
|
-
26 <% end %>
|
32
|
-
|
33
|
-
27 </tbody>
|
34
|
-
|
35
|
-
```
|
36
16
|
|
37
17
|
|
38
18
|
|
@@ -54,11 +34,11 @@
|
|
54
34
|
|
55
35
|
<form class="form-inline">
|
56
36
|
|
57
|
-
<%= form_with
|
37
|
+
<%= form_with url: '/', method: :get, local: true do |f| %>
|
58
38
|
|
59
39
|
<div class="col-md-12 px-0 row">
|
60
40
|
|
61
|
-
<%= f.text_field :keyword %>
|
41
|
+
<%= f.text_field :keyword, :value => @results %>
|
62
42
|
|
63
43
|
<%= f.select :views, {'1万以上': 1, '10万以上': 2, '100万以上':3}, { :include_blank => "指定してください▼" }, :required => true %>
|
64
44
|
|
@@ -80,9 +60,7 @@
|
|
80
60
|
|
81
61
|
<tr>
|
82
62
|
|
83
|
-
<th>Video</th>
|
63
|
+
<th>Videos</th>
|
84
|
-
|
85
|
-
<th>Views</th>
|
86
64
|
|
87
65
|
</tr>
|
88
66
|
|
@@ -92,11 +70,23 @@
|
|
92
70
|
|
93
71
|
<tbody>
|
94
72
|
|
95
|
-
|
73
|
+
<td>
|
96
74
|
|
97
|
-
<
|
75
|
+
<% @results.items.each do |item| %>
|
98
76
|
|
99
|
-
<% e
|
77
|
+
<% id = item.id %>
|
78
|
+
|
79
|
+
<% snippet = item.snippet %>
|
80
|
+
|
81
|
+
<p><%= snippet.title %></p>
|
82
|
+
|
83
|
+
<p><%= snippet.channel_title %></p>
|
84
|
+
|
85
|
+
<div><iframe width="560" height="315" src="https://www.youtube.com/embed/<%= item.id.video_id %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
|
86
|
+
|
87
|
+
<% end %>
|
88
|
+
|
89
|
+
</td>
|
100
90
|
|
101
91
|
</tbody>
|
102
92
|
|
@@ -110,18 +100,70 @@
|
|
110
100
|
|
111
101
|
<% end %>
|
112
102
|
|
103
|
+
|
104
|
+
|
105
|
+
toppages_controller
|
106
|
+
|
107
|
+
class ToppagesController < ApplicationController
|
108
|
+
|
109
|
+
before_action :require_user_logged_in, only: [:index]
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
def index
|
114
|
+
|
115
|
+
@results = find_videos('')
|
116
|
+
|
113
|
-
|
117
|
+
end
|
114
118
|
|
115
119
|
|
116
120
|
|
117
|
-
|
121
|
+
private
|
122
|
+
|
123
|
+
GOOGLE_API_KEY =ENV['KEY']
|
118
124
|
|
119
125
|
|
120
126
|
|
121
|
-
|
127
|
+
def find_videos(keyword, after: 1.months.ago, before: Time.now)
|
122
128
|
|
123
|
-
|
129
|
+
service = Google::Apis::YoutubeV3::YouTubeService.new
|
130
|
+
|
131
|
+
service.key = GOOGLE_API_KEY
|
132
|
+
|
133
|
+
next_page_token = nil
|
134
|
+
|
135
|
+
opt = {
|
136
|
+
|
137
|
+
q: keyword,
|
138
|
+
|
139
|
+
type: 'video',
|
140
|
+
|
141
|
+
max_results: 2,
|
142
|
+
|
143
|
+
order: :date,
|
144
|
+
|
145
|
+
page_token: next_page_token,
|
146
|
+
|
147
|
+
published_after: after.iso8601,
|
148
|
+
|
149
|
+
published_before: before.iso8601
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
service.list_searches(:snippet, opt)
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
```
|
124
162
|
|
125
163
|
### 補足情報(FW/ツールのバージョンなど)
|
126
164
|
|
127
165
|
使っているツールはAWSです。
|
166
|
+
|
167
|
+
find_videosメソッドはこの方の記事を参考にしました。
|
168
|
+
|
169
|
+
https://qiita.com/sakakinn/items/46c0d4945e4646f346f6
|