YouTube API 调用在从 py 文件执行时有效,但在 python 解释器中不起作用



我开始绝望了。我想做一些YouTube API测试,我已经得到了

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() takes 1 positional argument but 2 were given

问题是,我正在尝试执行完全相同的代码,这在py模块中有效

request = youtube.playlistItems().insert(
part="snippet",
body={
"snippet": {
"playlistId": playlistID,
"position": position,
"resourceId": {
"kind": "youtube#video",
"videoId": videoID
}
}
}
)

在py文件和python解释器中,我已经使用启动了youtube实例

import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
scopes = ["https://www.googleapis.com/auth/youtube.force-ssl"]
# Disable OAuthlib's HTTPS verification when running locally.
# *DO NOT* leave this option enabled in production.
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
api_service_name = "youtube"
api_version = "v3"
client_secrets_file = "MVYV_playlists.json"
# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
api_service_name, api_version, credentials=credentials)

当我在py代码中调用下面的函数时,它就可以工作了

def playlist_add_video(videoID, position, playlistID):
request = youtube.playlistItems().insert(
part="snippet",
body={
"snippet": {
"playlistId": playlistID,
"position": position,
"resourceId": {
"kind": "youtube#video",
"videoId": videoID
}
}
}
)
response = request.execute()

但是当我在Python解释器中执行以下操作时,它会给我2个参数错误

r = """part="snippet",
... body={
...     "snippet": {
...     "playlistId": "PLLT3d3KRQFTk3r4e-CWH8nUaK7J6X1WdS",
...     "position": 102,
...     "resourceId": {
...         "kind": "youtube#video",
...         "videoId": "8dVt7eE3BAo"
...     }
...     }
... }"""
request = youtube.playlistItems().insert(r)

我知道这是由Python自动在第二个参数r之前插入self作为第一个参数引起的。我也知道它与这个特定的youtube.playlistItems((.insert((方法没有联系,我尝试过其他方法,结果是一样的。有什么办法让它在翻译中发挥作用吗?这将使我的工作流程更加有效。我真的很想了解这种行为的原因。

似乎提供了两个kwargs参数。该方法只请求一个。我不使用这个图书馆,我的电脑里也没有。只需尝试帮助(插入(或输入实现,然后检查该方法到底得到了什么参数。

相关内容

最新更新