1

我正在尝试使用Lyft rides python API 来访问 Lyft 数据。具体来说,我正在尝试访问行程估算端点

from lyft_rides.auth import ClientCredentialGrant
from lyft_rides.session import Session
from lyft_rides.client import LyftRidesClient

auth_flow = ClientCredentialGrant(client_id=MY_ID, client_secret=MY_SECRET, scopes="public")
session = auth_flow.get_session()
client = LyftRidesClient(session)

response = client.get_cost_estimates(start_latitude=start_lat, start_longitude=start_long, end_latitude=end_lat, end_longitude=end_long)

但是,响应数据中的浪涌率始终为 0,即使在浪涌时间也是如此,我已经诊断出这是因为我没有使用 3-legged 身份验证。

来自lyft 开发者文档

用于访问用户特定端点的 3 条腿流。

要提出乘车请求或以其他方式访问用户数据,用户必须授予您访问权限。如果没有 Lyft 账户的用户被引导通过以下流程,系统将提示他们创建一个新账户。

python 文档

授权

如果您需要访问 Lyft 用户的账户才能代表他们提出请求,您将经历“三足”流程。在这种情况下,您需要用户通过 OAuth 2.0 授权代码流程授予对您的应用程序的访问权限。请参阅 Lyft API 文档。

授权代码流程是一个两步授权过程。第一步是让用户授权您的应用,第二步是从 Lyft 请求 OAuth 2.0 访问令牌。如果您想代表用户采取行动或访问他们的信息,则此过程是强制性的。

from lyft_rides.auth import AuthorizationCodeGrant
auth_flow = AuthorizationCodeGrant(
    YOUR_CLIENT_ID,
    YOUR_CLIENT_SECRET,
    YOUR_PERMISSION_SCOPES,
)
auth_url = auth_flow.get_authorization_url()

将用户导航到 auth_url,他们可以在其中授予对您的应用程序的访问权限。之后,它们将被重定向到格式为 REDIRECT_URL?code=UNIQUE_AUTH_CODE 的 redirect_url。使用此 redirect_url 创建会话并启动 LyftRidesClient。

session = auth_flow.get_session(redirect_url)
client = LyftRidesClient(session)
credentials = session.oauth2credential

将凭证信息保存在安全的数据存储中,并重复使用它们来代表您的用户进行 API 调用。SDK 将在使用 LyftRidesClient 发出 API 请求时自动为您处理令牌刷新。

问题

我正在尝试在脚本中自动化 python 请求。鉴于身份验证的第三阶段需要手动访问 url 并获取代码,是否可以通过脚本执行此操作?

4

1 回答 1

1

[全面披露:我是 Lyft 的开发者倡导者之一]

获取该数据的唯一方法是请求rides.request范围是通过 3-legged OAuth 流(对此感到抱歉)。offline但是,如果您要求将范围作为初始授权的一部分,则只需请求此外部授权一次。如果您最初请求了该范围,则可以使用refresh_token此处概述的 s 而不会提示您输入外部 URL:

https://developer.lyft.com/docs/authentication#section-step-5-refreshing-the-access-token

如果您只在本地使用此脚本,我建议您通过此授权一次,然后在您的令牌已过期时将刷新令牌逻辑构建到您的脚本中。希望有帮助!

于 2017-04-27T01:52:36.917 回答