我正在尝试获取一个非常简单的 Python 脚本来与 Freebase 对话。
我发现的所有示例都使用简单/api key 授权模型。所以我创建了一个 Google 开发者帐户,创建了一个项目,并尝试按照 Google 的说明获取 key 。它要求我提供我将从中进行调用的数字 IP 地址列表。不可行,因为我没有固定 IP(我确实设置了 dyndns,但这没有帮助,因为 Google 不会采用域名,只采用数字)。
所以我尝试了 OAuth2,这对于我的需要来说太过分了(我没有访问任何非公开用户数据)。但我什至找不到一个将 OAuth2 用于 Freebase 的在线示例。我尝试调整其他示例,但在 appengine、Decorator、几个过时的 Python 库和其他几种方法之间来回切换后,我一无所获。
任何人都可以解释或指出如何执行此操作的一个很好的示例(与我尝试授权的应用程序相比,无需在授权上花费 10 倍的时间)? OAuth2 的工作示例,最好没有多层“简化”API;或者有关如何解决 API key 授权的固定 IP 要求的提示,那就太棒了。谢谢!
史蒂夫
最佳答案
我必须为 Google 云端硬盘执行此操作,但据我所知,这应该适用于任何 Google API。
当您在开发者控制台中创建新的客户端 ID 时,您应该可以选择创建服务帐户。这将创建一个公钥/私钥对,您可以使用它进行身份验证,而无需任何 OAuth 废话。
我从我们的 GDrive 库中窃取了此代码,因此它可能已损坏,并且它是 GDrive 特定的,因此您需要将任何显示“drive”的内容替换为 Freebase 想要的任何内容。
但我希望这足以让您开始。
# Sample code that connects to Google Drive
from apiclient.discovery import build
import httplib2
from oauth2client.client import SignedJwtAssertionCredentials, VerifyJwtTokenError
SERVICE_EMAIL = "you@gmail.com"
PRIVATE_KEY_PATH ="./private_key.p12"
# Load private key
key = open(PRIVATE_KEY_PATH, 'rb').read()
# Build the credentials object
credentials = SignedJwtAssertionCredentials(SERVICE_EMAIL, key, scope='https://www.googleapis.com/auth/drive')
try:
http = httplib2.Http()
http = credentials.authorize(http)
except VerifyJwtTokenError as e:
print(u"Unable to authorize using our private key: VerifyJwtTokenError, {0}".format(e))
raise
connection = build('drive', 'v2', http=http)
# You can now use connection to call anything you need for freebase - see their API docs for more info.
关于python - Freebase API (Python) 的授权难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161274/