使用JavaScript脚本作为更新资源参数的函数?

时间:2014-05-16 20:19:41

标签: javascript ruby-on-rails ruby json youtube-api

当我创建新的视频资源时,我想用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"参数中?

2 个答案:

答案 0 :(得分:1)

提示:提出更具描述性的问题。无论如何,似乎youtube用原始json回答(例如:http://gdata.youtube.com/feeds/api/videos/Dy9rGCS4ZHw?v=2&alt=jsonc)。您可能需要数据[持续时间]。

正如@Puhlze所说,最好在服务器端通过回调来做到这一点。有a ruby gem for consuming the YT api,但我认为这个简单的任务就足够了:

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 callbacks

答案 1 :(得分:0)

看起来你想在rails中使用这个youtube数据,但是你在渲染视图中收集它。

如果您想在youtube上查询要添加到rails模型的数据,您应该考虑使用YouTube API(https://developers.google.com/youtube/v3/),以便您可以在rails中收集此数据,而不是在客户端/ Web浏览器上收集