Django-activitysync is an easy to use social activity aggregator for Django projects.
It can be used to store and display activity from a range of social networks (such as Twitter, Reddit, Google Reader, etc). Unlike other utilities for accessing and displaying activity, django-activitysync separates rendering from activity updating. All activity information is stored in the project's database using Django models, providing great performance for page requests. Updating activities happens through a Django management command, which can be automated by using a utility like cron.
Currently supports the following activity providers:
Providers are implemented using a simple, common interface, making it very easy to add support for additional networks
Dependencies that must be meet to use the application:
- Twitter support depends on python-twitter
- Google Reader and Reddit support depend on feedparser (version 4.1)
From pypi:
$ pip install django-activitysync
or:
$ easy_install django-activitysync
or clone from Bitbucket:
$ hg clone https://bitbucket.org/dancarroll/django-activitysync
and add activitysync to PYTHONPATH:
$ export PYTHONPATH=$PYTHONPATH:$(pwd)/django-activitysync/
or:
$ cd django-activitysync $ sudo python setup.py install
Add activitysync to
INSTALLED_APPSin settings.py:INSTALLED_APPS = ( ... 'activitysync' )Add desired providers to
ACTIVITYSYNC_PROVIDERSsetting:ACTIVITYSYNC_PROVIDERS = ( 'activitysync.providers.googlereader.GoogleReaderProvider', 'activitysync.providers.twitterprovider.TwitterUserProvider', 'activitysync.providers.twitterprovider.TwitterSearchProvider', 'activitysync.providers.redditprovider.RedditProvider', )Add provider settings to settings.py (dependent on which providers are added). For ease of use and organizational purposes, all settings for providers should be stored in the
ACTIVITYSYNC_SETTINGSdictionary. Settings required for built-in providers are:ACTIVITYSYNC_SETTINGS = { 'TWITTER_USERNAME': '', # Username to use for TwitterUserProvider 'TWITTER_SEARCHTERM': '', # Search term to use for TwitterSearchProvider 'REDDIT_USERNAME': '', # Username to use for RedditProvider 'GOOGLEREADER_SHARED_RSS': '', # URL of Google Reader shared items RSS feed 'GOOGLEREADER_PUBLIC_URL': '', # URL to Google Reader public page }Sync database to create needed models:
python manage.py syncdb
or (if you have South installed):
python manage.py migrate activitysync
Once configuration is completed, run the included management command to fetch activities for the configured providers:
python manage.py updateactivities
The command will print out all new activities to the command line. All activity items are stored with a unique guid value, so this command can be run as often as needed without worrying about creating duplicate values. In a production site, this command likely would be added to the crontab (or other scheduler) to run fairly often (such as every 30 minutes).
There are a few options available for the management command.
Use the
--send-resultoption to send an email to the site admins (controlled by the Django ADMIN setting) with the newly added activities (no email is sent if there are no new items):python manage.py updateactivities --send_result
Use the
--dry-run optionto output the items to the console, but not actually create items in the database:python manage.py updateactivities --dry-run
Activity items can be accessed like any other model using Django's ORM. Here is a quick example of getting all published activity items (fetched items default to public, but can be hidden by modifying the item in the Django admin site):
from django.shortcuts import render_to_response
from activitysync.models import Activity
def index(request):
return render_to_response(
'index.html',
{ 'activities': Activity.objects.published() }
)
Django-activitysync also provides a template tag for displaying items:
{% load activitysync_extras %}
{% render_activities activities %}
The render_activities template tag will pass the object list and
MEDIA_URL values to the template activitysync/activities_tag.html.
The project comes with a sample template that will be used by default, or you
can use it as a basis for your own. A second template tag,
render_activities_with_date_headers renders the activity list along with
date headers for each unique day encountered.