Извлечь данные из запроса API в Python - PullRequest
0 голосов
/ 06 августа 2020
• 1000 полезная нагрузка данных через.
import requests

from pyunifi.controller import Controller

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--controller', default='192.168.0.2', help='the controller address (default "unifi")')
parser.add_argument('-u', '--username', default='apiadmin', help='the controller username (default("admin")')
parser.add_argument('-p', '--password', default='apipass', help='the controller password')
parser.add_argument('-b', '--port', default='8443', help='the controller port (default "8443")')
parser.add_argument('-v', '--version', default='v5', help='the controller base version (default "v5")')
parser.add_argument('-s', '--siteid', default='default', help='the site ID, UniFi >=3.x only (default "default")')
parser.add_argument('-V', '--no-ssl-verify', default=False, action='store_true', help='Don\'t verify ssl certificates')
parser.add_argument('-C', '--certificate', default='', help='verify with ssl certificate pem file')
args = parser.parse_args()

ssl_verify = False

if ssl_verify and len(args.certificate) > 0:
        ssl_verify = False 
        
c = Controller(args.controller, args.username, args.password, args.port, args.version, args.siteid, ssl_verify=ssl_verify)
r.requests = requests.get(c.get_clients()).json()
requests['mac']
print(requests)```

Any help would be greatly appreciated to get me on the right track.

1 Ответ

0 голосов
/ 07 августа 2020

Ваши последние несколько строк не имеют особого смысла в контексте вашего требования извлекать MA C адреса:

  1. r.requests должны выдавать NameError, как вы и не знали r нигде в этом скрипте не определено.
  2. Строка requests['mac'] ничего не делает. Это вполне может быть действительная ссылка, но здесь вы ссылаетесь на свойство mac объекта requests, которое вы import извлекли из стандартной библиотеки requests. Другими словами, это было бы далеко от того, что вы ожидали, даже если бы вы все равно print или иным образом обработали это значение.
  3. Вызов print(requests) «выливает все данные», потому что вы print вводите полное определение библиотеки requests, которую вы импортировали в строке 1.
  4. Прежде всего, вам не нужно импортировать requests, поскольку pyunifi делает это в фоновом режиме для тебя. Каждый из методов, которые вы используете для взаимодействия с удаленным API, абстрагирует это низкоуровневое использование requests от вашего представления, поэтому нет смысла заключать какие-либо вызовы методов в requests.get(). Вам следует просмотреть документацию по используемой вами библиотеке (и исходный код, если хотите) на ее странице GitHub , которая содержит несколько полезных примеров, которые, возможно, помогли вам найти правильное использование для методы, которые вы здесь использовали.

В остальном ваш код выглядит нормально. Когда вы исправите эти проблемы, у вас будет сценарий, который будет выглядеть примерно так:

from pyunifi.controller import Controller

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--controller', default='192.168.0.2', help='the controller address (default "unifi")')
parser.add_argument('-u', '--username', default='apiadmin', help='the controller username (default("admin")')
parser.add_argument('-p', '--password', default='apipass', help='the controller password')
parser.add_argument('-b', '--port', default='8443', help='the controller port (default "8443")')
parser.add_argument('-v', '--version', default='v5', help='the controller base version (default "v5")')
parser.add_argument('-s', '--siteid', default='default', help='the site ID, UniFi >=3.x only (default "default")')
parser.add_argument('-V', '--no-ssl-verify', default=False, action='store_true', help='Don\'t verify ssl certificates')
parser.add_argument('-C', '--certificate', default='', help='verify with ssl certificate pem file')
args = parser.parse_args()

ssl_verify = False

if ssl_verify and len(args.certificate) > 0:
    ssl_verify = False 
        
c = Controller(args.controller, args.username, args.password, args.port, args.version, args.siteid, ssl_verify=ssl_verify)

for client in c.get_clients(): # loop over each client returned from get_clients()
    print(client['mac'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...