使用Fitbit API验证失败,昨天起作用,不知道如何解释错误日志



我是一个完全的编程初学者(我通过Jupyter Notebooks使用Python(,尤其不知道这些错误意味着什么,也不知道如何调试它们。我从Fitbit API获得了客户端ID和客户端机密,昨天运行代码时,我成功登录并提取了一些数据,但由于身份验证问题,代码显然不再运行。据我所知,我所做的唯一一件可能会出错的事情是尝试为一个朋友建立一个API,并尝试在我的代码中使用他的客户端ID/Secret,但后来我使用自己的客户端ID/SSecret重新编码了我的代码,然后它就不再工作了。我完全不知道任何错误或端口是什么意思。Stackeexchange上的另一篇文章提到了对localhost:8080的查找,但它带来了404错误。最后,当我昨天运行代码时,Fitbit网站上会弹出一个屏幕,要求我登录,但它不再这样做,而是说它无法连接。我的所有代码都基于以下教程:https://towardsdatascience.com/collect-your-own-fitbit-data-with-python-ff145fa10873

import os
# use the following to re-direct working directory to where cloned Fitbit GitHub repo is located
%cd C:UsersDavidDocumentspython-fitbit-master
cwd = os.getcwd()
import gather_keys_oauth2 as Oauth2
import fitbit
import pandas as pd 
import datetime
CLIENT_ID = 'XXXXXX'
CLIENT_SECRET = 'X#X#X#X#...'
server = Oauth2.OAuth2Server(CLIENT_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])
auth2_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, 
refresh_token=REFRESH_TOKEN)
[16/Mar/2020:01:15:09] ENGINE Listening for SIGTERM.
[16/Mar/2020:01:15:09] ENGINE Bus STARTING
[16/Mar/2020:01:15:09] ENGINE Set handler for console events.
CherryPy Checker:
The Application mounted at '' has an empty config.
[16/Mar/2020:01:15:09] ENGINE Started monitor thread 'Autoreloader'.
[16/Mar/2020:01:15:10] ENGINE Error in 'start' listener <bound method Server.start of <cherrypy._cpserver.Server object at 0x000001B599668748>>
Traceback (most recent call last):
File "C:UsersDavidAnaconda3envsRenvlibsite-packagesportend.py", line 115, in free
Checker(timeout=0.1).assert_free(host, port)
File "C:UsersDavidAnaconda3envsRenvlibsite-packagesportend.py", line 69, in assert_free
list(itertools.starmap(self._connect, info))
File "C:UsersDavidAnaconda3envsRenvlibsite-packagesportend.py", line 85, in _connect
raise PortNotFree(tmpl.format(**locals()))
portend.PortNotFree: Port 127.0.0.1 is in use on 8080.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersDavidAnaconda3envsRenvlibsite-packagescherrypyprocesswspbus.py", line 230, in publish
output.append(listener(*args, **kwargs))
File "C:UsersDavidAnaconda3envsRenvlibsite-packagescherrypy_cpserver.py", line 180, in start
super(Server, self).start()
File "C:UsersDavidAnaconda3envsRenvlibsite-packagescherrypyprocessservers.py", line 177, in start
portend.free(*self.bind_addr, timeout=Timeouts.free)
File "C:UsersDavidAnaconda3envsRenvlibsite-packagesportend.py", line 119, in free
raise Timeout("Port {port} not free on {host}.".format(**locals()))
portend.Timeout: Port 8080 not free on 127.0.0.1.
[16/Mar/2020:01:15:10] ENGINE Shutting down due to error in start listener:
Traceback (most recent call last):
File "C:UsersDavidAnaconda3envsRenvlibsite-packagescherrypyprocesswspbus.py", line 268, in start
self.publish('start')
File "C:UsersDavidAnaconda3envsRenvlibsite-packagescherrypyprocesswspbus.py", line 248, in publish
raise exc
cherrypy.process.wspbus.ChannelFailures: Timeout('Port 8080 not free on 127.0.0.1.')
[16/Mar/2020:01:15:10] ENGINE Bus STOPPING
[16/Mar/2020:01:15:10] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) already shut down
[16/Mar/2020:01:15:10] ENGINE Removed handler for console events.
[16/Mar/2020:01:15:10] ENGINE Stopped thread 'Autoreloader'.
[16/Mar/2020:01:15:10] ENGINE Bus STOPPED
[16/Mar/2020:01:15:10] ENGINE Bus EXITING

几天前我也有同感,但因为auth URL从未弹出。在您的情况下,您的回溯错误显示您的端口8080(这是cherrypy查找的默认端口(实际上不是空闲的,因此它无法连接以提取auth URL:

raise Timeout("Port {port} not free on {host}.".format(**locals()))
portend.Timeout: Port 8080 not free on 127.0.0.1.

当您尝试为您的朋友设置API调用时,可能会发生这种情况。

无论如何,您应该释放机器上的8080端口并重新运行代码(或者,您可以在gather_keys_oauth2.py__init__函数中修改重定向uri,并将回调URL更改为不同的端口,但您也必须在应用程序设置中更改它。

希望这能有所帮助。

最新更新