0

ユーザーがYoutubeに動画をアップロードできるアプリケーションを作りたいです。これが私が試したコードです(http://code.google.com/p/gdata-python-client/source/browse/tests/gdata_tests/youtube/service_test.pyから採用):

my_media_group = gdata.media.Group(
                                       title = gdata.media.Title(text=title),
                                       description = gdata.media.Description(description_type='plain',
                                                                             text=description),
                                       keywords = gdata.media.Keywords(text= tags),
                                       category = gdata.media.Category(
                                                                       text='Autos',
                                                                       scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
                                                                       label='Autos'),
                                       player=None
    )
    # Set Geo location to 37,-122 lat, long
    where = gdata.geo.Where()
    where.set_location((37.0,-122.0))
    video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group, geo=where)
    print "Creating a video entry: done."
    print "Uploading video"
    new_entry = self.client.InsertVideoEntry(video_entry, filepath)
    print "Done uploading video."

それは常に最後から2番目の行でスタックします:

new_entry = self.client.InsertVideoEntry(video_entry, filepath)

では、何が問題なのですか?ファイルパスに関する要件はありますか(たとえば、パス'C:\ video.avi'は有効ですか?)

実際、アップロードする方法が必要なだけなので、考えられる解決策を提案してください。

編集:1。Youtube Uploadウィジェットを埋め込もうとしましたが、機能しないようです:( Webカメラからロードするオプションは1つしかなく、それも機能しません)。

<iframe id="widget" type="text/html" width="640" height="390"
  src="https://www.youtube.com/upload_embed" frameborder="0"></iframe>
  1. QWebviewを使用してYoutubeのアップロードページをロードしましたが、Youtubeは常にエラーを返します。 QWebview:YouTubeにアップロードするとエラーが返されます

編集2:

コードを次のように変更しました。

def getYtSession(self, email = '', password =''):
    # if we do not want to reuse our session.
    if email != '' and password != '':
        yt_service = gdata.youtube.service.YouTubeService()
        yt_service.email = email
        yt_service.password = password

        #login.
        try:
            print yt_service.ProgrammaticLogin()
            self.email = email
            self.password = password
            self.logged_in = True
            self.emit(QtCore.SIGNAL('doneLogin(QString)'), QtCore.QString(email + " " + password))
            return yt_service
        except:
            #Display a warning dialog.
            self.logged_in = False
            self.emit(QtCore.SIGNAL('failedLogin()'))
            return None      
    elif self.yt_service: # we want to reuse the session.
        return self.yt_service
    else:
        return gdata.youtube.service.YouTubeService()

およびアップロード機能:

self.yt_service = self.getYtSession(self.email, self.password)
    try:
        new_entry = self.yt_service.InsertVideoEntry(video_entry, filepath)
        print "Done uploading video."
        self.emit(QtCore.SIGNAL('doneUpload(QString)'), QtCore.QString('Title: ' + title + '\nPath: ' + filepath))
    except:
        print "Stack trace:"
        traceback.print_stack()

それでも動作しません。そしてもう1つの問題:スタックトレースは何も役に立ちません:

Stack trace:Login successfully.

ファイル"D:\ workplace \ simple-media-player \ trunk \ MyPlayer \ src \ QtThread.py"、19行目、実行中self.function(* self.args、** self.kwargs)ファイル "D:\ workplace \ simple-media-player \ trunk \ MyPlayer \ src \ videoplayer.py "、行490、doRealUpload traceback.print_stack()

そのメッセージ(「ログインに成功しました。」)は、doneLogin(QString)シグナルが発行されたときに呼び出される関数によって出力されます。入れないと

new_entry = self.yt_service.InsertVideoEntry(video_entry, filepath)
        print "Done uploading video."
        self.emit(QtCore.SIGNAL('doneUpload(QString)'), QtCore.QString('Title: ' + title + '\nPath: ' + filepath))

try-exceptでは、何も出力されません。

詳細:ビデオ情報を次のように設定しました:パス:C:/Users/huynh/Desktop/REcord1.wmv名前:'テストビデオ'タグ:'テスト、youtube'説明:fafafa

4

1 に答える 1

0

分かった、気にしないで。http://code.google.com/p/gdata-python-client/source/browse/tests/gdata_tests/youtube/service_test.pyでコードを変更しましたが、完全に機能します。

于 2012-12-13T10:02:14.477 に答える