当我创建一个新的视频资源时,我想用JavaScript脚本中的数据更新length
参数。这些是我的视频资源的所有参数:
create_table "videos", force: true do |t|
t.string "url"
t.text "name"
t.integer "playcount"
t.integer "length"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "stream_id"
t.string "video_id"
t.string "vidstring"
end
vidstring
参数是在模型中的方法中创建的:
vidstring = "http://gdata.youtube.com/feeds/api/videos/" + video_id + "?v=2&alt=jsonc&callback=youtubeFeedCallback&prettyprint=true"
这是我需要用来获取数据的代码。这些代码应该存储在哪里?
<script type="text/javascript">
function youtubeFeedCallback(json){
document.write(json["data"]["title"]);
}
</script>
<script type="text/javascript" src= <%= video.vidstring %> >
</script>
当我创建一个新的视频资源时,我如何从这个脚本中提取(json["data"]["title"])
并将其存储在"length"
参数中?
提示:提出更具描述性的问题。无论如何,它似乎youtube回答原始json(示例:http://gdata.youtube.com/feeds/api/videos/Dy9rGCS4ZHw?v=2&alt=jsonc)。你可能需要data[duration]。
正如@Puhlze所说,最好在服务器端使用回调来完成此操作。有一个用于使用YT api的ruby gem,但我认为对于这个简单的任务,这就足够了:
require 'open-uri'
class Video < ActiveRecord::Base
# more stuff omitted
before_save :get_youtube_video_duration
def get_yotube_video_duration
# duration are seconds it seems
duration = JSON.parse(
open("http://gdata.youtube.com/feeds/api/videos/#{self.video_id}?v=2&alt=jsonc").read
)['data']['duration']
self.length = duration
end
#...
检查rails回调
看起来你想在rails中收集这些youtube数据,但你在渲染视图中收集它。
如果你想在youtube上查询添加到rails模型的数据,你应该考虑使用youtube API (https://developers.google.com/youtube/v3/),这样你就可以在rails中收集这些数据,而不是在客户端/web浏览器上。