我有一個 api 請求,我在其中獲取每部電影的提供者資料。我對其進行迭代,當我執行 provider['provider_name'] 時,它會為我提供每部電影的提供者串列,這很棒。一旦我將它放入 Content.create 方法中,它就會給出 nil。如果我在 create 方法中移動整個每個陳述句,我最終只會得到完整的哈希/陣列。不知道該去哪里。
movie_url = 'https://api.themoviedb.org/3/trending/movie/week?api_key=API_KEY&language=en-US'
2.times do |m|
contents = JSON.parse(URI.open("#{movie_url}&page=#{m 1}").read)['results']
contents.each do |content|
base_poster_url = 'https://image.tmdb.org/t/p/original'
results = JSON.parse(URI.open("https://api.themoviedb.org/3/movie/#{content['id']}/watch/providers?api_key=API_KEY&language=en-US&watch_region=GB").read)['results']
if results != {} && results["GB"] && results['GB']["flatrate"]
results['GB']['flatrate'].each do |provider|
p provider["provider_name"]
Content.create(
imdb_id: content['id'],
title: content['original_title'],
description: content['overview'],
poster: "#{base_poster_url}#{content['poster_path']}",
rating: content['vote_average'],
content_type: content['media_type'],
streaming_services: nil
)
end
puts "content created for movie: #{content['original_title']}"
end
end
end
p provider["provider_name]in 終端的輸出如下所示:
content created for movie: Chip 'n Dale: Rescue Rangers
"Sky Go"
"Now TV Cinema"
"Virgin TV Go"
content created for movie: Top Gun
"Virgin TV Go"
content created for movie: Uncharted
"Virgin TV Go"
如果我provider[provider_name"]像這樣移動到 Content.create 方法中
streaming_services: provider["provider_name"]
資料庫輸出如下所示:
content_type: "movie",
streaming_services: []
api 請求檔案如下所示
"results": {
GB": {
"link": "https://www.themoviedb.org/movie/744-top-gun/watch?locale=GB",
"buy": [
{
"display_priority": 2,
"logo_path": "/peURlLlr8jggOwK53fJ5wdQl05y.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
},
{
"display_priority": 8,
"logo_path": "/5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg",
"provider_id": 35,
"provider_name": "Rakuten TV"
},
{
"display_priority": 8,
"logo_path": "/2pCbao1J9s0DMak2KKnEzmzHni8.jpg",
"provider_id": 130,
"provider_name": "Sky Store"
},
{
"display_priority": 10,
"logo_path": "/mT9kIe6JVz72ikWJ58x0q8ckUW3.jpg",
"provider_id": 40,
"provider_name": "Chili"
},
{
"display_priority": 11,
"logo_path": "/5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg",
"provider_id": 10,
"provider_name": "Amazon Video"
},
{
"display_priority": 13,
"logo_path": "/oIkQkEkwfmcG7IGpRR1NB8frZZM.jpg",
"provider_id": 192,
"provider_name": "YouTube"
},
{
"display_priority": 48,
"logo_path": "/shq88b09gTBYC4hA7K7MUL8Q4zP.jpg",
"provider_id": 68,
"provider_name": "Microsoft Store"
}
],
"flatrate": [
{
"display_priority": 8,
"logo_path": "/fBHHXKC34ffxAsQvDe0ZJbvmTEQ.jpg",
"provider_id": 29,
"provider_name": "Sky Go"
},
{
"display_priority": 62,
"logo_path": "/nqGY5wuSv14vbY7NYOs8stJ6ZBF.jpg",
"provider_id": 591,
"provider_name": "Now TV Cinema"
},
{
"display_priority": 63,
"logo_path": "/o6li3XZrBKXSqyNRS39UQEfPTCH.jpg",
"provider_id": 594,
"provider_name": "Virgin TV Go"
}
],
"rent": [
{
"display_priority": 2,
"logo_path": "/peURlLlr8jggOwK53fJ5wdQl05y.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
},
{
"display_priority": 8,
"logo_path": "/2pCbao1J9s0DMak2KKnEzmzHni8.jpg",
"provider_id": 130,
"provider_name": "Sky Store"
},
{
"display_priority": 8,
"logo_path": "/5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg",
"provider_id": 35,
"provider_name": "Rakuten TV"
},
{
"display_priority": 10,
"logo_path": "/mT9kIe6JVz72ikWJ58x0q8ckUW3.jpg",
"provider_id": 40,
"provider_name": "Chili"
},
{
"display_priority": 11,
"logo_path": "/5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg",
"provider_id": 10,
"provider_name": "Amazon Video"
},
{
"display_priority": 13,
"logo_path": "/oIkQkEkwfmcG7IGpRR1NB8frZZM.jpg",
"provider_id": 192,
"provider_name": "YouTube"
},
{
"display_priority": 48,
"logo_path": "/shq88b09gTBYC4hA7K7MUL8Q4zP.jpg",
"provider_id": 68,
"provider_name": "Microsoft Store"
}
]
},
}
不確定我做錯了什么,并嘗試使用 map、split、flatten 以幾種不同的方式訪問它。有時會取得小小的成功。.split(",") 實際上給了我陣列,但是每部電影只有一個陣列,有些有多個提供者。我相信有更好的方法。
uj5u.com熱心網友回復:
我想你需要Content像這樣將創建移出回圈:
movie_url = 'https://api.themoviedb.org/3/trending/movie/week?api_key=API_KEY&language=en-US'
2.times do |m|
contents = JSON.parse(URI.open("#{movie_url}&page=#{m 1}").read)['results']
contents.each do |content|
base_poster_url = 'https://image.tmdb.org/t/p/original'
results = JSON.parse(URI.open("https://api.themoviedb.org/3/movie/#{content['id']}/watch/providers?api_key=API_KEY&language=en-US&watch_region=GB").read)['results']
Content.create(
imdb_id: content['id'],
title: content['original_title'],
description: content['overview'],
poster: "#{base_poster_url}#{content['poster_path']}",
rating: content['vote_average'],
content_type: content['media_type'],
streaming_services: results.dig("GB", "flatrate")&.map { |provider| provider["provider_name"] }
)
end
end
注意:如果streaming_services型別是陣列,則保持原樣。如果是字串,則join(', ')在最后添加streaming_services: results.dig("GB", "flatrate")&.map { |provider| provider["provider_name"] }&.join(', ')
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489072.html
上一篇:洗掉Logstash中的中級欄位
下一篇:RubyonRails路由問題
