Skip to content

scailer/django-social-publisher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django_social_publisher

Extension for python-social-auth [https://pypi.python.org/pypi/python-social-auth/] that add ability to create posts in social nets from registered user directly.

Module contains pluggable system of social-nets backends and handlers for adapt user content to social nets API format.

For writing you own haandlers, see examples in source code.

Normally works for twitter, facebook and tumblr.

Works with hacks for VK, pinterest.

Start

$ pip install django_social_publisher

project/settings.py

INSTALLED_APPS = (
    ...
    'social.apps.django_app.default',
)

SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'
AUTH_USER_MODEL = 'test_app.User'

account/models.py

from social_publisher import mixins
from django.contrib.auth.models import AbstractUser

class User(AbstractUser, mixins.PublisherForUserMixin):
    pass

Base usage:

user.publish.<provider_name>(obj, comment, **kwargs)
user.publish_to(provider_name, obj, comment, **kwargs)

Twitter

$ pip install twython

project/settings.py

AUTHENTICATION_BACKENDS = (
    'social.backends.twitter.TwitterBackend',      # twitter
    ...
)

PUBLISHER_BACKENDS = (
    'social_publisher.backends.twitter.TwitterBackend',  # basic text message / provider name - twitter
    'social_publisher.backends.twitter.TwitterWithMediaBackend',  # you custom message / provider name - twitter_with_media
    ...
)

PUBLISHER_HANDLERS = {
    # '<provider_name>': 'you.handler.MyHandler'
    'twitter': 'social_publisher.handlers.twitter.TwitterHandler',
    'twitter_with_media': 'social_publisher.handlers.twitter.TwitterWithMediaHandler',
    ...
}

TWITTER_CONSUMER_KEY = '016UBm0dJQVy1dlJNv0G7n3M'
TWITTER_CONSUMER_SECRET = 'ii7KEsHUHxGF5k1aFHZjNExEhPmE9B3WcIhAWDrzX29JSbqKY'
TWITTER_SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'

Usage:

from test_app.models import User
user1 = User.objects.get(username='user1')
user1.publish.twitter('Test message')
user1.publish.twitter_with_media(obj)  # obj - you data for you custom handler

Facebook

$ pip install requests-facebook sorl-thumbnail

project/settings.py

AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookBackend',    # facebook
    ...
)

PUBLISHER_BACKENDS = (
    'social_publisher.backends.facebook.FacebookBackend',  # basic text message / provider name - facebook
    'social_publisher.backends.facebook.FacebookPostImageBackend',  # you custom message / provider name - facebook_post_image
    ...
)

PUBLISHER_HANDLERS = {
    # '<provider_name>': 'you.handler.MyHandler'
    'facebook':     'social_publisher.handlers.facebook.FacebookMessageHandler',
    'facebook_post_image': 'social_publisher.handlers.facebook.FacebookPhotoHandler',
    ...
}

FACEBOOK_PROFILE_EXTRA_PARAMS = {'locale': 'en_US'}
FACEBOOK_SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'
FACEBOOK_EXTENDED_PERMISSIONS = ['email', 'publish_actions']
FACEBOOK_APP_ID = '000016257465000'
FACEBOOK_API_SECRET = 'a0000000000003ef94c343382537c60'

Usage:

from test_app.models import User
user1 = User.objects.get(username='user1')
user1.publish.facebook('Test message')
user1.publish.facebook_post_image(obj)  # obj - you data for you custom handler

Tumblr

$ pip install PyTumblr

project/settings.py

AUTHENTICATION_BACKENDS = (
    'social.backends.tumblr.TumblrOAuth',
    ...
)

PUBLISHER_BACKENDS = (
    'social_publisher.backends.tumblr.TumblrPhotoBackend',
    ...
)

PUBLISHER_HANDLERS = {
    'tumblr_photo': 'social_publisher.handlers.tumblr.TumblrPhotoHandler',  # use as example
    ...
}

SOCIAL_AUTH_TUMBLR_KEY = 'XXXXXXXXXXXXXXXXXXXXXFSZboiEYvCm3I8HOToVjRNrIgMo6J'
SOCIAL_AUTH_TUMBLR_SECRET = 'jV173bMZFjvNiybCvdEx6cjITXXXXXXXXXXXXXXXXXXXXXXXXX'

ВКонтакте

Works only with hacks, no official way.

Warning! You need catch response from VK on client side, fix it - replace "#" by "?" and send secret keys to the server.

$ pip install vk

project/settings.py

AUTHENTICATION_BACKENDS = (
    'social_publisher.auth.vk.VKStandaloneBackend',
    ...
)

PUBLISHER_BACKENDS = (
    'social_publisher.backends.vk.VKImageToWallBackend',
    ...
)

PUBLISHER_HANDLERS = {
    'vk_image_to_wall': 'social_publisher.handlers.vk.VKImageToWallHandler',  # use as example
    ...
}

SOCIAL_AUTH_VK_STANDALONE_APP_ID = '1122334'
SOCIAL_AUTH_VK_STANDALONE_API_SECRET = 'XXXXXXXXURsWdhXXXXXX'
SOCIAL_AUTH_VK_STANDALONE_EXTRA_SCOPE = ['wall', 'photos', 'offline']
SOCIAL_AUTH_VK_STANDALONE_AUTH_EXTRA_ARGUMENTS = {
    'redirect_uri': 'blank.html',
    'response_type': 'token',
}

Pinterest

Works only with hacks, no official way.

Warning! You need catch response from VK on client side, fix it - replace "#" by "?" and send secret keys to the server.

$ pip install requests 

project/settings.py

AUTHENTICATION_BACKENDS = (
    'social_publisher.auth.pinterest.PinterestOauth',
    ...
)

PUBLISHER_BACKENDS = (
    'social_publisher.backends.pinterest.PinterestBackend',
    ...
)

PUBLISHER_HANDLERS = {
    'pinterest': 'social_publisher.handlers.pinterest.PinterestHandler',  # use as example
    ...
}


SOCIAL_AUTH_PINTEREST_KEY = '1111111'
SOCIAL_AUTH_PINTEREST_SECRET = 'XXXXc1d1'
SOCIAL_AUTH_PINTEREST_AUTH_EXTRA_ARGUMENTS = {
    'no_auto_redirect_or_interstitial': '1'
}

G+

I don't know ways post to G+

Extra settings

project/settings.py

PUBLISHER_DEFAULT_HANDLER = 'social_publisher.handlers.default.DefaultHandler'
PUBLISHER_LOGGER_NAME = 'my_logger'
PUBLISHER_DEBUG = True  # if False, errors fails silently and writes log

The author brings apologies for my english.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published