0

API v2.0 を使用して、C# Web アプリケーションから Youtube にビデオをアップロードしようとしています。

これは私が見つけたドキュメントです:

YouTube API 2.0 ドキュメント

Web アプリケーションの AuthSub を実行し、ビデオ メタデータを youtube に送信できます。その後、ブラウザベースのアップロードに必要な TOKEN と URL を読み取ることができます。

ここで、実際のアップロードを実行するために、この HTML フォームに入力する必要があります。

<form action="post_url?nexturl=http://example.com" method ="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="token" value="token_value"/>
<input type="submit" value="go" />
</form>

プログラムで「エミュレート」し、コードビハインドからこの html フォームを送信する方法の例をネットで検索しました。

これは、テスト目的でのみ記述された私の実際のコードです。

  YouTubeRequestSettings settings = new YouTubeRequestSettings("TEST_APP", "DEVELOPER_KEY", "USERNAME", "PASSWORD");
        YouTubeRequest request = new YouTubeRequest(settings);


        Video newVideo = new Video();

        newVideo.Title = "My Test Movie";
        newVideo.Tags.Add(new MediaCategory("Autos", YouTubeNameTable.CategorySchema));
        newVideo.Keywords = "cars, funny";
        newVideo.Description = "My description";
        newVideo.YouTubeEntry.Private = false;
        newVideo.Tags.Add(new MediaCategory("mydevtag, anotherdevtag", YouTubeNameTable.DeveloperTagSchema));

        FormUploadToken token_youtube = request.CreateFormUploadToken(newVideo);
        string url_per_post_youtube = token_youtube.Url + "?nexturl=" + HttpContext.Current.Request.Url.AbsoluteUri + "test.aspx"; 

        byte[] fileBytes = File.ReadAllBytes("C:\\VIDEO.MOV");
        StringBuilder sb = new StringBuilder();

        foreach (byte b in fileBytes)
        {
            sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
        }

        ASCIIEncoding encoding = new ASCIIEncoding();
        string postData = "token=" + token_youtube.Token.ToString();
        postData += ("&file=" + sb );
        byte[] data = encoding.GetBytes(postData);
        try
        {
            // Prepare web request...
            HttpWebRequest myRequest =
              (HttpWebRequest)WebRequest.Create(url_per_post_youtube);
            myRequest.Method = "POST";
            myRequest.ContentType = "multipart/form-data";
            myRequest.KeepAlive = true;
            myRequest.ContentLength = data.Length;
            Stream newStream = myRequest.GetRequestStream();
            // Send the data.
            newStream.Write(data, 0, data.Length);
            newStream.Close();

            string strResponse;
            StreamReader stIn = new StreamReader(myRequest.GetResponse().GetResponseStream());
            strResponse = stIn.ReadToEnd();
            stIn.Close();
        }
        catch (Exception ex)
        {
            string asd = ex.Message;
        }

このコードを使用すると、YouTube リモート サーバーは次のように応答します。

リモート サーバーがエラーを返しました: (400) Bad Request

400 応答コードは、不正な要求を示します。たとえば、リクエストを間違った URL に送信したり、サポートされていない、または存在しないパラメーターをリクエストに含めたりすると、400 レスポンス コードが返されます。API 応答コンテンツは、API が 400 応答コードを返した理由を説明します。

何がアペニンなのか理解する方法が見つからない

4

1 に答える 1

1

だからあなたはappenin'とは何かを理解する方法が必要ですか?最善の方法は、ツールを使用して、YouTubeに送信しているメッセージを正確に見つけることだと思います。

fiddlerは、httpトラフィックを監視する非常に便利なツールです。これにより、送信しているものを正確に確認できます。送信していると思われるメッセージを送信していないか、送信する必要のあるメッセージの形式が間違っています。これにより、これらのどれが発生したかを判断できます。

于 2013-03-05T11:51:09.487 に答える