2017-05-28 60 views
1

我想在Python代碼中使用YouTube數據API搜索YouTube視頻。我收到參數錯誤,無法解決此問題。那裏幾乎沒有類似的問題。但迄今爲止還沒有解決這個問題的方法。我怎樣才能達到這個結果?我試圖使用youtube數據API的github中給出的相同代碼。我在下面的代碼中得到了上面提到的錯誤。ArgumentError:參數--q:衝突的選項字符串: - 在YouTube數據API

from apiclient.discovery import build 
from apiclient.errors import HttpError 
from oauth2client.tools import argparser 


# Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps 
# tab of 
# https://cloud.google.com/console 
# Please ensure that you have enabled the YouTube Data API for your project. 
DEVELOPER_KEY = "API KEY" # added perfectly 
YOUTUBE_API_SERVICE_NAME = "youtube" 
YOUTUBE_API_VERSION = "v3" 

def youtube_search(options): 
    youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
    developerKey=DEVELOPER_KEY) 

    # Call the search.list method to retrieve results matching the specified 
    # query term. 
    search_response = youtube.search().list(
    q=options.q, 
    part="id,snippet", 
    maxResults=options.max_results 
).execute() 

    videos = [] 
    channels = [] 
    playlists = [] 

    # Add each result to the appropriate list, and then display the lists of 
    # matching videos, channels, and playlists. 
    for search_result in search_response.get("items", []): 
    if search_result["id"]["kind"] == "youtube#video": 
     videos.append("%s (%s)" % (search_result["snippet"]["title"], 
           search_result["id"]["videoId"])) 
    elif search_result["id"]["kind"] == "youtube#channel": 
     channels.append("%s (%s)" % (search_result["snippet"]["title"], 
            search_result["id"]["channelId"])) 
    elif search_result["id"]["kind"] == "youtube#playlist": 
     playlists.append("%s (%s)" % (search_result["snippet"]["title"], 
            search_result["id"]["playlistId"])) 

    print "Videos:\n", "\n".join(videos), "\n" 
    print "Channels:\n", "\n".join(channels), "\n" 
    print "Playlists:\n", "\n".join(playlists), "\n" 


if __name__ == "__main__": 
    argparser.add_argument("--q", help="Search term", default="funny videos") 
    argparser.add_argument("--max-results", help="Max results", default=25) 
    args = argparser.parse_args() 


    try: 
    youtube_search(args) 
    except HttpError, e: 
    print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content) 

錯誤的堆棧跟蹤

ArgumentErrorTraceback (most recent call last) 
<ipython-input-6-d78ab4f2931f> in <module>() 
    47 
    48 if __name__ == "__main__": 
---> 49 argparser.add_argument("--q", help="Search term", default="funny videos") 
    50 argparser.add_argument("--max-results", help="Max results", default=25) 
    51 args = argparser.parse_args() 

C:\Anaconda\lib\argparse.pyc in add_argument(self, *args, **kwargs) 
    1306     raise ValueError("length of metavar tuple does not match nargs") 
    1307 
-> 1308   return self._add_action(action) 
    1309 
    1310  def add_argument_group(self, *args, **kwargs): 

C:\Anaconda\lib\argparse.pyc in _add_action(self, action) 
    1680  def _add_action(self, action): 
    1681   if action.option_strings: 
-> 1682    self._optionals._add_action(action) 
    1683   else: 
    1684    self._positionals._add_action(action) 

C:\Anaconda\lib\argparse.pyc in _add_action(self, action) 
    1507 
    1508  def _add_action(self, action): 
-> 1509   action = super(_ArgumentGroup, self)._add_action(action) 
    1510   self._group_actions.append(action) 
    1511   return action 

C:\Anaconda\lib\argparse.pyc in _add_action(self, action) 
    1320  def _add_action(self, action): 
    1321   # resolve any conflicts 
-> 1322   self._check_conflict(action) 
    1323 
    1324   # add to actions list 

C:\Anaconda\lib\argparse.pyc in _check_conflict(self, action) 
    1458   if confl_optionals: 
    1459    conflict_handler = self._get_handler() 
-> 1460    conflict_handler(action, confl_optionals) 
    1461 
    1462  def _handle_conflict_error(self, action, conflicting_actions): 

C:\Anaconda\lib\argparse.pyc in _handle_conflict_error(self, action, conflicting_actions) 
    1465          for option_string, action 
    1466          in conflicting_actions]) 
-> 1467   raise ArgumentError(action, message % conflict_string) 
    1468 
    1469  def _handle_conflict_resolve(self, action, conflicting_actions): 

ArgumentError: argument --q: conflicting option string(s): --q 

回答

-1

工作對我來說,也許這對你的作品太:

import argparse 
if __name__ == "__main__": 
    argparser = argparse.ArgumentParser(conflict_handler='resolve') 
    argparser.add_argument("--q", help="Search term", default="funny videos") 
    argparser.add_argument("--max-results", help="Max results", default=25) 
    args = argparser.parse_args()