Skip to content

realgo/rets

 
 

Repository files navigation

PyPI Version Code Health Build Status Python Version License

RETS Python 3 Client

Python 3 client for the Real Estate Transaction Standard (RETS) Version 1.7.2. Supports Python 3.5 or later. This fork has the udatetime dependency replaced so that it will work on windows.

pip install git+https://github.com/realgo/rets.git#egg=rets-python

Example

Standard usage

>>> from rets.client import RetsClient

>>> client = RetsClient(
    login_url='http://my.rets.server/rets/login',
    username='username',
    password='password',
    # Ensure that you are using the right auth_type for this particular MLS
    # auth_type='basic',
    # Alternatively authenticate using user agent password
    # user_agent='rets-python/0.3',
    # user_agent_password=''
)

>>> resource = client.get_resource('Property')

>>> resource.key_field
'LIST_1'

>>> resource_class = resource.get_class('A')

>>> resource_class.has_key_index
True

>>> photo_object_type = resource.get_object_type('HiRes')

>>> photo_object_type.mime_type
'image/jpeg'

You can retrieve listings by performing a search query on the ResourceClass object. The results will include associated search metadata.

>>> search_result = resource_class.search(query='(LIST_87=2017-01-01+)', limit=10)

>>> search_result.count
11941

>>> search_result.max_rows
False

>>> len(search_result.data)
10

The values returned by the search query will be automatically decoded into Python builtin types.

>>> listing = search_result.data[0]

>>> listing.resource_key
'20170104191513476022000000'

>>> listing.data
{
    'internal_listing_id': '20170104191513476022000000',
    'mls_number': '5650160',
    'mod_timestamp': datetime(2017, 8, 2, 12, 5, 17),
    'list_date': datetime(2017, 8, 2),
    'list_price': 250000,
    ...
}

Photos and other object types for a record can be retrieved directly from the record object. They can also be retrieved in bulk from the ObjectType object using the resource keys of the records.

>>> listing.get_objects('HiRes', location=True)
(Object(mime_type='image/jpeg', content_id='20170104191513476022000000', description='Front', object_id='1', url='...', preferred=True, data=None), ...)

>>> all_photos = photo_object_type.get(
    resource_keys=[listing.resource_key for listing in listings],
    location=True,
)

>>> len(all_photos)
232

>>> all_photos[0]
Object(mime_type='image/jpeg', content_id='20071218141725529770000000', description='Primary Photo', object_id='1', url='...', preferred=True, data=None)

Low level RETS HTTP client usage:

from rets.http import RetsHttpClient

client = RetsHttpClient(
    login_url='http://my.rets.server/rets/login',
    username='username',
    password='password',
    # Alternatively authenticate using user agent password
    # user_agent='rets-python/0.3',
    # user_agent_password=''
)

# Authenticate and fetch available transactions
client.login()

# See available Resources
client.get_metadata('resource')

# See available Classes for the Property resource
client.get_metadata('class', resource='Property')

# See the Table definition for Class A
client.get_metadata('table', resource='Property', class_='A')

# Get a sample of recent listings
search_result = client.search(
    resource='Property',
    class_='A',
    query='(LIST_87=2017-01-01+)',
    select='LIST_87,LIST_105,LIST_1',
    limit=10,
    count=1,
)

# Get the KeyField values of the listings
resource_keys = [r['LIST_1'] for r in search_result.data]

# Fetch the photo URLs for those recent listings
objects = client.get_object(
    resource='Property',
    object_type='HiRes',
    resource_keys=resource_keys,
    location=True,
)

Packages

No packages published

Languages

  • Python 96.9%
  • Shell 3.1%