YouTube Data API를 사용하여 과거에 사용자가 높은 평가를 받은 동영상 가져오기
15794 단어 루비RailsYoutubeDataAPIv3api
【Rails】YouTube Data API를 이용, OAuth2.0의 인증을 사용해 동영상을 취득
루비 버전 2.5.8
Rails version 6.1.1
rails new 를 한 전제로 이야기를 진행합니다. 자신이 이 api를 사용해 인증 기능을 사용해 동영상을 view에 낼 때까지 꽤 고생했기 때문에 남겨 둡니다.
완성 이미지
・과거에 자신의 계정으로 고평가한 동영상을 view에 표시할 수 있다
・view의 디자인은 여러분 적당히 만들어 보세요. 나는 youtube의 디자인으로 파크리했다.
이 기사에는 7단계가 있습니다.
1 API 키 발급
먼저 apikey를 발행합니다.
이름은 무엇이든 좋지만 YouTube 데이터 API v3에서만 애플리케이션 제한을 사용하지 않고 API 제한을 게시합니다.
2 OAuth 2.0 클라이언트 ID 발급
자격 증명 만들기를 클릭하고 API 키 아래에 있는 OAuth 클라이언트 ID를 선택하여 만듭니다.
리디렉션 URI를 채워 둡니다. 승인을 돌파한 후 어떤 페이지로 되돌아갈지입니다.
나는 개발 환경에서 http://localhost:3000/로 해 두었습니다.
3 gem 세트, 컨트롤러 설정
gem 'google-api-client', '0.9.20', require: 'google/apis/youtube_v3'
gem 'googleauth'
bundle install
컨트롤러에 api, json을 사용할 수 있도록 설명
컨트롤러가 늘어나도 번거롭지 않게 ApplicationController에 일단 쓰고 있습니다
class ApplicationController < ActionController::Base
require 'net/http'
require 'uri'
require 'json'
CLIENT_SECRET = ENV['CLIENT_SECRET']
@@service = Google::Apis::YoutubeV3::YouTubeService.new
@@service.key = ENV['GOOGLE_APP_SECRET']
end
여기에서 가이드에 따라 만들어 가자.
4 view에서 OAuth로 인증 보내기
<%# アカウント認証するとcode発行 %>
<%= link_to "このボックスをクリックしgoogleアカウントを認証するとアプリが使えます", "https://accounts.google.com/o/oauth2/auth?client_id=あなたのクライアントID&redirect_uri=リダイレクトURI&scope=https://www.googleapis.com/auth/youtube&response_type=code", class:'side-bar-menu__bottom__oauth'%>
auth? 다음에 매개 변수를 연결합니다. scope는 이번 youtube로 움직이기 때문에 불필요한 것은 붙이지 않고 youtube만으로 해 둡니다.
5 code 매개 변수 처리, 액세스 토큰 획득
그리고 승인을 돌파해 오면 code 파라미터를 돌려주므로 액세스 토큰으로 교환하겠습니다.
def get_access_token
# OAuth 2.0 の承認を突破した段階でurlのcode=~~の部分を取得
# redirect_codeは後にアクセストークン、更新トークンと交換
# リクエスト送信に必要なため
response_hash = URI.decode_www_form(request.fullpath).to_h
redirect_code = response_hash['/?code']
# parseでuriを区切れるようになる
uri = URI.parse('https://accounts.google.com/o/oauth2/token')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
# POST リクエストを https://accounts.google.com/o/oauth2/token に送信
headers = { 'Contant-Type' => 'application/x-www-form-urlencoded' }
params = {
code: "#{redirect_code}",
client_id:
'あなたのクライアントID',
client_secret: "#{CLIENT_SECRET}",
redirect_uri: '好きなリダイレクト先',
grant_type: 'authorization_code',
}
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(params)
req.initialize_http_header(headers)
# リクエストのレスポンスからトークン取得
response = http.request(req)
@access_token = JSON.parse(response.body)['access_token']
return @access_token
end
코드는 아래 스크린 샷의 말한대로입니다.
각 키를 params 해시로 사용하여 요청을 보냅니다.
6 YouTube Data API 호출
동영상 가져오기
다양한 파라미터가 제공됩니다.
my_rating 등은 승인된 요청만을 위해 이러한 방식으로 액세스 토큰을 얻고 처리해야 하는 것 같습니다.
※my_rating,max_results는 바꾸기 쉽도록 변수에 넣고 있습니다만 그렇게 하지 않아도 괜찮습니다.
공식적으로 "액세스 토큰을 Authorization: Bearer HTTP 요청 헤더의 값으로 지정합니다. 이는 권장되는 방법입니다."라고 합니다.
※ 또, 나의 경우는 동영상을 조금이라도 랜덤으로 돌려주고 싶었기 때문에 @items 애초에 50그루도 들어오지 않아도 괜찮습니다.
무과금이라면 1일의 요청량이 정해져 있고 나도 제한되는 날이 계속되어 위축되었으므로
def youtube_data_api
get_access_token
if @access_token
option = { my_rating: 'like', max_results: 50 }
uri =
URI.parse(
"https://www.googleapis.com/youtube/v3/videos?part=snippet&maxResults=#{
option[:max_results]
}&myRating=#{option[:my_rating]}",
)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
headers = { 'Authorization' => "Bearer #{@access_token}" }
# request_uriはyoutube/v3/videos?part=snippet&maxResults=#{option[:max_results]}&myRating=#{option[:my_rating]}を指す
req = Net::HTTP::Get.new(uri.request_uri)
req.initialize_http_header(headers)
# エンコード→操作しやすいようにハッシュに
response = https.request(req)
response = response.body.force_encoding('UTF-8')
response = JSON.parse(response)
# ランダムに5つの動画を返す
@items = response['items'].shuffle[0..4]
return @items
end
end
7 응답을 view에 표시
<% @items.each do |i| %>
<iframe class="youtube__screen-frame" width="889" height="500" src="https://www.youtube.com/embed/<%= i['id'] %>" frameborder="no"allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<% end %>
참고 사이트
data api 공식 (가이드, 참조)
【Ruby on Rails】 가장 이해하기 쉬운 YouTube API 사용법
Reference
이 문제에 관하여(YouTube Data API를 사용하여 과거에 사용자가 높은 평가를 받은 동영상 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/engineer_kota_jp/items/9d067729e5c77e29f207
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1 API 키 발급
먼저 apikey를 발행합니다.
이름은 무엇이든 좋지만 YouTube 데이터 API v3에서만 애플리케이션 제한을 사용하지 않고 API 제한을 게시합니다.
2 OAuth 2.0 클라이언트 ID 발급
자격 증명 만들기를 클릭하고 API 키 아래에 있는 OAuth 클라이언트 ID를 선택하여 만듭니다.
리디렉션 URI를 채워 둡니다. 승인을 돌파한 후 어떤 페이지로 되돌아갈지입니다.
나는 개발 환경에서 http://localhost:3000/로 해 두었습니다.
3 gem 세트, 컨트롤러 설정
gem 'google-api-client', '0.9.20', require: 'google/apis/youtube_v3'
gem 'googleauth'
bundle install
컨트롤러에 api, json을 사용할 수 있도록 설명
컨트롤러가 늘어나도 번거롭지 않게 ApplicationController에 일단 쓰고 있습니다
class ApplicationController < ActionController::Base
require 'net/http'
require 'uri'
require 'json'
CLIENT_SECRET = ENV['CLIENT_SECRET']
@@service = Google::Apis::YoutubeV3::YouTubeService.new
@@service.key = ENV['GOOGLE_APP_SECRET']
end
여기에서 가이드에 따라 만들어 가자.
4 view에서 OAuth로 인증 보내기
<%# アカウント認証するとcode発行 %>
<%= link_to "このボックスをクリックしgoogleアカウントを認証するとアプリが使えます", "https://accounts.google.com/o/oauth2/auth?client_id=あなたのクライアントID&redirect_uri=リダイレクトURI&scope=https://www.googleapis.com/auth/youtube&response_type=code", class:'side-bar-menu__bottom__oauth'%>
auth? 다음에 매개 변수를 연결합니다. scope는 이번 youtube로 움직이기 때문에 불필요한 것은 붙이지 않고 youtube만으로 해 둡니다.
5 code 매개 변수 처리, 액세스 토큰 획득
그리고 승인을 돌파해 오면 code 파라미터를 돌려주므로 액세스 토큰으로 교환하겠습니다.
def get_access_token
# OAuth 2.0 の承認を突破した段階でurlのcode=~~の部分を取得
# redirect_codeは後にアクセストークン、更新トークンと交換
# リクエスト送信に必要なため
response_hash = URI.decode_www_form(request.fullpath).to_h
redirect_code = response_hash['/?code']
# parseでuriを区切れるようになる
uri = URI.parse('https://accounts.google.com/o/oauth2/token')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
# POST リクエストを https://accounts.google.com/o/oauth2/token に送信
headers = { 'Contant-Type' => 'application/x-www-form-urlencoded' }
params = {
code: "#{redirect_code}",
client_id:
'あなたのクライアントID',
client_secret: "#{CLIENT_SECRET}",
redirect_uri: '好きなリダイレクト先',
grant_type: 'authorization_code',
}
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(params)
req.initialize_http_header(headers)
# リクエストのレスポンスからトークン取得
response = http.request(req)
@access_token = JSON.parse(response.body)['access_token']
return @access_token
end
코드는 아래 스크린 샷의 말한대로입니다.
각 키를 params 해시로 사용하여 요청을 보냅니다.
6 YouTube Data API 호출
동영상 가져오기
다양한 파라미터가 제공됩니다.
my_rating 등은 승인된 요청만을 위해 이러한 방식으로 액세스 토큰을 얻고 처리해야 하는 것 같습니다.
※my_rating,max_results는 바꾸기 쉽도록 변수에 넣고 있습니다만 그렇게 하지 않아도 괜찮습니다.
공식적으로 "액세스 토큰을 Authorization: Bearer HTTP 요청 헤더의 값으로 지정합니다. 이는 권장되는 방법입니다."라고 합니다.
※ 또, 나의 경우는 동영상을 조금이라도 랜덤으로 돌려주고 싶었기 때문에 @items 애초에 50그루도 들어오지 않아도 괜찮습니다.
무과금이라면 1일의 요청량이 정해져 있고 나도 제한되는 날이 계속되어 위축되었으므로
def youtube_data_api
get_access_token
if @access_token
option = { my_rating: 'like', max_results: 50 }
uri =
URI.parse(
"https://www.googleapis.com/youtube/v3/videos?part=snippet&maxResults=#{
option[:max_results]
}&myRating=#{option[:my_rating]}",
)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
headers = { 'Authorization' => "Bearer #{@access_token}" }
# request_uriはyoutube/v3/videos?part=snippet&maxResults=#{option[:max_results]}&myRating=#{option[:my_rating]}を指す
req = Net::HTTP::Get.new(uri.request_uri)
req.initialize_http_header(headers)
# エンコード→操作しやすいようにハッシュに
response = https.request(req)
response = response.body.force_encoding('UTF-8')
response = JSON.parse(response)
# ランダムに5つの動画を返す
@items = response['items'].shuffle[0..4]
return @items
end
end
7 응답을 view에 표시
<% @items.each do |i| %>
<iframe class="youtube__screen-frame" width="889" height="500" src="https://www.youtube.com/embed/<%= i['id'] %>" frameborder="no"allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<% end %>
참고 사이트
data api 공식 (가이드, 참조)
【Ruby on Rails】 가장 이해하기 쉬운 YouTube API 사용법
Reference
이 문제에 관하여(YouTube Data API를 사용하여 과거에 사용자가 높은 평가를 받은 동영상 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/engineer_kota_jp/items/9d067729e5c77e29f207텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)