https://github.com/hausgold/immoscout
Ruby client for the Immobilienscout24 REST API
https://github.com/hausgold/immoscout
api api-client api-wrapper gem immobilienscout24 oss ruby ruby-gem
Last synced: 3 months ago
JSON representation
Ruby client for the Immobilienscout24 REST API
- Host: GitHub
- URL: https://github.com/hausgold/immoscout
- Owner: hausgold
- License: mit
- Created: 2017-10-18T07:42:50.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-05-12T08:53:53.000Z (about 1 year ago)
- Last Synced: 2025-05-12T10:03:42.468Z (about 1 year ago)
- Topics: api, api-client, api-wrapper, gem, immobilienscout24, oss, ruby, ruby-gem
- Language: Ruby
- Homepage: https://rubygems.org/gems/immoscout
- Size: 442 KB
- Stars: 8
- Watchers: 10
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README

[](https://github.com/hausgold/immoscout/actions/workflows/test.yml)
[](https://badge.fury.io/rb/immoscout)
[](https://knowledge.hausgold.de/coverage)
[](https://knowledge.hausgold.de/coverage)
[](https://www.rubydoc.info/gems/immoscout)
This gem provides an API wrapper for the [Immobilienscout24 REST
API](https://api.immobilienscout24.de/our-apis/import-export.html). It provides
the well known _ActiveRecord-like_ model methods.
- [Installation](#installation)
- [Usage](#usage)
- [Configuration](#configuration)
- [Models](#models)
- [Real Estates](#real-estates)
- [Overview supported actions](#overview-supported-actions)
- [Initialize](#initialize)
- [Find](#find)
- [Create & Update & Destroy](#create--update--destroy)
- [Publish & Unpublish](#publish--unpublish)
- [Ontop-Placement](#ontop-placement)
- [Contact](#contact)
- [Overview supported actions](#overview-supported-actions-1)
- [Publish](#publish)
- [Overview supported actions](#overview-supported-actions-2)
- [Attachment (Picture & Document)](#attachment-picture--document)
- [Overview supported actions](#overview-supported-actions-3)
- [Development](#development)
- [Code of Conduct](#code-of-conduct)
- [Contributing](#contributing)
- [Releasing](#releasing)
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'immoscout'
```
And then execute:
```bash
$ bundle
```
Or install it yourself as:
```bash
$ gem install immoscout
```
## Usage
### Configuration
```ruby
Immoscout.configure do |config|
config.consumer_key = "key"
config.consumer_secret = "secret"
config.oauth_token = "token"
config.oauth_token_secret = "token_secret"
config.use_sandbox = true # default: false
config.user_name = "immoscout-user-name" # default: 'me'
end
```
### Models
#### Real Estates
Currently supported: `ApartmentBuy`, `HouseBuy`
##### Overview supported actions
* .find(id)
* .all
* .first
* .last
* .new(hash)
* .from_raw(remote_hash_or_json)
* .create(hash)
* #save
* #destroy
* #publish
* #unpublish
* #place(placement_type)
* #unplace(placement_type)
##### Initialize
```ruby
# initialize with hash
house = Immoscout::Models::HouseBuy.new(title: "test", address: {street: "thestreet"})
# => #, @title="test">
# initialize with attribute writers
house = Immoscout::Models::HouseBuy.new
# => #
house.title = "another title"
# => "another title"
# access nested attributes
house.build_address
# => #
house.address.street = "another street"
# lookup all allowed first-level attributes
house.attributes
# => [:address, :api_search_data, :building_energy_rating_type, ...]
house.address.attributes
# => [:city, :house_number, :postcode, :street, ...]
```
##### Find
```ruby
apartment = Immoscout::Models::ApartmentBuy.find('ID')
# => #
apartment.address.street
# => 'Orig street name'
```
##### Create & Update & Destroy
```ruby
apartment = Immoscout::Models::ApartmentBuy.find('ID')
apartment.address.street = "Changed street"
apartment.save
# => #
house = Immoscout::Models::HouseBuy.find('9473634')
house.destroy
# => #
```
##### Publish & Unpublish
```ruby
apartment = Immoscout::Models::ApartmentBuy.find('ID')
# => #
apartment.publish
# => #
apartment.unpublish
# => #
```
##### Ontop-Placement
```ruby
# allowed placement types: showcaseplacement, premiumplacement, topplacement
apartment = Immoscout::Models::ApartmentBuy.find('ID')
# add premiumplacement
apartment.place(:premiumplacement)
# => #
# remove premiumplacement
apartment.unplace(:premiumplacement)
# => #
```
#### Contact
##### Overview supported actions
* .find(id)
* .all
* .first
* .last
* .new(hash)
* .from_raw(remote_hash_or_json)
* .create(hash)
* #save
* #destroy
```ruby
contact = Immoscout::Models::Contact.new firstname: "John", lastname: "Doe"
# => #
contact.email = "john.doe@example.com"
contact.salutation = "MALE"
contact.save
# => #
```
#### Publish
If you don't like or can't use the `#publish` and `#unpublish` methods defined for realestate models, you can create the `Publish` instance yourself.
##### Overview supported actions
* .new(hash)
* .from_raw(remote_hash_or_json)
* #save
* #destroy
```ruby
# NOTE: publish_channel#id = 10000 => publish on immobilienscout24
publish = Immoscout::Models::Publish.new real_estate: { id: "ID" }, publish_channel: {id: 10_000}
publish.save # published!
# => #
publish.destroy # unpublished!
# => #
```
#### Attachment (Picture & Document)
##### Overview supported actions
* .new(hash)
* .from_raw(remote_hash_or_json)
* #save
* #destroy
```ruby
picture = Immoscout::Models::Picture.new title: "Badezimmer", title_picture: true, floor_plan: false
picture.file = File.open("the/path/to/the/file.jpg") #
picture.attachable = Immoscout::Models::HouseBuy.last # you can also pass the ID
picture.save # attachment upload!
# => #
picture.destroy # attachment destroy!
# => #
```
## Development
After checking out the repo, run `make install` to install dependencies. Then,
run `make test` to run the tests. You can also run `make shell-irb` for an
interactive prompt that will allow you to experiment.
To run specs against the immobilienscout24 sandbox api, you need to create some
keys and tokens. Copy the `spec/test_config.yml.example` to
`spec/test_config.yml` and fill in your generated values.
## Code of Conduct
Everyone interacting in the project codebase, issue tracker, chat
rooms and mailing lists is expected to follow the [code of
conduct](./CODE_OF_CONDUCT.md).
## Contributing
Bug reports and pull requests are welcome on GitHub at
https://github.com/hausgold/immoscout. Make sure that every pull request adds
a bullet point to the [changelog](./CHANGELOG.md) file with a reference to the
actual pull request.
## Releasing
The release process of this Gem is fully automated. You just need to open the
Github Actions [Release
Workflow](https://github.com/hausgold/immoscout/actions/workflows/release.yml)
and trigger a new run via the **Run workflow** button. Insert the new version
number (check the [changelog](./CHANGELOG.md) first for the latest release) and
you're done.