Added Foursquare backend

This commit is contained in:
Fabio Manganiello 2020-01-11 16:11:35 +01:00
parent 3daf39e3e0
commit 3b2ca4d70c
6 changed files with 81 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,5 @@
``platypush.backend.foursquare``
================================
.. automodule:: platypush.backend.foursquare
:members:

View file

@ -0,0 +1,5 @@
``platypush.message.event.foursquare``
======================================
.. automodule:: platypush.message.event.foursquare
:members:

View 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:

View 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: