こちらのAPI仕様に従って、curlを使用してYouTubeにバッチアップロードしようとしています。つまり、XML形式のメタデータとContent-Typeがapplication/atom+xml; charset=UTF-8
、その後にビデオデータ自体が続くマルチパートPOSTリクエストが必要です。
私の現在のコマンドライン(upl.xmlからメタデータを取得し、upl.mkvからビデオを取得する)は次のようになります。
curl -s -F "file=@upl.xml" -F "file=@upl.mkv" -H 'GData-Version: 2' -H 'Authorization: GoogleLogin auth=<AUTH>' -H 'Slug: upl.mkv' -H 'X-GData-Key: key=<KEY>' http://uploads.gdata.youtube.com/feeds/api/users/default/uploads
で送信されている実際のリクエストを確認すると--trace
、両方のファイルが正しい順序で送信されているように見えますが、メタデータのContent-Typeはapplication/octet-stream
;に設定されています。アップロードは期待どおりに完了しますが、YouTubeは動画の処理を拒否します。
--data
、などを使用してupl.xmlを送信しようとすると--data-ascii
、--form-string
他のさまざまなエラーが発生するため、Content-Typeが正しくないことが原因であると思われます。メタデータを無視してビデオファイルを送信するだけで問題なく動作しますが、残念ながらこれでは問題は解決しません。
私はここで何かが欠けていますか?そうでない場合は、libcurlを壊さずにこれを行うことは可能ですか?