【问题标题】:Finding out the destination YouTube URL when uploading videos to YouTube via youtube_it gem with Rails使用 Rails 通过 youtube_it gem 将视频上传到 YouTube 时找出目标 YouTube URL
【发布时间】:2011-08-23 15:09:58
【问题描述】:

我已经让“youtube_it”与 Paperclip 配合使用,使用以下代码处理通过浏览器上传的视频:

videos_controller.rb

  def create
    @video = Video.new(params[:video])
    if @video.save
      uploader = YouTubeIt::Upload::VideoUpload.new( :username => AppConfig[:youtube_user], 
                                                     :password =>  AppConfig[:youtube_pass], 
                                                     :dev_key => AppConfig[:youtube_api_key])
      uploader.upload open( params[:video][:attachment] ), :title => @video.title,
                                                           :description => @video.description,
                                                           :category => 'some category',
                                                           :keywords => ['some keyword 1', "some keyword 2"]
      @video.deliver_video_notification
      flash[:notice] = 'Your video is under review for approval.<br/> Please check back in 48 hours.'
      redirect_to videos_url
    else
      @errors = @video.errors
      @current_video = params[:v].blank? ? Video.newest : Video.find(params[:v])
      render :action => :index
    end
  end

但是,一旦视频上传完毕,如果不手动登录 YouTube 频道并进行查找,我就不知道 YouTube 为该视频创建了哪个 URL。我没有在日志或显示目的地的 response.body 中看到任何回调。我想以某种 after_save 方法以编程方式保存目的地。由于它现在可以正常工作,它正在保存视频对象,并在保存后将视频上传到 youtube。

【问题讨论】:

    标签: ruby-on-rails upload youtube-api


    【解决方案1】:

    upload 方法返回一个YouTubeIt::Model::Video,它有一个player_url 属性。所以只需从upload 方法中获取返回值,然后调用player_url,瞧,你就有了视频的URL。有关模型具有的其他属性的列表,请查看source code

    例子:

    def create
      @video = Video.new(params[:video])
      if @video.save
        uploader = YouTubeIt::Upload::VideoUpload.new( :username => AppConfig[:youtube_user], 
                                                       :password =>  AppConfig[:youtube_pass], 
                                                       :dev_key => AppConfig[:youtube_api_key])
        uploaded_video = uploader.upload open( params[:video][:attachment] ), :title => @video.title,
                                                             :description => @video.description,
                                                             :category => 'some category',
                                                             :keywords => ['some keyword 1', "some keyword 2"]
    
        puts uploaded_video.player_url # This will print the URL to the log
    
        @video.deliver_video_notification
        flash[:notice] = 'Your video is under review for approval.<br/> Please check back in 48 hours.'
        redirect_to videos_url
      else
        @errors = @video.errors
        @current_video = params[:v].blank? ? Video.newest : Video.find(params[:v])
        render :action => :index
      end
    end
    

    【讨论】:

    • 非常感谢!像魅力一样工作。
    【解决方案2】:

    如何获取用户上传的视频列表,然后选择最新的?

    $ client.my_videos

    https://github.com/kylejginavan/youtube_it

    【讨论】:

    • 不错的主意。问题在于这是使用开发人员的密钥,因此所有视频都被上传到单个频道,而不是单个用户的频道。如果我们对单通道使用相同的技术,我们无法考虑视频处理时间或视频长度来假设最新上传的视频属于 Video.last。感谢您的头脑风暴
    • 1. “client = YouTubeIt::Client.new(:username => "youtube_username", :password => "youtube_passwd", :dev_key => "developer_key")" 不能让您将视频上传到用户的频道吗? 2. 您是否尝试过使用 OAuth(它说 youtube_it 支持它)。我希望我能自己验证这些,但我现在不能这样做!
    • 1.它确实允许您,但期望的行为是将所有视频上传到指定的客户端频道。
    • 另外我已经看到了 oath 方式,但我认为只能以 2 部分形式工作,我想通过创建 Video 对象一次完成所有工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2015-06-11
    相关资源
    最近更新 更多