본문 바로가기

파이썬 코드

API 수집 예시(시스코 넥서스)

import requests
import json
from datetime import datetime
import os
import pandas as pd
import time
 
# 환경 변수에서 URL, 사용자 이름, 패스워드를 가져옵니다.
url1 = os.getenv('API_URL1', 'https://IP/ins')
url2 = os.getenv('API_URL2', 'https://IP/ins')
user1 = os.getenv('API_USER', 'ID')
password1 = os.getenv('API_PASSWORD', 'PASSWORD')
myheaders = {'Content-Type': 'application/json-rpc'}
 
# API 호출을 위한 페이로드 설정
payload1 = [
    {
        "jsonrpc": "2.0",
        "method": "cli",
        "params": {
            "cmd": "show interface",
            "version": 1
        },
        "id": 1
    }
]
 
def collect_data(url):
    """URL로부터 데이터를 수집하고 Pandas DataFrame으로 반환"""
    try:
        response = requests.post(url, data=json.dumps(payload1), headers=myheaders, auth=(user1, password1), verify=False)
        response_json = response.json()
        time_now = datetime.now()
        print(response_json)
        body_data = response_json.get('result', {}).get('body', {}).get('TABLE_interface', {}).get('ROW_interface', None)
        print("body_data:", body_data)  # 디버깅을 위한 데이터 출력
        if body_data:
            if isinstance(body_data, list) and all(isinstance(item, dict) for item in body_data):
                df = pd.DataFrame(body_data)
                if 'interface' in df.columns:
                    df.set_index('interface', inplace=True)  # 'interface' 컬럼을 인덱스로 설정
                    return df
                else:
                    print(f"{time_now} ERROR: 'interface' 열을 찾을 수 없습니다.")
            else:
                print(f"{time_now} ERROR: body_data가 딕셔너리 리스트가 아닙니다.")
        else:
            print(f"{time_now} ERROR: 응답에서 본문 데이터를 찾을 수 없습니다.")
       
        with open('REQ_result.txt', 'a', encoding='utf8') as true:
            print(f'{time_now} result: {response_json}', file=true)
 
    except Exception as er:
        time_now = datetime.now()
        print(f"{time_now} FALSE: {er}")
 
def save_to_excel(df, file_prefix, sheet_name):
    """Pandas DataFrame을 엑셀 파일에 저장 (파일명에 현재 시간을 포함)"""
    current_time = datetime.now().strftime("%Y%m%d_%H%M%S")
    file_name = f'{file_prefix}_{current_time}.xlsx'
   
    with pd.ExcelWriter(file_name, engine='openpyxl') as writer:
        df.to_excel(writer, sheet_name=sheet_name, index=True)  # 인덱스를 포함하여 저장
   
    print(f"Data saved to {file_name}")
 
# 데이터 수집 및 저장
df1 = collect_data(url1)
df2 = collect_data(url2)
 
if df1 is not None:
    save_to_excel(df1, 'REQ_result1', 'Sheet1')
if df2 is not None:
    save_to_excel(df2, 'REQ_result2', 'Sheet1')

 

show interface 정보를 불러와서 인터페이스 기준으로 컬럼을 정렬시켜 엑셀로 저장하는 코드

해당 API는 443을 사용하며 SSL 인증서 인증을 무시하고 진행되는 코드임

'파이썬 코드' 카테고리의 다른 글

파이썬 자동화 -7-  (0) 2023.05.18
파이썬 자동화 -6-  (0) 2023.03.20
network automation -5-  (0) 2023.03.14
Network Automation -4-  (0) 2023.02.24
networkautomation -3-  (0) 2023.02.23