c# - 如何使用 C# 在 Dailymotion 上上传视频?有人有完整的代码吗?

标签 c# asp.net

我想用 c# 代码在 dailymotion 上上传视频,但是 dailymotion 不提供 c# 代码来用 c# 上传视频。

我在 dailymotion 文档 api 上搜索,我发现这不是明确的 curl 代码:

curl -F 'access_token=...' \
     -F 'url=http://upload-02.dailymotion.com/files/5ccb48b8e8aef3fcb8959739f993e1b9.3gp' \
     https://api.dailymotion.com/me/videos

我尝试转置但它不起作用:

 string contentFile = "c:\name_of_my_video_file.flv";
            byte[] byteArray = Encoding.ASCII.GetBytes(contentFile);
            MemoryStream fs = new MemoryStream(byteArray);

            // Provide the WebPermission Credintials
            // Create a request using a URL that can receive a post. 
            string uri = "https://api.dailymotion.com/me/videos";
            WebRequest request = WebRequest.Create(uri);
            // Set the Method property of the request to POST.
            request.Method = "POST";
            request.Credentials = new NetworkCredential("logindailymotion","passworddailymotion");

            // Create POST data and convert it to a byte array.
            string postData = "access_token=my_api_key&url=http://upload-02.dailymotion.com/files/name_of_my_video_file.flv";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.

            // Notify the server about the size of the uploaded file
            request.ContentLength = fs.Length;

            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;

            // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
            //FileStream fs = fileInf.OpenRead();

            try
            {
                // Stream to which the file to be upload is written
                Stream strm = request.GetRequestStream();

                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);

                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }

                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

是否有更好的 C# 代码文档?

有人有正确的密码吗?

最佳答案

我创建了一个完整的示例来回答您的问题并上传视频。可用on GitHub现在。

编辑:我使用了可用的 API 信息来解释如何执行他们的 OAuth AuthenticationVideo Publishing .

这是除了从JSON反序列化的对象之外的所有代码:

代码

    static void Main(string[] args)
    {
        var accessToken = GetAccessToken();
        Authorize(accessToken);

        Console.WriteLine("Access token is " + accessToken);

        var fileToUpload = @"C:\Program Files\Common Files\Microsoft Shared\ink\en-US\join.avi";

        Console.WriteLine("File to upload is " + fileToUpload);

        var uploadUrl = GetFileUploadUrl(accessToken);

        Console.WriteLine("Posting to " + uploadUrl);

        var response = GetFileUploadResponse(fileToUpload, accessToken, uploadUrl);

        Console.WriteLine("Response:\n");

        Console.WriteLine(response + "\n");

        Console.WriteLine("Publishing video.\n");
        var uploadedResponse = PublishVideo(response, accessToken);

        Console.WriteLine(uploadedResponse);

        Console.WriteLine("Done. Press enter to exit.");
        Console.ReadLine();
    }

    private static UploadResponse GetFileUploadResponse(string fileToUpload, string accessToken, string uploadUrl)
    {
        var client = new WebClient();
        client.Headers.Add("Authorization", "OAuth " + accessToken);

        var responseBytes = client.UploadFile(uploadUrl, fileToUpload);

        var responseString = Encoding.UTF8.GetString(responseBytes);

        var response = JsonConvert.DeserializeObject<UploadResponse>(responseString);

        return response;
    }

    private static UploadedResponse PublishVideo(UploadResponse uploadResponse, string accessToken)
    {
        var request = WebRequest.Create("https://api.dailymotion.com/me/videos?url=" + HttpUtility.UrlEncode(uploadResponse.url));
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.Headers.Add("Authorization", "OAuth " + accessToken);

        var requestString = String.Format("title={0}&tags={1}&channel={2}&published={3}",
            HttpUtility.UrlEncode("some title"),
            HttpUtility.UrlEncode("tag1"),
            HttpUtility.UrlEncode("news"),
            HttpUtility.UrlEncode("true"));

        var requestBytes = Encoding.UTF8.GetBytes(requestString);

        var requestStream = request.GetRequestStream();

        requestStream.Write(requestBytes, 0, requestBytes.Length);

        var response = request.GetResponse();

        var responseStream = response.GetResponseStream();
        string responseString;
        using (var reader = new StreamReader(responseStream))
        {
            responseString = reader.ReadToEnd();
        }

        var uploadedResponse = JsonConvert.DeserializeObject<UploadedResponse>(responseString);
        return uploadedResponse;
    }

    private static string GetAccessToken()
    {
        var request = WebRequest.Create("https://api.dailymotion.com/oauth/token");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        var requestString = String.Format("grant_type=password&client_id={0}&client_secret={1}&username={2}&password={3}",
            HttpUtility.UrlEncode(SettingsProvider.Key),
            HttpUtility.UrlEncode(SettingsProvider.Secret),
            HttpUtility.UrlEncode(SettingsProvider.Username),
            HttpUtility.UrlEncode(SettingsProvider.Password));

        var requestBytes = Encoding.UTF8.GetBytes(requestString);

        var requestStream = request.GetRequestStream();

        requestStream.Write(requestBytes, 0, requestBytes.Length);

        var response = request.GetResponse();

        var responseStream = response.GetResponseStream();
        string responseString;
        using (var reader = new StreamReader(responseStream))
        {
            responseString = reader.ReadToEnd();
        }

        var oauthResponse = JsonConvert.DeserializeObject<OAuthResponse>(responseString);

        return oauthResponse.access_token;
    }

    private static void Authorize(string accessToken)
    {
        var authorizeUrl = String.Format("https://api.dailymotion.com/oauth/authorize?response_type=code&client_id={0}&scope=read+write+manage_videos+delete&redirect_uri={1}",
            HttpUtility.UrlEncode(SettingsProvider.Key),
            HttpUtility.UrlEncode(SettingsProvider.CallbackUrl));

        Console.WriteLine("We need permissions to upload. Press enter to open web browser.");
        Console.ReadLine();

        Process.Start(authorizeUrl);

        var client = new WebClient();
        client.Headers.Add("Authorization", "OAuth " + accessToken);

        Console.WriteLine("Press enter once you have authenticated and been redirected to your callback URL");
        Console.ReadLine();
    }

    private static string GetFileUploadUrl(string accessToken)
    {
        var client = new WebClient();
        client.Headers.Add("Authorization", "OAuth " + accessToken);

        var urlResponse = client.DownloadString("https://api.dailymotion.com/file/upload");

        var response = JsonConvert.DeserializeObject<UploadRequestResponse>(urlResponse).upload_url;

        return response;
    }

再次,I put it on GitHub .

关于c# - 如何使用 C# 在 Dailymotion 上上传视频?有人有完整的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969219/

相关文章:

c# - 定义了重复的 'entityFramework' 部分 - EntityFramework6 升级

c# - ASPxGridView 每页行数

javascript - 在 Response.End() 之后关闭窗口?

asp.net - 选择 Accordion 选项卡时切换子元素的类

c# - 在 SelectList 中设置自定义文本字段

c# - DataTable 上的表达式树

asp.net - 无法为网站禁用 SSL

c# - FileUpload.HasFile 错误地返回 false

c# - 绘制圆后如何将其视为控件? - 移动和选择形状

c# - PhluffyFotos 不适用于 Azure SDK 1.3