Python requests post a query to graphql with variables

Question:

I’m trying to get a list of offers for an item sold on opensea.io

def getHighestOffer(self):
    query = """query OrdersQuery(n  $cursor: Stringn  $count: Int = 10n  $excludeMaker: IdentityInputTypen  $isExpired: Booleann  $isFilled: Booleann  $isValid: Booleann  $maker: IdentityInputTypen  $makerArchetype: ArchetypeInputTypen  $makerAssetIsPayment: Booleann  $takerArchetype: ArchetypeInputTypen  $takerAssetCategories: [CollectionSlug!]n  $takerAssetCollections: [CollectionSlug!]n  $takerAssetIsOwnedBy: IdentityInputTypen  $takerAssetIsPayment: Booleann  $sortAscending: Booleann  $sortBy: OrderSortOptionn  $makerAssetBundle: BundleSlugn  $takerAssetBundle: BundleSlugn) {n  ...Orders_data_2g7x2dn}nnfragment AccountLink_data on AccountType {n  addressn  chain {n    identifiern    idn  }n  user {n    publicUsernamen    idn  }n  ...ProfileImage_datan  ...wallet_accountKeyn}nnfragment AskPrice_data on OrderV2Type {n  dutchAuctionFinalPricen  openedAtn  priceFnEndedAtn  makerAssetBundle {n    assetQuantities(first: 30) {n      edges {n        node {n          ...quantity_datan          idn        }n      }n    }n    idn  }n  takerAssetBundle {n    assetQuantities(first: 1) {n      edges {n        node {n          ...AssetQuantity_datan          idn        }n      }n    }n    idn  }n}nnfragment AssetCell_assetBundle on AssetBundleType {n  assetQuantities(first: 2) {n    edges {n      node {n        asset {n          collection {n            namen            idn          }n          namen          ...AssetMedia_assetn          ...asset_urln          idn        }n        relayIdn        idn      }n    }n  }n  namen  slugn}nnfragment AssetMedia_asset on AssetType {n  animationUrln  backgroundColorn  collection {n    descriptionn    displayData {n      cardDisplayStylen    }n    imageUrln    hiddenn    namen    slugn    idn  }n  descriptionn  namen  tokenIdn  imageUrln}nnfragment AssetQuantity_data on AssetQuantityType {n  asset {n    ...Price_datan    idn  }n  quantityn}nnfragment Orders_data_2g7x2d on Query {n  orders(after: $cursor, excludeMaker: $excludeMaker, first: $count, isExpired: $isExpired, isFilled: $isFilled, isValid: $isValid, maker: $maker, makerArchetype: $makerArchetype, makerAssetIsPayment: $makerAssetIsPayment, takerArchetype: $takerArchetype, takerAssetCategories: $takerAssetCategories, takerAssetCollections: $takerAssetCollections, takerAssetIsOwnedBy: $takerAssetIsOwnedBy, takerAssetIsPayment: $takerAssetIsPayment, sortAscending: $sortAscending, sortBy: $sortBy, makerAssetBundle: $makerAssetBundle, takerAssetBundle: $takerAssetBundle) {n    edges {n      node {n        closedAtn        isFulfillablen        isValidn        oldOrdern        openedAtn        orderTypen        maker {n          addressn          ...AccountLink_datan          ...wallet_accountKeyn          idn        }n        makerAsset: makerAssetBundle {n          assetQuantities(first: 1) {n            edges {n              node {n                asset {n                  assetContract {n                    account {n                      addressn                      chain {n                        identifiern                        idn                      }n                      idn                    }n                    idn                  }n                  idn                }n                idn              }n            }n          }n          idn        }n        makerAssetBundle {n          assetQuantities(first: 30) {n            edges {n              node {n                ...AssetQuantity_datan                ...quantity_datan                idn              }n            }n          }n          idn        }n        relayIdn        siden        taker {n          ...AccountLink_datan          ...wallet_accountKeyn          idn          addressn        }n        takerAssetBundle {n          assetQuantities(first: 1) {n            edges {n              node {n                ...AssetQuantity_datan                ...quantity_datan                asset {n                  ownedQuantity(identity: {})n                  decimalsn                  symboln                  relayIdn                  assetContract {n                    account {n                      addressn                      idn                    }n                    idn                  }n                  idn                }n                quantityn                idn              }n            }n          }n          idn        }n        ...AskPrice_datan        ...orderLink_datan        makerAssetBundleDisplay: makerAssetBundle {n          ...AssetCell_assetBundlen          idn        }n        takerAssetBundleDisplay: takerAssetBundle {n          ...AssetCell_assetBundlen          idn        }n        idn        __typenamen      }n      cursorn    }n    pageInfo {n      endCursorn      hasNextPagen    }n  }n}nnfragment Price_data on AssetType {n  decimalsn  imageUrln  symboln  usdSpotPricen  assetContract {n    blockExplorerLinkn    idn  }n}nnfragment ProfileImage_data on AccountType {n  imageUrln  addressn  chain {n    identifiern    idn  }n}nnfragment asset_url on AssetType {n  assetContract {n    account {n      addressn      chain {n        identifiern        idn      }n      idn    }n    idn  }n  tokenIdn}nnfragment orderLink_data on OrderV2Type {n  makerAssetBundle {n    assetQuantities(first: 30) {n      edges {n        node {n          asset {n            externalLinkn            collection {n              externalUrln              idn            }n            idn          }n          idn        }n      }n    }n    idn  }n}nnfragment quantity_data on AssetQuantityType {n  asset {n    decimalsn    idn  }n  quantityn}nnfragment wallet_accountKey on AccountType {n  addressn  chain {n    identifiern    idn  }n}n"""
    variables = {"cursor":None,"count":10,"excludeMaker":None,"isExpired":False,"isFilled":None,"isValid":True,"maker":None,"makerArchetype":None,"makerAssetIsPayment":True,"takerArchetype":{"assetContractAddress":"0x7c40c393dc0f283f318791d746d894ddd3693572","tokenId":"7722"},"takerAssetCategories":None,"takerAssetCollections":None,"takerAssetIsOwnedBy":None,"takerAssetIsPayment":None,"sortAscending":None,"sortBy":"MAKER_ASSETS_USD_PRICE","makerAssetBundle":None,"takerAssetBundle":None}
    response = requests.post('https://api.opensea.io/graphql/', json={'query': query},data=variables)
    print(response.text)

(In variables the "assetContractAddress" and "tokenId" are unique to the item.

However when I run this I get:

{"errors":[{"message":"Must provide query string."}]}

And if I don’t use data=variables in requests.post I get:

{"errors":[{"message":"[400] One of taker_asset_categories, taker_asset_collections, maker, taker, maker, include_maker_assets, include_taker_assets, maker_assets, taker_assets, maker_asset_is_owned_by, taker_asset_is_owned_by, exclude_maker, maker_asset_bundle, taker_asset_bundle needs to be defined.","locations":[{"line":118,"column":3}],"path":["orders"]}],"data":{"orders":null}}

How can I use requests.post with the query and variables to get the proper response?

Thanks!

Asked By: Thomas RATIU

||

Answers:

You need to send the variables in the json data like this :

{
    "query": "your query",
    "variables": {
        "var1": "value1"
    }
}

checkout this

Example:

import requests

query = """query OrdersQuery(n  $cursor: Stringn  $count: Int = 10n  $excludeMaker: IdentityInputTypen  $isExpired: Booleann  $isFilled: Booleann  $isValid: Booleann  $maker: IdentityInputTypen  $makerArchetype: ArchetypeInputTypen  $makerAssetIsPayment: Booleann  $takerArchetype: ArchetypeInputTypen  $takerAssetCategories: [CollectionSlug!]n  $takerAssetCollections: [CollectionSlug!]n  $takerAssetIsOwnedBy: IdentityInputTypen  $takerAssetIsPayment: Booleann  $sortAscending: Booleann  $sortBy: OrderSortOptionn  $makerAssetBundle: BundleSlugn  $takerAssetBundle: BundleSlugn) {n  ...Orders_data_2g7x2dn}nnfragment AccountLink_data on AccountType {n  addressn  chain {n    identifiern    idn  }n  user {n    publicUsernamen    idn  }n  ...ProfileImage_datan  ...wallet_accountKeyn}nnfragment AskPrice_data on OrderV2Type {n  dutchAuctionFinalPricen  openedAtn  priceFnEndedAtn  makerAssetBundle {n    assetQuantities(first: 30) {n      edges {n        node {n          ...quantity_datan          idn        }n      }n    }n    idn  }n  takerAssetBundle {n    assetQuantities(first: 1) {n      edges {n        node {n          ...AssetQuantity_datan          idn        }n      }n    }n    idn  }n}nnfragment AssetCell_assetBundle on AssetBundleType {n  assetQuantities(first: 2) {n    edges {n      node {n        asset {n          collection {n            namen            idn          }n          namen          ...AssetMedia_assetn          ...asset_urln          idn        }n        relayIdn        idn      }n    }n  }n  namen  slugn}nnfragment AssetMedia_asset on AssetType {n  animationUrln  backgroundColorn  collection {n    descriptionn    displayData {n      cardDisplayStylen    }n    imageUrln    hiddenn    namen    slugn    idn  }n  descriptionn  namen  tokenIdn  imageUrln}nnfragment AssetQuantity_data on AssetQuantityType {n  asset {n    ...Price_datan    idn  }n  quantityn}nnfragment Orders_data_2g7x2d on Query {n  orders(after: $cursor, excludeMaker: $excludeMaker, first: $count, isExpired: $isExpired, isFilled: $isFilled, isValid: $isValid, maker: $maker, makerArchetype: $makerArchetype, makerAssetIsPayment: $makerAssetIsPayment, takerArchetype: $takerArchetype, takerAssetCategories: $takerAssetCategories, takerAssetCollections: $takerAssetCollections, takerAssetIsOwnedBy: $takerAssetIsOwnedBy, takerAssetIsPayment: $takerAssetIsPayment, sortAscending: $sortAscending, sortBy: $sortBy, makerAssetBundle: $makerAssetBundle, takerAssetBundle: $takerAssetBundle) {n    edges {n      node {n        closedAtn        isFulfillablen        isValidn        oldOrdern        openedAtn        orderTypen        maker {n          addressn          ...AccountLink_datan          ...wallet_accountKeyn          idn        }n        makerAsset: makerAssetBundle {n          assetQuantities(first: 1) {n            edges {n              node {n                asset {n                  assetContract {n                    account {n                      addressn                      chain {n                        identifiern                        idn                      }n                      idn                    }n                    idn                  }n                  idn                }n                idn              }n            }n          }n          idn        }n        makerAssetBundle {n          assetQuantities(first: 30) {n            edges {n              node {n                ...AssetQuantity_datan                ...quantity_datan                idn              }n            }n          }n          idn        }n        relayIdn        siden        taker {n          ...AccountLink_datan          ...wallet_accountKeyn          idn          addressn        }n        takerAssetBundle {n          assetQuantities(first: 1) {n            edges {n              node {n                ...AssetQuantity_datan                ...quantity_datan                asset {n                  ownedQuantity(identity: {})n                  decimalsn                  symboln                  relayIdn                  assetContract {n                    account {n                      addressn                      idn                    }n                    idn                  }n                  idn                }n                quantityn                idn              }n            }n          }n          idn        }n        ...AskPrice_datan        ...orderLink_datan        makerAssetBundleDisplay: makerAssetBundle {n          ...AssetCell_assetBundlen          idn        }n        takerAssetBundleDisplay: takerAssetBundle {n          ...AssetCell_assetBundlen          idn        }n        idn        __typenamen      }n      cursorn    }n    pageInfo {n      endCursorn      hasNextPagen    }n  }n}nnfragment Price_data on AssetType {n  decimalsn  imageUrln  symboln  usdSpotPricen  assetContract {n    blockExplorerLinkn    idn  }n}nnfragment ProfileImage_data on AccountType {n  imageUrln  addressn  chain {n    identifiern    idn  }n}nnfragment asset_url on AssetType {n  assetContract {n    account {n      addressn      chain {n        identifiern        idn      }n      idn    }n    idn  }n  tokenIdn}nnfragment orderLink_data on OrderV2Type {n  makerAssetBundle {n    assetQuantities(first: 30) {n      edges {n        node {n          asset {n            externalLinkn            collection {n              externalUrln              idn            }n            idn          }n          idn        }n      }n    }n    idn  }n}nnfragment quantity_data on AssetQuantityType {n  asset {n    decimalsn    idn  }n  quantityn}nnfragment wallet_accountKey on AccountType {n  addressn  chain {n    identifiern    idn  }n}n"""
variables = {"cursor": None, "count": 10, "excludeMaker": None, "isExpired": False, "isFilled": None, "isValid": True, "maker": None, "makerArchetype": None, "makerAssetIsPayment": True, "takerArchetype": {"assetContractAddress": "0x7c40c393dc0f283f318791d746d894ddd3693572",
                                                                                                                                                                                                              "tokenId": "7722"}, "takerAssetCategories": None, "takerAssetCollections": None, "takerAssetIsOwnedBy": None, "takerAssetIsPayment": None, "sortAscending": None, "sortBy": "MAKER_ASSETS_USD_PRICE", "makerAssetBundle": None, "takerAssetBundle": None}
response = requests.post('https://api.opensea.io/graphql/',
    json={"query": query, "variables": variables}
)
print(response.text)
Answered By: Bertrand Martel