404 при получении приватного видео на YouTube даже при входе в аккаунт владельца с использованием gdata-python-client - PullRequest
2 голосов
/ 07 июня 2010

Если YouTube видео установлено как частное, и я пытаюсь получить его, используя gdata Python API , то 404 RequestError поднято, хотя у меня есть выполнил программный вход в систему с учетной записью, которой принадлежит это видео:

from gdata.youtube import service
yt_service = service.YouTubeService(email=my_email,
                                    password=my_password,
                                    client_id=my_client_id,
                                    source=my_source,
                                    developer_key=my_developer_key)
yt_service.ProgrammaticLogin()
yt_service.GetYouTubeVideoEntry(video_id='IcVqemzfyYs')
---------------------------------------------------------------------------
RequestError                              Traceback (most recent call last)

<ipython console> 

/usr/lib/python2.4/site-packages/gdata/youtube/service.pyc in GetYouTubeVideoEntry(self, uri, video_id)
    203     elif video_id and not uri:
    204       uri = '%s/%s' % (YOUTUBE_VIDEO_URI, video_id)
--> 205     return self.Get(uri, converter=gdata.youtube.YouTubeVideoEntryFromString)
    206 
    207   def GetYouTubeContactFeed(self, uri=None, username='default'):

/usr/lib/python2.4/site-packages/gdata/service.pyc in Get(self, uri, extra_headers, redirects_remaining, encoding, converter)
   1100             'body': result_body}
   1101     else:
-> 1102       raise RequestError, {'status': server_response.status,
   1103           'reason': server_response.reason, 'body': result_body}
   1104 

RequestError: {'status': 404, 'body': 'Video not found', 'reason': 'Not Found'}

Это происходит каждый раз, если я не захожу в свою учетную запись YouTube (через веб-сайт YouTube) и не делаю ее общедоступной, после чего я могу установить ее как частную и обратно для публичного использования с помощью Python API.

Я пропускаю шаг или есть другой (или какой-либо) способ извлечь видео YouTube, настроенное как частное, из API?

Заранее спасибо.

1 Ответ

0 голосов
/ 08 июня 2010

Очевидно, API данных YouTube не позволяет это (пока) , поэтому для обхода этого я использую метод GetYouTubeUserFeed экземпляра YouTubeService для получения список всех нужных мне видеороликов (частных или общедоступных):

from gdata.youtube import service
VIDEO_ID = 'IcVqemzfyYs'
yt_service = service.YouTubeService(email=my_email,
                                password=my_password,
                                client_id=my_client_id,
                                source=my_source,
                                developer_key=my_developer_key)
yt_service.ProgrammaticLogin()
userfeed = yt_service.GetYouTubeUserFeed(username=my_email[:my_email.index('@')])
video_entry = reduce(lambda e1, e2: e1 if e1.id.text.endswith(VIDEO_ENTRY) else (e2 if e2.id.text.endswith(VIDEO_ENTRY) else None),
                     userfeed.entry)

Надеюсь, это поможет любому, у кого возникла такая же проблема:)

...