Resolved: How to split Python GET request by parameter into different bitcoin offers

Question:

I’d like to use the BISQ API to extract BTC buy offers, and list them separately in a new line. However, the return I’m getting has too many levels for me to extract using key-value pairs (although I’m very new to Python so am probably missing something!)
Currently, I’ve called the API with the following response:
import requests
import json
response_USD = requests.get('https://bisq.markets/api/offers?market=BTC_USD')
print(response_USD.json()['btc_usd']['buys'])
Which returns (cut due to length):

[{‘offer_id’: ‘aMDMHXt-9222c082-5f60-4274-9bbf-5d58d986d8b3-182’, ‘offer_date’: 1645195105176, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.01000000’, ‘amount’: ‘0.02000000’, ‘price’: ‘45000.00000000’, ‘volume’: ‘900.00000000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ‘xf6xttjw-a21b0c58-4f46-487f-8f71-c33f20f0f61d-182’, ‘offer_date’: 1644872308763, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.00900000’, ‘amount’: ‘0.01700000’, ‘price’: ‘43255.79460000’, ‘volume’: ‘735.34850000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ‘82198-b1ab6e83-8a07-4a7c-8a25-00f91202c67f-180’, ‘offer_date’: 1644131836719, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.01130000’, ‘amount’: ‘0.01130000’, ‘price’: ‘42851.53480000’, ‘volume’: ‘484.22230000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ‘9y8ezr-0f9cb55a-0030-4610-b5af-72e7f19775ae-182’, ‘offer_date’: 1644932335080, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.01000000’, ‘amount’: ‘0.02000000’, ‘price’: ‘42851.53480000’, ‘volume’: ‘857.03060000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ‘856233-e943bc25-9df4-47e2-977f-6a65425fe45b-182’, ‘offer_date’: 1644469262319, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.00250000’, ‘amount’: ‘0.00250000’, ‘price’: ‘42447.27500000’, ‘volume’: ‘106.11810000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ‘318317-fb6d2475-f2dd-4b74-886e-7da6ff7b349c-182’, ‘offer_date’: 1644122335075, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.00310000’, ‘amount’: ‘0.00310000’, ‘price’: ‘42447.27500000’, ‘volume’: ‘131.58650000’, ‘payment_method’: ‘AMAZON_GIFT_CARD’, ‘offer_fee_txid’: None}, {‘offer_id’: ’46MoyVB-daf83cf0-a064-4d32-8fd9-73593599bbb5-182′, ‘offer_date’: 1645120327323, ‘direction’: ‘BUY’, ‘min_amount’: ‘0.01000000’, ‘amount’: ‘0.01000000’, ‘price’: ‘42043.01530000’, ‘volume’: ‘420.43010000’, ‘payment_method’: ‘CLEAR_X_CHANGE’, ‘offer_fee_txid’: None}…


I’d like to extract every offer (from ‘offer_id’ to ‘offer_fee_txid’) as a new line, and then call within that particular part (e.g. call ‘price’).
Is there an easy way to do that?

Answer:

I recomment iterating the data and copying out the data points you require as follows:
import requests
import json

#request the raw dataset
response_USD = requests.get('https://bisq.markets/api/offers?market=BTC_USD')

#list of buys, and keys to extract
buys = []
extract = ["offer_id", "price"]

#iterate raw data, copying required datapoints
for buy_data in response_USD.json()['btc_usd']['buys']:
    buy = {}
    for key in extract:
        buy[key] = buy_data[key]
    buys.append(buy)

#print the collected data for each buy
for buy in buys:
    print(buy)

If you have better answer, please add a comment about this, thank you!