Hello,

I'm triying to upload video to google api via direct upload
(http://code.google.com/intl/fr/apis/youtube/2.0/developers_guide_protocol.html#Direct_uploading).

I'm using an rails active resource class and would lie to handle the
video uploading in a custom method with Nett::HTTP

Here is google requirement :

POST /feeds/api/users/default/uploads HTTP/1.1
Host: uploads.gdata.youtube.com
Authorization: AuthSub token="DXAA...sdb8"
GData-Version: 2
X-GData-Key: key=adf15ee97731bca89da876c...a8dc
Slug: video-test.mp4
Content-Type: multipart/related; boundary="f93dcbA3"
Content-Length: 1941255
Connection: close

--f93dcbA3
Content-Type: application/atom+xml; charset=UTF-8

<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:media="http://search.yahoo.com/mrss/"
  xmlns:yt="http://gdata.youtube.com/schemas/2007">
  <media:group>
    <media:title type="plain">Bad Wedding Toast</media:title>
    <media:description type="plain">
      I gave a bad toast at my friend's wedding.
    </media:description>
    <media:category
      scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People
    </media:category>
    <media:keywords>toast, wedding</media:keywords>
  </media:group>
</entry>
--f93dcbA3
Content-Type: video/mp4
Content-Transfer-Encoding: binary

<Binary File Data>
--f93dcbA3--



Here is my request object before to be sent :
(irb)> y request

body: |
  --RubyMultipartClient901619ZZZZZ
  Content-Type: application/atom+xml; charset=UTF-8

  <?xml version="1.0"?>
  <entry xmlns:yt="http://gdata.youtube.com/schemas/2007"
xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/">
    <media:group>
      <media:title type="plain">test 7</media:title>
      <media:description type="plain"></media:description>
      <media:category
scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Film</media:category>
      <media:keywords></media:keywords>
    </media:group>
  </entry>
  --RubyMultipartClient901619ZZZZZ
  Content-Type: video/mp4
  Content-Transfer-Encoding: binary


  --RubyMultipartClient901619ZZZZZ--

body_stream:
header:
  slug:
  - 01.mp4
  x-gdata-key:
  -
key=AI39si57I1WXXFZSHlDFjrfUgBapS7DoJ0hPppuqgC2FY_vK-nUQ8Iw7lTUJTdqwSCstyIhSWBk-C9JI1DCQolrmVvTcj6xvLg
  content-type:
  - multipart/related; boundary="RubyMultipartClient901619ZZZZZ"
  authorization:
  - AuthSub token="1/qqpJVDJ4Gziq6pLv8tmMWgIv4zxvwk3sZP9PiVHlCt4"
  gdata-version:
  - "2"
  content-length:
  - "672"
method: POST
path: /feeds/api/users/default/uploads
request_has_body: true
response_has_body: true

I triyed to read the file and include its content in the body post, also
tryed to include it after encoding in base64
(Base64.encode64(file.read))

The request is build and sent as follow :

uri =
URI.parse("http://uploads.gdata.youtube.com/feeds/api/users/default/uploads")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.initialize_http_header(headers)
request.body = post_body
response = http.request(request)


But it keeps responding  :

#<Net::HTTPBadRequest 400 Bad Request readbody=true>

I don't know what's wrong i'm completely stuck, could you give me a hand
?
-- 
Posted via http://www.ruby-forum.com/.