如何使用c#在Dailymotion上传video? 有人有完整的代码吗?

我希望使用c#代码上传关于dailymotion的video,但dailymotion不提供用c#上传video的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#代码文档?

有人有正确的代码吗?

我创建了一个完整的示例来回答您的问题并上传video。 它现在可以在GitHub上找到 。

编辑:我使用了可用的API信息来解释如何进行OAuth身份validation和video发布 。

以下是除了从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(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(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(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(urlResponse).upload_url; return response; } 

再次, 我把它放在GitHub上 。