前提・実現したいこと
Ruby:2.6.6
Rails:5.2.4
SpotifyのラッパーであるRSpotifyで、楽曲とそのアーティスト名を取得しようとしています。
発生している問題・エラーメッセージ
RSpotifyを使用して曲名を取得することはできました。
しかしその曲のアーティスト名を取得しようとすると、配列で出てくるのですが、アーティスト名のみを取り出す方法が分かりません。
アーティスト名を取得しようとするとこのコンソール上の以下の内容がそのまま出力されてしまいます。
irb(main):035:0> artist = musics.first.artists => [#<RSpotify::Artist:0x000000000c33b358 @followers=nil, @genres=nil, @images=nil, @name="Kinokoteikoku", @popularity=nil, @top_tracks= {}, @external_urls={"spotify"=>"https://open.spotify.com/artist/61H9d7hbIfFNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/artists/61H9
該当のソースコード
musics_controller
musics_controller.erb
1class MusicsController < ApplicationController 2 require 'rspotify' 3 RSpotify.authenticate(ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_SECRET_ID']) 4 5 def search 6 if params[:search].present? 7 @musics = RSpotify::Track.search(params[:search]) 8 end 9 end 10end 11
search.html.erb
search.html.erb
1<div class="col-md-8 col-md-2 mx-auto"> 2 3<!--検索窓を追加--> 4<h3>曲名で検索</h3> 5<%= form_with url: search_post_musics_path, method: :get, local: true do |form| %> 6<%= form.text_field :search %> 7<%= form.submit '曲名検索', name: nil %> 8 9<!--RSpotifyで検索した結果を表示させる--> 10 <h1>検索結果</h1> 11</div> 12 <% if @musics.present? %> 13 <% @musics.each do |music| %> 14 <div class="col-md-8 col-md-2 mx-auto"> 15 <div class="music_card"> 16 <div> 17 <%= music.name %> / <%= music.artists %> 18 <% if music.preview_url.present? %> 19 <div class="spotify_preview_url"> 20 <iframe src=<%= music.preview_url %> width="300" height="140"></iframe> 21 </div> 22 <% end %> 23 </div> 24 </div> 25 </div> 26 <% end %> 27 <% end %> 28<% end %>
試したこと
コンソール上で取得できないか試してみました。
####①配列であれば、インデックスで取り出すことができると考えました。
irb(main):024:0> artist = musics.first.artists => [#<RSpotify::Artist:0x000000000c33b358 @followers=nil, @genres=nil, @images=nil, @name="Kinokoteikoku", @popularity=nil, @top_tracks= d7hbIfFNxJJQmIL9AJ", @id="61H9d7hbIfFNxJJQmIL9AJ", @type="artist", @uri="spotify:artist:61H9d7hbIfFNxJJQmIL9AJ">] irb(main):025:0> artist = musics.first.artists[0] => #<RSpotify::Artist:0x000000000c33b358 @followers=nil, @genres=nil, @images=nil, @name="Kinokoteikoku", @popularity=nil, @top_tracks={ }, @external_urls={"spotify"=>"https://open.spotify.com/artist/61H9d7hbIfFNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/artists/61H9d irb(main):026:0> artist = musics.first.artists[1] => nil irb(main):027:0> artist = musics.first.artists[2] => nil
この方法では取り出すことができませんでした。
####②配列を分解してみることを試しました。
track.first.artists.each_slice
で分解してみました。
irb(main):024:0> track.first.artists.each_slice(1).to_a => [[#<RSpotify::Artist:0x000000000b0e4 380 @followers=nil, @genres=nil, @images=nil, @name="Kinokoteikoku", @popularity=nil, @top_tracks ={}, @external_urls={"spotify"=>"https://open.spotify.com/artist/61H9d7hbIfFNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/artists/61H 9d7hbIfFNxJJQmIL9AJ", @id="61H9d7hbIfFNxJJQmIL9AJ", @type="artist", @uri="spotify:artist:61H9d7hbIfFNxJJQmIL9AJ">]] irb(main):025:0> track.first.artists.each_slice(10).to_a => [[#<RSpotify::Artist:0x000000000b0e4380 @followers=nil, @genres=nil, @images=nil, @name="Kinokoteikoku", @popularity=nil, @top_tracks ={}, @external_urls={"spotify"=>"https://open.spotify.com/artist/61H9d7hbIfFNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/artists/61H 9d7hbIfFNxJJQmIL9AJ", @id="61H9d7hbIfFNxJJQmIL9AJ", @type="artist", @uri="spotify:artist:61H9d7hbIfFNxJJQmIL9AJ">]] irb(main):026:0> track.first.artists[1] => nil
このあとto_a
もはずしてみましたがこちらも上手くいきませんでした
####③アーティストIDから名前を取り出してみました
irb(main):018:0> artist = RSpotify::Artist.find('61H9d7hbIfFNxJJQmIL9AJ') H9d7hbIfFNxJJQmIL9AJ", @type="artist", @uri="spoti => #<RSpotify::Artist:0x000000000bff4640 @followers={"href"=>nil, "total"=>133151}, @gps://open.spotify.com/track/6Mavd9uk89Y9OTdvcDTfGG enres=["j-pop", "j-poprock", "j-rock", "japanese alternative rock", "japanese shoegaze9OTdvcDTfGG", @type="track"> "], @images=[{"height"=>640, "url"=>"https://i.scdn.co/image/c3333e441d103d483ac2a7a2a a0e8eb47d731e0c", "width"=>640}, {"height"=>320, "url"=>"https://i.scdn.co/image/4afe1 b55a917c9006ff7d80e31bf17b4c33a7aa5", "width"=>320}, {"height"=>160, "url"=>"https://ienres=["j-pop", "j-poprock", "j-rock", "japanese a .scdn.co/image/40c55d2ffe5728340d8946234a5ad1c70904baa6", "width"=>160}], @name="Kinokn.co/image/c3333e441d103d483ac2a7a2aa0e8eb47d731e0 oteikoku", @popularity=54, @top_tracks={}, @external_urls={"spotify"=>"https://open.sp7d80e31bf17b4c33a7aa5", "width"=>320}, {"height"=> otify.com/artist/61H9d7hbIfFNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/artists/6"=>160}], @name="Kinokoteikoku", @popularity=54, @ 1H9d7hbIfFNxJJQmIL9AJ", @id="61H9d7hbIfFNxJJQmIL9AJ", @type="artist", @uri="spotify:arNxJJQmIL9AJ"}, @href="https://api.spotify.com/v1/a tist:61H9d7hbIfFNxJJQmIL9AJ"> otify:artist:61H9d7hbIfFNxJJQmIL9AJ"> irb(main):019:0> artist.name => "Kinokoteikoku"
アーティストのIDから検索すれば問題ないようです。
これらの情報をもとにアーティストの配列を代入すれば取り出すことがきるのではと思ったのですが、楽曲情報との組み合わせ方、取り出し方が分かりません。
かなり初歩的な勘違いを起こしているのではと思っていますが、詰まってしまいました。
ご指摘・アドバイス等ありましたら、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/05 10:12