diff options
Diffstat (limited to 'app/unused_apps/syndication')
-rw-r--r-- | app/unused_apps/syndication/__init__.py | 0 | ||||
-rw-r--r-- | app/unused_apps/syndication/admin.py | 20 | ||||
-rw-r--r-- | app/unused_apps/syndication/migrations/0001_initial.py | 37 | ||||
-rw-r--r-- | app/unused_apps/syndication/migrations/0002_auto_20160628_2149.py | 31 | ||||
-rw-r--r-- | app/unused_apps/syndication/migrations/0003_auto_20161023_2014.py | 19 | ||||
-rw-r--r-- | app/unused_apps/syndication/migrations/__init__.py | 0 | ||||
-rw-r--r-- | app/unused_apps/syndication/models.py | 86 | ||||
-rw-r--r-- | app/unused_apps/syndication/syndicators.py | 123 | ||||
-rw-r--r-- | app/unused_apps/syndication/templatetags/__init__.py | 0 | ||||
-rw-r--r-- | app/unused_apps/syndication/templatetags/facebook_processor.py | 23 | ||||
-rw-r--r-- | app/unused_apps/syndication/views.py | 17 |
11 files changed, 0 insertions, 356 deletions
diff --git a/app/unused_apps/syndication/__init__.py b/app/unused_apps/syndication/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/app/unused_apps/syndication/__init__.py +++ /dev/null diff --git a/app/unused_apps/syndication/admin.py b/app/unused_apps/syndication/admin.py deleted file mode 100644 index b873eb7..0000000 --- a/app/unused_apps/syndication/admin.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.contrib import admin - -from .models import Syndicate, SyndicatedItem, FBOAuthToken - - -@admin.register(FBOAuthToken) -class FBOAuthTokenAdmin(admin.ModelAdmin): - list_display = ('__str__', 'expires',) - pass - - -@admin.register(Syndicate) -class SyndicateAdmin(admin.ModelAdmin): - pass - - -@admin.register(SyndicatedItem) -class SyndicatedItemAdmin(admin.ModelAdmin): - list_display = ('__str__', 'syndicated_to',) - pass diff --git a/app/unused_apps/syndication/migrations/0001_initial.py b/app/unused_apps/syndication/migrations/0001_initial.py deleted file mode 100644 index 9643d51..0000000 --- a/app/unused_apps/syndication/migrations/0001_initial.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2016-03-29 10:07 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ] - - operations = [ - migrations.CreateModel( - name='Syndicate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=200)), - ], - ), - migrations.CreateModel( - name='SyndicatedItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('object_id', models.PositiveIntegerField()), - ('publish_date', models.DateTimeField()), - ('status', models.CharField(blank=True, choices=[('1', 'Unsent'), ('2', 'Sent')], max_length=1, null=True)), - ('rel_link', models.CharField(blank=True, max_length=300, null=True)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ('syndicate', models.ManyToManyField(to='syndication.Syndicate')), - ], - ), - ] diff --git a/app/unused_apps/syndication/migrations/0002_auto_20160628_2149.py b/app/unused_apps/syndication/migrations/0002_auto_20160628_2149.py deleted file mode 100644 index 51812bf..0000000 --- a/app/unused_apps/syndication/migrations/0002_auto_20160628_2149.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2016-06-28 21:49 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('syndication', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='FBOAuthToken', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('short_token', models.TextField()), - ('long_token', models.TextField(blank=True, null=True)), - ('expires', models.DateTimeField(blank=True)), - ('created', models.DateTimeField(default=django.utils.timezone.now)), - ], - ), - migrations.AlterField( - model_name='syndicateditem', - name='status', - field=models.CharField(choices=[('1', 'Unsent'), ('2', 'Sent')], max_length=1, null=True), - ), - ] diff --git a/app/unused_apps/syndication/migrations/0003_auto_20161023_2014.py b/app/unused_apps/syndication/migrations/0003_auto_20161023_2014.py deleted file mode 100644 index 2b311fb..0000000 --- a/app/unused_apps/syndication/migrations/0003_auto_20161023_2014.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2016-10-23 20:14 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('syndication', '0002_auto_20160628_2149'), - ] - - operations = [ - migrations.AlterModelOptions( - name='fboauthtoken', - options={'get_latest_by': 'expires', 'ordering': ('-expires',)}, - ), - ] diff --git a/app/unused_apps/syndication/migrations/__init__.py b/app/unused_apps/syndication/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/app/unused_apps/syndication/migrations/__init__.py +++ /dev/null diff --git a/app/unused_apps/syndication/models.py b/app/unused_apps/syndication/models.py deleted file mode 100644 index c348c1b..0000000 --- a/app/unused_apps/syndication/models.py +++ /dev/null @@ -1,86 +0,0 @@ -from django.db import models -from django.utils import timezone -from django.conf import settings -import datetime -from django.contrib.contenttypes.models import ContentType -from django.contrib.contenttypes.fields import GenericForeignKey -from django.db.models.signals import post_save -from django.dispatch import receiver - -from .syndicators import post_to_medium, build_facebook_feed, post_to_twitter, post_photo_to_flickr, post_to_facebook - - -class FBOAuthToken(models.Model): - short_token = models.TextField() - long_token = models.TextField(null=True, blank=True) - expires = models.DateTimeField(blank=True) - created = models.DateTimeField(default=timezone.now) - - def __str__(self): - return str(self.expires) - - def long_token_link(self): - token_url = "https://graph.facebook.com/oauth/access_token?client_id=%s&client_secret=%s&grant_type=fb_exchange_token&fb_exchange_token=%s" % (settings.FACEBOOK_APP_ID, settings.FACEBOOK_APP_SECRET, self.short_token) - return token_url - - class Meta: - ordering = ('-expires',) - get_latest_by = 'expires' - - def save(self, *args, **kwargs): - self.expires = self.created + datetime.timedelta(60) - super(FBOAuthToken, self).save() - - -class Syndicate(models.Model): - name = models.CharField(max_length=200) - - def __str__(self): - return self.name - - -class SyndicatedItem(models.Model): - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() - content_object = GenericForeignKey('content_type', 'object_id') - syndicate = models.ManyToManyField(Syndicate) - publish_date = models.DateTimeField() - STATUS = ( - ('1', "Unsent"), - ('2', "Sent"), - ) - status = models.CharField(max_length=1, choices=STATUS, null=True) - rel_link = models.CharField(max_length=300, null=True, blank=True) - - def __str__(self): - return str(self.content_object) - - def syndicated_to(self): - return ','.join(str(synd) for synd in self.syndicate.all()) - - -@receiver(post_save, sender=SyndicatedItem) -def post_save_events(sender, update_fields, created, instance, **kwargs): - print(instance.status) - if instance.status == "1": - print("---------calling-----------") - for item in instance.syndicate.all(): - print(item.name) - if item.name == "Medium": - instance.rel_link = post_to_medium(instance.content_object) - instance.status = 2 - if item.name == "Facebook Instant Articles": - build_facebook_feed() - instance.status = 2 - if item.name == "Twitter": - print("calling function") - post_to_twitter(instance.content_object, instance.content_type.name) - if item.name == "Flickr": - if instance.content_type.name == "lux image": - post_photo_to_flickr(instance.content_object) - if item.name == "Facebook": - post_to_facebook(instance.content_object, instance.content_type.name) - post_save.disconnect(post_save_events, sender=SyndicatedItem) - instance.status = "2" - instance.save() - post_save.connect(post_save_events, sender=SyndicatedItem) diff --git a/app/unused_apps/syndication/syndicators.py b/app/unused_apps/syndication/syndicators.py deleted file mode 100644 index 5f8762c..0000000 --- a/app/unused_apps/syndication/syndicators.py +++ /dev/null @@ -1,123 +0,0 @@ -import os -from django.conf import settings -from django.test.client import Client - -from twython import Twython -from bs4 import BeautifulSoup -from medium import Client as MediumClient -import flickrapi -import facebook - -from photos.models import LuxImage - - -def absolute_urls_for_syndication(s): - soup = BeautifulSoup(s, "lxml") - for a in soup.find_all('a'): - if a['href'][:1] == "/": - a['href'] = "https://luxagraf.net%s" % a['href'] - return soup - - -def post_to_medium(item): - client = MediumClient(application_id=settings.MEDIUM_CLIENT_ID, application_secret=settings.MEDIUM_CLIENT_SECRET) - client.access_token = settings.MEDIUM_INT_TOKEN - user = client.get_current_user() - head = '<p><i>This was originally posted <a href="https://luxagraf.net%s" rel="canonical">on my own site</a>.</i></p>' % item.get_absolute_url() - body = "%s %s" % (head, absolute_urls_for_syndication(item.body_html)) - # Create a post. - post = client.create_post( - user_id=user["id"], - title=item.title, - content=body, - content_format="html", - publish_status="public", - canonical_url="https://luxagraf.net%s" % item.get_absolute_url(), - license="all-rights-reserved" - ) - return post["url"] - - -def build_facebook_feed(): - print("+++++++++++++building+++++++++++") - c = Client() - response = c.get('/iafeed.xml', HTTP_HOST='127.0.0.1') - f = open("%siafeed.xml" % settings.FLATFILES_ROOT, 'wb') - f.write(response.content) - f.close() - - -def post_to_twitter(obj, ctype): - print("content type is" + ctype) - t = Twython(settings.TWITTER_API_KEY, settings.TWITTER_API_SECRET, settings.TWITTER_ACCESS_TOKEN, settings.TWITTER_ACCESS_SECRET) - imgs = [] - if ctype == "lux image": - p = open(obj.get_largest_image(), 'rb') - if obj.caption: - status = obj.caption - else: - status = obj.title - response = t.upload_media(media=p) - imgs.append(response) - elif ctype == "lux note": - status = obj.body_markdown - # parse out images and send seperately - soup = BeautifulSoup(status, "lxml") - loop = 0 - for img in soup.find_all('img'): - src = img['src'].split("images/")[1] - i = LuxImage.objects.get(image__icontains=src) - p = open(i.get_largest_image(), 'rb') - response = t.upload_media(media=p) - imgs.append(response) - loop = loop+1 - if loop == 3: - break - for t in soup.find_all('img'): - t.replaceWith("") - # truncate message - if len(status) > 140: - try: - status = status.split("|")[0] + obj.get_absolute_url() - except: - status = status[:140] + obj.get_absolute_url() - print(status) - try: - geo = t.reverse_geocode(lat=obj.latitude, lon=obj.longitude, accuracy=1500, granularity="city") - geo_id = geo['result']['places'][0]['id'] - tweet = t.update_status(status=status, media_ids=[img['media_id'] for img in imgs], place_id=geo_id) - except: - try: - tweet = t.update_status(status=status, media_ids=[img['media_id'] for img in imgs]) - except: - tweet = t.update_status(status=status) - - -def post_photo_to_flickr(photo): - TOKEN_FILE = os.path.join(settings.PROJ_ROOT, "config/flickrToken") - token = open(TOKEN_FILE).read() - flickr = flickrapi.FlickrAPI(settings.FLICKR_API_KEY, settings.FLICKR_API_SECRET, token=token) - sent = flickr.upload(filename=photo.get_image_path_by_size("original"), title=photo.title, description=photo.caption) - photo_id = sent.find('photoid').text - photo.flickr_id = photo_id - try: - flickr.photos.geo.setLocation(photo_id=photo_id, lat=photo.latitude, lon=photo.longitude, accuracy=12) - except: - pass - - -def post_to_facebook(obj, ctype): - from syndication.models import FBOAuthToken - token = FBOAuthToken.objects.latest() - graph = facebook.GraphAPI(access_token=token.long_token, version='2.2') - if ctype == "lux image": - p = open(obj.get_largest_image(), 'rb') - if obj.caption: - message = obj.caption - else: - message = obj.title - try: - fb_response = graph.put_photo(p, message=message) - print(fb_response) - except facebook.GraphAPIError as e: - print('Something went wrong:', e.type, e.message) diff --git a/app/unused_apps/syndication/templatetags/__init__.py b/app/unused_apps/syndication/templatetags/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/app/unused_apps/syndication/templatetags/__init__.py +++ /dev/null diff --git a/app/unused_apps/syndication/templatetags/facebook_processor.py b/app/unused_apps/syndication/templatetags/facebook_processor.py deleted file mode 100644 index 973f863..0000000 --- a/app/unused_apps/syndication/templatetags/facebook_processor.py +++ /dev/null @@ -1,23 +0,0 @@ -from django import template -from bs4 import BeautifulSoup - -from syndication.syndicators import absolute_urls_for_syndication - -register = template.Library() - - -def wrap_image_tags(text): - soup = BeautifulSoup(text, 'lxml') - for img in soup.find_all('img'): - if img.parent.name != "figure": - new_tag = soup.new_tag('figure') - img.wrap(new_tag) - return soup - - -def facebook_processor(text): - ia = absolute_urls_for_syndication(text) - ia = wrap_image_tags(str(ia)[12:-14]) - return str(ia)[12:-14] - -register.filter('facebook_processor', facebook_processor) diff --git a/app/unused_apps/syndication/views.py b/app/unused_apps/syndication/views.py deleted file mode 100644 index e489846..0000000 --- a/app/unused_apps/syndication/views.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.views.generic import ListView - -from .models import SyndicatedItem - - -class FacebookFeedView(ListView): - """ - Return a main entry and list of Entries in reverse chronological order - """ - queryset = SyndicatedItem.objects.filter(syndicate__name__exact="Facebook")[:16] - - def get_template_names(self): - return "fb-feed.xml" - - def render_to_response(self, context, **response_kwargs): - response_kwargs.update({'content_type': 'text/xml'}) - return super(FacebookFeedView, self).render_to_response(context, **response_kwargs) |