forked from platypush/platypush
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/camera.pi.rst
|
||||
platypush/backend/chat.telegram.rst
|
||||
platypush/backend/foursquare.rst
|
||||
platypush/backend/google.fit.rst
|
||||
platypush/backend/google.pubsub.rst
|
||||
platypush/backend/gps.rst
|
||||
|
|
|
@ -15,6 +15,7 @@ Events
|
|||
platypush/events/camera.rst
|
||||
platypush/events/chat.telegram.rst
|
||||
platypush/events/distance.rst
|
||||
platypush/events/foursquare.rst
|
||||
platypush/events/geo.rst
|
||||
platypush/events/google.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