Ошибка аутентификации с использованием Fitbit API, работала вчера, не знаю, как интерпретировать журнал ошибок - PullRequest
0 голосов
/ 16 марта 2020

Я - полный новичок в программировании (я использую Python через Jupyter Notebooks), и я особенно не знаю, что означает любая из этих ошибок или как их отладить. Я получил Client ID и Client Secret от Fitbit API и смог успешно войти в систему и получить некоторые данные, когда вчера запускал свой код, и он больше не работает, очевидно, из-за проблем с аутентификацией. Насколько я могу судить, единственное, что я сделал, что могло что-то споткнуться, это попытаться настроить API для друга и попытаться использовать его Client ID / Secret в моем коде, но затем я перезапустил свой код используя мой собственный идентификатор клиента / секрет, и он больше не работал. Я понятия не имею, что означают ошибки или порты. В другом посте на Stackexchange упоминается о поиске 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:\Users\David\Documents\python-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:\Users\David\Anaconda3\envs\Renv\lib\site-packages\portend.py", line 115, in free
    Checker(timeout=0.1).assert_free(host, port)
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\portend.py", line 69, in assert_free
    list(itertools.starmap(self._connect, info))
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\portend.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:\Users\David\Anaconda3\envs\Renv\lib\site-packages\cherrypy\process\wspbus.py", line 230, in publish
    output.append(listener(*args, **kwargs))
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\cherrypy\_cpserver.py", line 180, in start
    super(Server, self).start()
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\cherrypy\process\servers.py", line 177, in start
    portend.free(*self.bind_addr, timeout=Timeouts.free)
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\portend.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:\Users\David\Anaconda3\envs\Renv\lib\site-packages\cherrypy\process\wspbus.py", line 268, in start
    self.publish('start')
  File "C:\Users\David\Anaconda3\envs\Renv\lib\site-packages\cherrypy\process\wspbus.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

1 Ответ

0 голосов
/ 06 апреля 2020

Я был в одной лодке несколько дней go, но потому, что аутентификационный URL никогда не появлялся. В вашем случае ваша ошибка трассировки показывает, что ваш порт 8080 (который ищет порт по умолчанию cherrypy ищет) на самом деле не свободен, поэтому он не может подключиться, чтобы получить URL авторизации:

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

Это могло произойти, когда вы пытались настроить вызовы API для вашего друга.

В любом случае, вы должны освободить порт 8080 на своем компьютере и повторно запустить свой код (в качестве альтернативы вы можете изменить URI перенаправления в функции __init__ gather_keys_oauth2.py и изменить URL-адрес обратного вызова, чтобы он был другой порт, но вам также придется изменить его в настройках приложения.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...