【问题标题】:How to specify time for youtube api in ruby如何在 ruby​​ 中指定 youtube api 的时间
【发布时间】:2018-01-02 17:54:36
【问题描述】:

我正在编写 Ruby 脚本来与Youtube Streaming API 通信以创建直播和直播。到目前为止,我已经能够编写代码来插入新的流并且它可以工作,但是我在插入广播时遇到了问题。我收到以下错误:

/usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.8.0/lib/google/api_client.rb:652:in `block (2 levels) in execute!': Scheduled start time is required (Google::APIClient::ClientError)
    from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-1.4.1/lib/retriable/retry.rb:27:in `perform'
    from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-1.4.1/lib/retriable.rb:15:in `retriable'
    from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.8.0/lib/google/api_client.rb:635:in `block in execute!'
    from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-1.4.1/lib/retriable/retry.rb:27:in `perform'
    from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-1.4.1/lib/retriable.rb:15:in `retriable'
    from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.8.0/lib/google/api_client.rb:626:in `execute!'
    from ruby_script.rb:44:in `insert_broadcast'
    from ruby_script.rb:98:in `<main>'

所以,它抱怨我没有提到预定的开始时间。以下是相关代码:

# Create a liveBroadcast resource and set its title, scheduled start time,
# scheduled end time, and privacy status.
def insert_broadcast(client, youtube, options)
  insert_broadcast_response = client.execute!(
    api_method: youtube.live_broadcasts.insert,
    parameters: {
      part: 'snippet,status'
    },
    body_object: {
      snippet: {
        title: options[:broadcast_title],
        scheduledStartTime: options[:state_time],
        scheduledEndTime: options[:end_time]
      },
      status: {
        privacyStatus: options[:privacy_status]
      }
    }
  )

  p "Broadcast: #{insert_broadcast_response.data.id}"
  return insert_broadcast_response.id
end

options = {
  stream_title: 'stream',
  broadcast_title: 'dumdum',
  start_time: '2018-01-30T00:00:00.000Z',
  end_time: '2018-01-30T00:01:00.000Z',
  privacy_status: 'private'
}

我从 Python 中的 this 代码示例中借用的日期时间格式。我尝试使用start_time: Time.now,希望 Ruby 日期时间对象可以工作,但它没有。我该如何解决?

编辑Here's 完整的脚本。

【问题讨论】:

    标签: ruby api youtube


    【解决方案1】:

    根据@Simple-Lime 的回答修复错字,如果仍然无法正常工作,请尝试以下操作:

    您需要正确格式化您的时间: Time.now 输出是 2017-07-27 07:35:38 +0000 这是错误的。 您需要将其更改为 ISO-8601 标准的日期时间格式,并使用 Time#iso8601 时区的十进制表示法:

    require 'time'
    
    # example time format: '2014-01-30T00:00:00.000Z'
    Time.now.getutc.iso8601(3)
    # => "2017-07-27T07:30:33.742Z"
    

    【讨论】:

    • @Lokesh 更新了我的答案。现在就试试吧。
    • 您是否像他提到的那样修复了 state_time 错字?当你运行它时,你是否真的将选项传递给你的函数?
    • 现在才看到。
    • 感谢您的回答。它提供了一种很好的方式来提及传递日期而不是作为字符串。
    【解决方案2】:

    在您的代码中,您有 scheduledStartTime: options[:state_time], 并将其作为 options[:start_time] 传递给方法

    【讨论】:

    • 这就是问题所在。非常感谢!
    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2011-05-13
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多