Es ist eine Rake-Aufgabe, die nach einem Künstler sucht, und wenn er existiert, speichert er ihn mit Künstleralben. Ich habe versucht, eine gem zu verwenden, aber aus irgendeinem Grund gibt das Juwel etwas zurück, das ich nicht wirklich brauche. Wenn ich einen Künstler suche, funktioniert es gut.Erstellen vieler Alben mit ActiveRecord
result = ITunesSearchAPI.lookup(:id => 372976 , :entity => 'album')
wird dies zurück:
{"wrapperType"=>"artist", "artistType"=>"Artist", "artistName"=>"ABBA", "artistLinkUrl"=>"https://itunes.apple.com/us/artist/abba/id372976?uo=4", "artistId"=>372976, "amgArtistId"=>3492, "primaryGenreName"=>"Pop", "primaryGenreId"=>14}
das ist nicht das, was ich überhaupt brauchen. Here's was ich bekommen sollte.
Also entschied ich mich, es selbst zu kodieren und dann erkannte ich, dass es ein leeres Modell speichert, alles in meinem Album ist Null. 2 Fragen:
1) Wie kann ich es beheben?
2) Wie kann ich ALLE Alben speichern, nicht nur eines?
require 'net/http'
task :artist,[""] => :environment do |t, args|
result = ITunesSearchAPI.search(:term => args.to_s, :entity => 'musicArtist')
if result.empty? then puts "Nothing was found. Try another artist."
puts result
elsif result
uniqueness = Artist.find_by(itunes_id: result[0]["artistId"])
if uniqueness.nil?
Artist.create(name: result[0]["artistName"], itunes_id: result[0]["artistId"])
puts result
else
puts "The artist already exists in database"
end
end
if uniqueness.nil?
album = URI('https://itunes.apple.com/lookup')
album_params = { :id => result[0]['artistId'], :entity => 'album'}
album.query = URI.encode_www_form(album_params)
album_response = Net::HTTP.get_response(album)
puts album_response.body
Album.create!(name: album_response.body[0]["collectionName"], artwork_url_100: album_response.body[0]["artworkUrl100"])
end
end
Schema:
ActiveRecord::Schema.define(version: 20160418120725) do
create_table "albums", force: true do |t|
t.string "name"
t.string "artwork_url_100"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "artists", force: true do |t|
t.string "name"
t.integer "itunes_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "artists", ["itunes_id"], name: "index_artists_on_itunes_id", unique: true
end
Können Sie den Schema- und Modellcode für 'Album' posten? –
@AnthonyE Sicher, aktualisiert den Beitrag. Album hat gehört zu: Künstler Das war's. – r0uder