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!
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)
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!
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)