参数——q:冲突选项字符串(s): -q在YouTube数据API中。

时间:2021-02-09 16:20:55

I am trying to search the youtube videos using YouTube Data API in python code. I am getting Argument Error and not able to fix this issue. Already few similar issues are there. But there is no solution given to this issue so far. How can I achieve the result ? I tried to use the same code given in youtube data API's github. I am getting the above mentioned error in the following code.

我试图用python代码中的youtube数据API搜索youtube视频。我得到了参数错误,无法解决这个问题。几乎没有类似的问题存在。但到目前为止,还没有解决这个问题的办法。我怎样才能达到这个结果?我尝试使用youtube数据API github上给出的代码。我在下面的代码中得到了上面提到的错误。

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)

The stack trace of the error is

错误的堆栈跟踪是。

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 个解决方案

#1


-1  

it works for me, maybe this works for you too:

它对我有用,也许对你也有用:

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()

#1


-1  

it works for me, maybe this works for you too:

它对我有用,也许对你也有用:

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()