Как выйти за пределы 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. Так что либо найдите способ обойти ограничения скорости, либо установите таймер для ваших запросов.

Другие вопросы по тегам