使用Python访问lovooapi

使用Python访问lovooapi,python,python-3.x,oauth,python-requests,Python,Python 3.x,Oauth,Python Requests,我希望使用lovooapi,但不知道如何开始。运行Charles proxy并查看流量后,我得出以下结论: 首先aGETtohttps://api.lovoo.com/oauth/requestToken?在用户通过应用程序(iPhone)登录后立即发送: 这也给出了以下令牌:oauth_令牌=44d83e8ef50f&oauth_令牌=37998f6c6ef2e618 然后是另一个GETtohttps://api.lovoo.com/oauth/accessToken?: GET /oauth

我希望使用lovooapi,但不知道如何开始。运行Charles proxy并查看流量后,我得出以下结论:

首先a
GET
to
https://api.lovoo.com/oauth/requestToken?
在用户通过应用程序(iPhone)登录后立即发送:

这也给出了以下令牌:
oauth_令牌=44d83e8ef50f&oauth_令牌=37998f6c6ef2e618

然后是另一个
GET
to
https://api.lovoo.com/oauth/accessToken?

GET /oauth/accessToken? HTTP/1.1
Host    api.lovoo.com
User-Agent  LOVOO/612 (iPhone; iOS 10.2; Scale/3.00)
kissapi-app-idfv    1EC7A8E5-DF16-4E14-8EC9-98DD4772F903
tz  Europe/xxx
kissapi-device-model    iPhone 6s Plus
kissapi-app-version 3.17.0
kissapi-new-oauth   1
kissapi-device  iphone
kissapi-app lovoo
wifi    true
kissapi-adv-id  00000000-0000-0000-0000-000000000000
Connection  keep-alive
kissapi-app-id  7F947A460DAFCA88556B2F35A6D78A3E
Authorization   OAuth oauth_consumer_key="an.email%40gmail.com", oauth_nonce="080328C9-0A53-4971-85E7-65A43F12DC09", oauth_signature="Km0vd8xtHaQmRgkrGLsiljel13o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1487017515", oauth_token="44d83e8ef50f", oauth_version="1.0"
Accept-Language en-CH;q=1, de-CH;q=0.9
kissapi-adv-on  false
kissapi-version 1.20.0
kissapi-update-user-hash    6ea2bd15ea41d0dc8c2615589e2d52ec
Accept  */*
kissapi-device-os   10.2
Accept-Encoding gzip, deflate
kissapi-sync-enabled    1
并提供以下令牌:
oauth_令牌=60c8977c8fe9509f&oauth_令牌=549619c0ef4c4be7d7cb898e

现在,请求
https://api.lovoo.com/init
可通过以下方式进行:

GET /init HTTP/1.1
Host    api.lovoo.com
User-Agent  LOVOO/612 (iPhone; iOS 10.2; Scale/3.00)
kissapi-app-idfv    1EC7A8E5-DF16-4E14-8EC9-98DD4772F903
tz  Europe/xxx
kissapi-device-model    iPhone 6s Plus
kissapi-app-version 3.17.0
kissapi-new-oauth   1
kissapi-device  iphone
kissapi-app lovoo
wifi    true
kissapi-adv-id  00000000-0000-0000-0000-000000000000
Connection  keep-alive
kissapi-app-id  7F947A460DAFCA88556B2F35A6D78A3E
Authorization   OAuth oauth_consumer_key="an.email%40gmail.com", oauth_nonce="B622CE9C-DA3D-435C-939A-C58B83DBE85C", oauth_signature="0irvAsilrrdCCdLfu%2F0XSj7THlc%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1487017515", oauth_token="60c8977c8fe9509f", oauth_version="1.0"
Accept-Language en-CH;q=1, de-CH;q=0.9
kissapi-adv-on  false
kissapi-version 1.20.0
kissapi-update-user-hash    6ea2bd15ea41d0dc8c2615589e2d52ec
Accept  */*
kissapi-device-os   10.2
Accept-Encoding gzip, deflate
kissapi-sync-enabled    1
这些是我捕获的头,但我不知道如何发送它们并使
Oauth
身份验证工作,尤其是使用
Oauth\u nonce

似乎支持它,但我不知道哪个标记对应于哪个变量:

from requests_oauthlib import OAuth1Session

lovoo = OAuth1Session(
    'client_key',
    client_secret='client_secret',
    resource_owner_key='resource_owner_key',
    resource_owner_secret='resource_owner_secret'
)
url = 'https://api.lovoo.com/init'
r = lovoo.get(url)

另一种方法是使用selenium进行登录,并进一步将会话用于请求

例如

def登录(用户,pw):
chrome_options=options()
chrome_选项。添加_实验_选项(“分离”,真)
driver=webdriver.Chrome(选项=Chrome\u选项)
驱动程序。获取(“https://www.lovoo.com/login_check")
user\u agent=driver.execute\u脚本(“return navigator.userAgent;”)
iframe=driver.find_元素(By.ID,“gdpr同意通知”)
驱动程序切换到帧(iframe)
privacybutton=WebDriverWait(驱动程序,10)。直到(
位于((By.XPATH,“//b[contains(text(),'Accept All')]”)的元素的存在
)
privacybutton.click()
driver.switch_to.default_content()
loginbutton=WebDriverWait(驱动程序,4)。直到(
位于((By.XPATH,“//按钮[包含(text(),'Log in')]))的元素的存在
)
登录按钮。单击()
loginbutton2=WebDriverWait(驱动程序,4)。直到(
位于((By.XPATH,“//button[包含(@data automation id,'login-submit-button')]))的元素的存在
)
driver.find_元素(By.XPATH,//input[@name=“authEmail”]”)。发送_键(用户)
driver.find_元素(By.XPATH,//input[@name=“authPassword”]')。发送_键(pw)
ActionChains(驱动程序)。将_移动到_元素(loginbutton2)。单击(loginbutton2)。执行()
元素=WebDriverWait(驱动程序,10)。直到(
EC.元素的存在位置((By.ID,“topmenu”))
)
返回用户\u代理、驱动程序。获取\u cookies()
(纬度,经度)=(0.0,0.0)
将requests.Session()作为会话:
用户\代理,cookies=登录(用户,pw)
update({c['name']:c['value']表示cookies中的c})
session.headers.update({'User-Agent':User\u-Agent})
会话。获取(f'https://www.lovoo.com/api_web.php/users?ageFrom=0&ageTo=2&latitude={lat}&经度={lon}')

Nonce由客户端生成,它是随机的,您可能需要匹配预期的格式。您可能需要在两次调用中提供相同的nonce。看这里,你似乎有两个临时值——一个是客户端创建的,另一个是服务器创建的。OAuth密钥/机密呢?你现在知道如何访问API了吗?@Kelvin这篇文章是专门关于访问移动API并使用它模拟iPhone的。我已经通过请求使用WebAPI登录到了Lovoo。提出一个新问题,标记我,我会帮助你。我不想发布整个脚本,因为他们可能会再次更改登录方法。@rhillhouse,您能为这个问题写一个答案吗?总结一下你的发现和解决方案
from requests_oauthlib import OAuth1Session

lovoo = OAuth1Session(
    'client_key',
    client_secret='client_secret',
    resource_owner_key='resource_owner_key',
    resource_owner_secret='resource_owner_secret'
)
url = 'https://api.lovoo.com/init'
r = lovoo.get(url)