Как выйти за пределы OpenSea Api?
Я пытаюсь использовать OpenSea API и заметил, что мне нужно установить лимит перед извлечением ресурсов https://docs.opensea.io/reference/getting-assets
Я решил, что могу использовать смещение для навигации по всем элементам, даже если это утомительно. Но проблема в том, что у самого смещения есть предел, поэтому недоступны ли активы за пределами максимального смещения?
Я читал, что вы утверждаете, что API "ограничено по скорости" без ключа API, поэтому я предполагаю, что это связано с количеством запросов, которые вы можете сделать за определенный период времени, правильно ли я? Или это поднимает лимит возвращаемых активов? В документации нет ясности об этом https://docs.opensea.io/reference/api-overview
Что я могу сделать, чтобы перемещаться по всем активам?
1 ответ
Возможно, я поздно отвечу на этот вопрос, но у меня была аналогичная проблема. При использовании API вы можете получить доступ только к ограниченному количеству (50) активов.
Используя API, указанный на странице, на которую вы ссылаетесь, вы можете выполнить цикл for для получения ресурсов коллекции в диапазоне. Например, используя Python:
import requests
def get_asset(collection_address:str, asset_id:str) ->str:
url = "https://api.opensea.io/api/v1/assets?token_ids="+asset_id+"&asset_contract_address="+collection_address+"&order_direction=desc&offset=0&limit=20"
response = requests.request("GET", url)
asset_details = response.text
return asset_details
#using the Dogepound collection with address 0x73883743dd9894bd2d43e975465b50df8d3af3b2
collection_address = '0x73883743dd9894bd2d43e975465b50df8d3af3b2'
asset_ids = [i for i in range(10)]
assets = [get_asset(collection_address, str(i)) for i in asset_ids]
print(assets)
На самом деле я использовал Typescript, потому что это то, что opensea использует для своего SDK (https://github.com/ProjectOpenSea/opensea-js). Он немного более универсален и позволяет автоматизировать создание предложений, покупку и продажу активов. В любом случае, вот как вы можете получить все эти ресурсы в Typescript (вам может потребоваться еще несколько зависимостей, чем указано ниже):
import * as Web3 from 'web3'
import { OpenSeaPort, Network } from 'opensea-js'
// This example provider won't let you make transactions, only read-only calls:
const provider = new Web3.providers.HttpProvider('https://mainnet.infura.io')
const seaport = new OpenSeaPort(provider, {
networkName: Network.Main
})
async function getAssets(seaport: OpenSeaPort, collectionAddress: string, tokenIDRange:number) {
let assets:Array<any> = []
for (let i=0; i<tokenIDRange; i++) {
try {
let results = await client.api.getAsset({'collectionAddress':collectionAddress, 'tokenId': i,})
assets = [...assets, results ]
} catch (err) {
console.log(err)
}
}
return Promise.all(assets)
}
(async () => {
const seaport = connectToOpenSea();
const assets = await getAssets(seaport, collectionAddress, 10);
//Do something with assets
})();
Последнее, что нужно знать, это то, что их API ограничен по скорости, как вы сказали. Таким образом, вы можете сделать только определенное количество вызовов их API в течение определенного периода времени, прежде чем вы получите надоедливую ошибку 429. Так что либо найдите способ обойти ограничения скорости, либо установите таймер для ваших запросов.