Socket error when using gdata Youtube API in Python

大城市里の小女人 提交于 2019-12-11 08:09:31

问题


I'm using gdata to map YouTube URLs to video titles, using the following code:

import gdata.youtube.service as youtube
import re
import queue
import urlparse

ytservice = youtube.YouTubeService()
ytservice.ssl = True
ytservice.developer_key = '' # snip

class youtube(mediaplugin):
  def __init__(self, parsed_url):
    self.url = parsed_url
    self.video_id = urlparse.parse_qs(parsed_url.query)['v'][0]
    self.ytdata = ytservice.GetYouTubeVideoEntry(self.video_id)
    print self.ytdata

I get the following socket exception when calling service.GetYouTubeVideoEntry():

  File "/Users/haldean/Documents/qpi/qpi/media.py", line 21, in __init__
    self.ytdata = ytservice.GetYouTubeVideoEntry(self.video_id)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/gdata/youtube/service.py", line 210, in GetYouTubeVideoEntry
    return self.Get(uri, converter=gdata.youtube.YouTubeVideoEntryFromString)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/gdata/service.py", line 1069, in Get
    headers=extra_headers)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/atom/__init__.py", line 93, in optional_warn_function
    return f(*args, **kwargs)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/atom/service.py", line 186, in request
    data=data, headers=all_headers)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/atom/http_interface.py", line 148, in perform_request
    return http_client.request(operation, url, data=data, headers=headers)
  File "/Users/haldean/Documents/qpi/lib/python2.7/site-packages/atom/http.py", line 163, in request
    connection.endheaders()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 937, in endheaders
    self._send_output(message_body)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 797, in _send_output
    self.send(msg)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 759, in send
    self.connect()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1140, in connect
    self.timeout, self.source_address)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno 8] nodename nor servname provided, or not known  

I'm at a loss as to how to even begin debugging this. Any ideas appreciated. Thanks!

Edit:
In response to a question asked in comments, video_id is qh-mwjF-OMo and parsed_url is:

ParseResult(scheme=u'http', netloc=u'www.youtube.com', path=u'/watch', params='', query=u'v=qh-mwjF-OMo&feature=g-user-u', fragment='')

回答1:


My mistake was that the video_id should be passed as a keyword parameter, like so:

    self.ytdata = ytservice.GetYouTubeVideoEntry(video_id=self.video_id)

It seems that the socket exception is the only layer of gdata that will throw an exception; it tries to get a URL blindly based on the arguments and it only fails when the URL fetch fails.



来源:https://stackoverflow.com/questions/11814571/socket-error-when-using-gdata-youtube-api-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!