実現したいこと
SessionRequestへ渡すquery(json)のvalueの一部を変数で渡したい、
のですが、そもそも実現可能なのでしょうか。
いくつかのサイトでjsonを変数に置き換えるような記述を参考にして
試したのですが、いずれも変数として認識されず。
お知恵をいただきたく、投稿しました。
前提
利用するAPI
SD-WAN vManage v20.9 - SD-WAN API Docs - Document - Cisco Developer
Monitoring - Application Aware Routingの「POST /statistics/approute/fec/aggregation」
変数にしたい箇所
"value": [ "172.16.254.16" ]
実現したいこと
system_ip = ”172.16.254.16” query_data = (略)"value": ["system_ip"](略) print(query_data) 結果 (略)"value": ["172.16.254.16"](略)
発生している問題・エラーメッセージ
IPの箇所を変数「system_ip」として連続で受け取りたい
query_data = (略)"value": ["172.16.254.16"](略) device_list = session.post(url=device_url, json=query_data, headers=heades_post, verify=False)
該当のソースコード
import json import boto3 import csv import numpy as np import pandas as pd import requests import os import urllib3 from datetime import datetime urllib3.disable_warnings(urlib3.exceptions.InsecureRequests.InsecureRequestWarning) def lambda_handler(event, context): s3 = boto3.resource(`s3`) bucket_name _ os.environ.get(`S3_BUCKET`) vmange_info_df = pd.read_csv(vnamage_info) device_info = "tmp/device_info.csv" bucket.download_file(os.environ.get(`CSV_DEVICE_INFO`), device_info) device_info_df = pd.read.csv(device_info) ipsec_tunnel_df = get_request(vmanage_info_df) def get_request(vmanage_info_df): api_datalist = [] for row in vmanage_info_df.itertuples(): vmanage_host = row[1] vmanage_port = row[2] vmanage_username = row[3] vmanage_password = row[4] base_url = `https://%s:%s`%(vmanage_host, vmanage_port) login_action = `/j_security_check` login_data = {`j_username` : vmanage_username, `j_password` : vmanage_password} login_url = base_url + login_action session = requests.session() login_response = session.post(url=login_url, data=login_data, verify=False) if login_token.status_code = 200: if b`<html>` in login_token.content: print("Login token Failed") exit(1) session.headers[`X-XSRF-TOKEN`] = login_token.content device_url = base_url + `/dataservice/device` df = pd.json_normalize(json_data["data"]) df = df[(df["device-type"] == "vedge") & (df["reachability"] == "reachable")] for data in df.itertuples() deviceid = data[1] nat_translation_url = base_url + `/dataservice/devie/ip/nat/translation?deviceId=` + deviceid nat_translation_list = sessin.get(url=nat_translation_url, verify=False) if nat_translation_list.status_code == 200: json_data = nat_translation_list.json = () else: print(nat_translation_list.status_code) df = pd.json_normalize(json_data["data"] print(df) print(len(df))
流用したいロジック
1つ目のAPIのDevice結果を、2つ目のAPIで受け取り実行したい
device_url = base_url + `/dataservice/device` df = pd.json_normalize(json_data["data"]) df = df[(df["device-type"] == "vedge") & (df["reachability"] == "reachable")] for data in df.itertuples() deviceid = data[1] nat_translation_url = base_url + `/dataservice/devie/ip/nat/translation?deviceId=` + deviceid
試したこと
ベースQuery(json)
query_data = (略)"value": ["172.16.254.16"](略)
検証1
system_ip = "172.16.254.16" query_data = (略)"value": [" + system_ip + "](略) print(query_data) 結果 (略)"value": [" + system_ip + "](略)
検証2
system_ip = "172.16.254.16" query_data = (略)"value": ["+`system_ip`+"](略) 結果 (略)"value": [" + `system_ip` + "](略)
検証3
system_ip = "172.16.254.16" query_data = (略)"value": ["`system_ip`"](略) 結果 (略)"value": ["`system_ip`"](略)
補足情報(FW/ツールのバージョンなど)
Python3.9

回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/02/03 18:02