Added Foursquare backend
This commit is contained in:
parent
3daf39e3e0
commit
3b2ca4d70c
6 changed files with 81 additions and 0 deletions
|
@ -15,6 +15,7 @@ Backends
|
||||||
platypush/backend/button.flic.rst
|
platypush/backend/button.flic.rst
|
||||||
platypush/backend/camera.pi.rst
|
platypush/backend/camera.pi.rst
|
||||||
platypush/backend/chat.telegram.rst
|
platypush/backend/chat.telegram.rst
|
||||||
|
platypush/backend/foursquare.rst
|
||||||
platypush/backend/google.fit.rst
|
platypush/backend/google.fit.rst
|
||||||
platypush/backend/google.pubsub.rst
|
platypush/backend/google.pubsub.rst
|
||||||
platypush/backend/gps.rst
|
platypush/backend/gps.rst
|
||||||
|
|
|
@ -15,6 +15,7 @@ Events
|
||||||
platypush/events/camera.rst
|
platypush/events/camera.rst
|
||||||
platypush/events/chat.telegram.rst
|
platypush/events/chat.telegram.rst
|
||||||
platypush/events/distance.rst
|
platypush/events/distance.rst
|
||||||
|
platypush/events/foursquare.rst
|
||||||
platypush/events/geo.rst
|
platypush/events/geo.rst
|
||||||
platypush/events/google.rst
|
platypush/events/google.rst
|
||||||
platypush/events/google.fit.rst
|
platypush/events/google.fit.rst
|
||||||
|
|
5
docs/source/platypush/backend/foursquare.rst
Normal file
5
docs/source/platypush/backend/foursquare.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
``platypush.backend.foursquare``
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. automodule:: platypush.backend.foursquare
|
||||||
|
:members:
|
5
docs/source/platypush/events/foursquare.rst
Normal file
5
docs/source/platypush/events/foursquare.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
``platypush.message.event.foursquare``
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: platypush.message.event.foursquare
|
||||||
|
:members:
|
55
platypush/backend/foursquare.py
Normal file
55
platypush/backend/foursquare.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
from platypush.backend import Backend
|
||||||
|
from platypush.context import get_plugin
|
||||||
|
from platypush.message.event.foursquare import FoursquareCheckinEvent
|
||||||
|
|
||||||
|
|
||||||
|
class FoursquareBackend(Backend):
|
||||||
|
"""
|
||||||
|
This backend polls for new check-ins on the user's Foursquare account and triggers an event when a new check-in
|
||||||
|
occurs.
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* The :class:`platypush.plugins.foursquare.FoursquarePlugin` plugin configured and enabled.
|
||||||
|
|
||||||
|
Triggers:
|
||||||
|
|
||||||
|
- :class:`platypush.message.event.foursquare.FoursquareCheckinEvent` when a new check-in occurs.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
_last_created_at_varname = '_foursquare_checkin_last_created_at'
|
||||||
|
|
||||||
|
def __init__(self, poll_seconds: float = 60.0, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
:param poll_seconds: How often the backend should check for new check-ins (default: one minute).
|
||||||
|
"""
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.poll_seconds = poll_seconds
|
||||||
|
self._last_created_at = None
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
super().run()
|
||||||
|
self._last_created_at = int(get_plugin('variable').get(self._last_created_at_varname).
|
||||||
|
output.get(self._last_created_at_varname))
|
||||||
|
self.logger.info('Started Foursquare backend')
|
||||||
|
|
||||||
|
while not self.should_stop():
|
||||||
|
try:
|
||||||
|
checkins = get_plugin('foursquare').get_checkins().output
|
||||||
|
if checkins:
|
||||||
|
last_checkin = checkins[0]
|
||||||
|
if not self._last_created_at or last_checkin.get('createdAt', 0) > self._last_created_at:
|
||||||
|
self.bus.post(FoursquareCheckinEvent(checkin=last_checkin))
|
||||||
|
self._last_created_at = last_checkin.get('createdAt', 0)
|
||||||
|
get_plugin('variable').set(**{self._last_created_at_varname: self._last_created_at})
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error('Error while retrieving the list of checkins: {}'.format(str(e)))
|
||||||
|
self.logger.exception(e)
|
||||||
|
finally:
|
||||||
|
time.sleep(self.poll_seconds)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
14
platypush/message/event/foursquare.py
Normal file
14
platypush/message/event/foursquare.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
|
from platypush.message.event import Event
|
||||||
|
|
||||||
|
|
||||||
|
class FoursquareCheckinEvent(Event):
|
||||||
|
"""
|
||||||
|
Event triggered when a new check-in occurs.
|
||||||
|
"""
|
||||||
|
def __init__(self, checkin: Dict[str, Any], *args, **kwargs):
|
||||||
|
super().__init__(*args, checkin=checkin, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
Loading…
Reference in a new issue