Since contracts can't access the internet directly, price feeds and other external data come through oracles like Chainlink. You declare a small interface for the feed and call its `latestRoundData` (or similar) function.
interface AggregatorV3:
def latestAnswer() -> int256: view
price_feed: public(address)
@external
@view
def get_price() -> int256:
return AggregatorV3(self.price_feed).latestAnswer()Always sanity-check oracle data (non-zero, not obviously stale) before using it for anything that moves funds, and consider what happens if the feed reverts or returns unexpected values.