import urllib.request, urllib.error, urllib.parse import logging from django.conf.urls import url from django.contrib.sites.models import Site from django.http import Http404 from django.shortcuts import render_to_response from django.template.context import RequestContext import requests from allauth.socialaccount.models import SocialToken from django.urls import resolve from core.utils.url import wrap_full from dss import settings from spa.models import Playlist from spa.models.mix import Mix from spa.models.userprofile import UserProfile logger = logging.getLogger(__name__) """ Handles callbacks from facebook and twitter """ def _getPayload(request): return { "app_id": settings.FACEBOOK_APP_ID, "site_url": 'http://%s' % Site.objects.get_current().domain, "site_image_url": '%s/img/dss-large.png' % settings.STATIC_URL, } def facebook_mix(request, slug): try: mix = Mix.objects.get(slug=slug) except Mix.DoesNotExist: raise Http404 try: image = mix.get_image_url('400x400') mix_url = mix.get_absolute_url() default = _getPayload(request) extras = { "description": mix.description.replace('
', '\n'), "title": mix.title, "image_url": image, "mix_url": 'http://%s%s' % (Site.objects.get_current().domain, mix_url) } payload = dict(list(default.items()) + list(extras.items())) response = render_to_response( 'social/facebook/mix.html', payload, context_instance=RequestContext(request) ) return response except Exception as ex: logger.error(ex) def playlist(request, args): try: playlist = Playlist.objects.get(slug=args['slug']) except Playlist.DoesNotExist: raise Http404 site_url = settings.DEBUG_URL if settings.DEBUG else Site.objects.get_current().domain image = playlist.get_image_url('400x400') playlist_url = "http://%s%s" % (site_url, playlist.get_absolute_url()) default = _getPayload(request) extras = { "description": "Deep South Sounds Playlist by %s" % playlist.user.get_nice_name(), "title": playlist.name, "image_url": image, "playlist_url": playlist_url } payload = dict(list(default.items()) + list(extras.items())) response = render_to_response( 'inc/facebook/playlist.html', payload, context_instance=RequestContext(request) ) print(response.content) return response def user(request, args): try: user = UserProfile.objects.get(slug=args['user_id']) except UserProfile.DoesNotExist: raise Http404 image = user.get_avatar_image() profile_url = user.get_profile_url() default = _getPayload(request) extras = { "title": user.get_nice_name(), "description": user.get_profile_description().replace('
', '\n'), "profile_url": wrap_full(profile_url), "image_url": image, } payload = dict(list(default.items()) + list(extras.items())) response = render_to_response( 'inc/facebook/user.html', payload, context_instance=RequestContext(request) ) return response def index(request): response = render_to_response( "inc/facebook/index.html", _getPayload(request), context_instance=RequestContext(request)) return response def social_redirect(request): try: resolver = resolve('/social' + request.path) if resolver is not None: logger.debug("Resolver successfully resolved") return resolver.func(request, resolver.kwargs) else: logger.debug("No resolver found for: $%s" % request.path) except Http404: logger.debug("404 on resolver: $%s" % request.path) return index(request) except Exception as ex: logger.debug("Unhandled exception in social_redirect: $%s" % ex) return index(request) def post_like(request, mix): try: tokens = SocialToken.objects.filter( account__user=request.user, account__provider='facebook') for token in tokens: url = 'https://graph.facebook.com/%s/og.likes' % token.account.uid values = { 'access_token': token.token, 'object': mix.get_full_url(), } response = requests.post(url, data=values) if response.status_code == 200: print("Returned %s" % response.json) return response.json['id'] else: print("Returned status code of %s" % response.status_code) except urllib.error.HTTPError as httpEx: print(httpEx) except Exception as ex: print(ex) return "" def delete_like(request, uid): try: tokens = SocialToken.objects.filter(account__user=request.user, account__provider='facebook') for token in tokens: url = "https://graph.facebook.com/%s" % uid values = { 'access_token': token.token, } response = requests.delete(url, data=values) return response except Exception as ex: print("Error talking with facebook: %s" % ex)