1

これはコードです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Google.GData.Client;
using Google.GData.Extensions;
using Google.GData.Extensions.MediaRss;
using Google.GData.YouTube;
using Google.YouTube;



namespace YoutubeTesting
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }

        YouTubeRequestSettings settings;
        YouTubeRequest request;
        string devkey = "AI39si6xhSQXx95FTYIACWPfq-lLIphblgaReuz9z6VEjR1Q6YjrV6FRN2U6FN6P6-lGF2OYaUZhCVOKJ_MCk4o6kPeUszvf5A";
        string username = "tbout72";
        string password = "password here";


        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                settings = new YouTubeRequestSettings("You Manager", devkey, username, password);
                request = new YouTubeRequest(settings);
                Video video = new Video();
                video.Title = "test";
                video.Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema));
                video.Keywords = "Comedy";
                video.Private = false;
                video.MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV");
                request.Upload(video);
                MessageBox.Show("Successfully Uploaded");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

http://code.google.com/p/google-gdata/downloads/listからいくつかの dll ファイルを参照し ました 。Google_Data_API_Setup_1.9.0.0.msi Google Data API Setup (1.9) と YouTube_SDK_1.9.0 の 2 つのファイルをダウンロードしました。 0.msi

今、私はこのビデオファイルをもう一度アップロードしようとしましたが、問題なくアップロードされ、ビデオは youtube.com で動作していますが、コードで動作していても例外エラーが発生しました。アップロードが機能しているかどうかにかかわらず、例外が発生しています。

  1. プログラムが実行され、数分間ハングします。実行中に form1 が表示されません。
  2. 数分後、例外が発生します。

私は例外を受け取っていて、プログラムが動作するたびに例外を受け取っていますが、ファイルはうまくアップロードされています。

理由はわかりませんが、ファイルが3〜5回アップロードされ、1〜2回は同じファイルがアップロードされ、他のファイルは重複しているため拒否されます。しかし、私は一度プログラムを実行したのに、一度に何度もファイルをアップロードすることがあるのはなぜですか? 今、もう一度試しました。プログラムはもう実行されていません。10 分前に閉じました。そして、ファイルがアップロードされ、プロセスが終了した後、現在処理されているのを見ました。ファイルが再度アップロードされたことを確認しましたが、重複しているため拒否されました。しかし、プログラムが実行されていないのに、なぜファイルをアップロードし続けるのでしょうか?

アップロードの間隔は 14 分程度で、同じファイルが閉じられ、もう実行していませんが、同じ名前の同じファイルが 2 つ表示されます。

だから私は今3つの問題があります:

  1. プログラムがハングしているように、プログラムの実行中に form1 が表示されません。

  2. 常に例外エラーが表示されます。

  3. ファイルが複数回アップロードされています。

例外は行にあります: request.Upload(video);

例外エラー メッセージは次のとおりです: 要求の実行に失敗しました:

https://uploads.gdata.youtube.com/feeds/api/users/default/uploads

これは完全な例外です:

Google.GData.Client.GDataRequestException was caught
  Message=Execution of request failed: https://uploads.gdata.youtube.com/feeds/api/users/default/uploads
  Source=Google.GData.Client
  StackTrace:
       at Google.GData.Client.GDataRequest.Execute()
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute()
       at Google.GData.Client.MediaService.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
       at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
       at Google.GData.Client.Service.Insert[TEntry](Uri feedUri, TEntry entry)
       at Google.GData.YouTube.YouTubeService.Upload(String userName, YouTubeEntry entry)
       at Google.YouTube.YouTubeRequest.Upload(String userName, Video v)
       at Google.YouTube.YouTubeRequest.Upload(Video v)
       at YoutubeTesting.Form1.Form1_Load(Object sender, EventArgs e) in D:\C-Sharp\Youtube_Testing\YoutubeTesting\YoutubeTesting\Form1.cs:line 47
  InnerException: System.Net.WebException
       Message=The operation has timed out
       Source=System
       StackTrace:
            at System.Net.HttpWebRequest.GetResponse()
            at Google.GData.Client.GDataRequest.Execute()
       InnerException: 

form1.cs の 47 行目は request.Upload(video); です。

ここでも、4 回のようにファイルをアップロードしていたことがわかります。なぜ、どのようにファイルをアップロードし続けているのかわかりません。そして、ファイルの 3 つは重複のために拒否され、1 つは問題ありません!

誰かに聞いたところ、問題なく動作しているとのことでした。

Visual Studio 2010 pro .net 4.0 Windows 7 64bit を使用しています。

YouTube のログインとパスワードを何度も確認し、Gmail でも同じ問題と例外を何度も確認しました。

4

2 に答える 2

3

例外には、ここで何が起こっているかが示されています。リクエストがタイムアウトしました。このプロパティでタイムアウトを変更できます。デフォルトでは 100,000 ミリ秒に設定されています。より大きな数値に設定してタイムアウトを増やすか、-1 に設定してデフォルトの HTPPRequestObject に固執することができます。

settings.Timeout = -1;

また、別のスレッドでビデオをアップロードする必要があります。このようにして、GUIは応答性を保ち、あなたが言うように「ハング」しません。

アップデート:

次のようにスレッドを開始できます。

new Thread(new ThreadStart(() =>
{
    var settings = new YouTubeRequestSettings("You Manager", devkey, username, password)
    {
        Timeout = -1
    };
    var request = new YouTubeRequest(settings);
    var video = new Video()
    {
        Title = "test",
        Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema)),
        Keywords = "Comedy",
        Private = false,
        MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV"),
    };
    request.Upload(video);
})).Start();
于 2011-09-21T11:24:08.427 に答える
0

これは、C# を介して YouTube 動画をアップロードするためのチュートリアルです。

ここを参照してください: http://codewithgeek.blogspot.com/2015/12/upload-video-to-youtube-from-c-aspnet.html

于 2015-06-08T05:52:46.173 に答える