import time, datetime, urllib from django.core.exceptions import ObjectDoesNotExist from django.template.defaultfilters import slugify,striptags from django.core.mail import EmailMessage from django.utils.encoding import smart_unicode from django.conf import settings from utils.strutils import safestr,unquotehtml from utils.APIClients import MagnoliaClient from utils import pydelicious as delicious from utils import markdown2 as markdown from links.models import Link def flickr_datetime_to_datetime(fdt): from datetime import datetime from time import strptime date_parts = strptime(fdt, '%Y-%m-%dT%H:%M:%S%Z') return datetime(*date_parts[0:6]) def sync_magnolia_links(*args, **kwargs): #Number of links to retrieve at one time get_num = 15 BASE_PATH = 'http://ma.gnolia.com/api/rest/1/' client = MagnoliaClient(BASE_PATH, settings.MAGNOLIA_API_KEY) data = client.bookmarks_find(person="luxagraf",limit=get_num) dupe = False for post in data.findall('bookmarks/bookmark'): taglist = [] info = dict((k, smart_unicode(post.get(k))) for k in post.keys()) try: row = Link.objects.get(magnolia_id=safestr(info['id'])) # If the row exists already, set the dupe flag dupe = True except ObjectDoesNotExist: f = copy_file(safestr(post.findtext('screenshot')), safestr(info['id'])) local_image_url = "%s/%s.jpg" %(safestr(datetime.datetime.today().strftime("%b").lower()), safestr(info['id'])) for t in post.findall('tags/tag'): tag = dict((k, smart_unicode(t.get(k))) for k in t.keys()) taglist.append(tag['name']) print tag['name'] for tag in taglist: if tag == '2lux': status = 1 break else: status = 0 descr = markdown.markdown(unquotehtml(safestr(post.findtext('description'))), safe_mode = False) l, created = Link.objects.get_or_create( title = post.findtext('title'), magnolia_id = safestr(info['id']), url = safestr(post.findtext('url')), description = descr, screen_url = local_image_url, rating = safestr(info['rating']), pub_date = datetime.datetime(*(time.strptime(str(info['created'][:-6]), '%Y-%m-%dT%H:%M:%S')[0:6])), status = status, enable_comments = True, tags = ", ".join(t for t in taglist if t != "2lux") ) email_link(l) send_to_delicious(l) if l.status == 1: post_to_tumblr(l) send_to_deliciousfb(l) if(dupe): break def sync_delicious_links(*args, **kwargs): b = delicious.get_all(settings.DELICIOUS_USER, settings.DELICIOUS_PASS) dupe = False for post in b: taglist = [] try: row = Link.objects.get(magnolia_id=safestr(post['hash'])) # If the row exists already, set the dupe flag dupe = True except ObjectDoesNotExist: #f = copy_file(safestr(post.findtext('screenshot')), safestr(info['id'])) #fake the image since delicious doesn't offer them local_image_url = "%s/%s.jpg" %(safestr(datetime.datetime.today().strftime("%b").lower()), safestr(post['hash'])) tags = str(post['tag']).split(" ") for tag in tags: taglist.append(tag) for tag in taglist: if tag == '2lux': status = 1 break else: status = 0 descr = markdown.markdown(unquotehtml(safestr(post['extended'])), safe_mode = False) l, created = Link.objects.get_or_create( title = post['description'], magnolia_id = safestr(post['hash']), url = safestr(post['href']), description = descr, screen_url = local_image_url, #fake the rating since delicious doesn't offer such things rating = "3", pub_date = datetime.datetime.strptime(post['time'], "%Y-%m-%dT%H:%M:%SZ"), status = status, enable_comments = True, tags = ", ".join(t for t in taglist if t != "2lux") ) email_link(l) if l.status == 1: pass #post_to_tumblr(l) #send_to_deliciousfb(l) if(dupe): break def email_link(link): """ Sends an imported link to Gmail (never hurts to have backups) """ subject = link.title body = "%s\n\n%s\n\n\nvisit site:%s\n" %(link.title, link.description, link.url) msg = EmailMessage(subject, striptags(body), 'sng@luxagraf.net', ['luxagraf@gmail.com']) msg.send() def send_to_delicious(link): del_tags = '' tags = link.tags.split(',') for tag in tags: del_tags += tag.strip().replace(' ','_')+' ' delicious.add(settings.DELICIOUS_USER, settings.DELICIOUS_PASS, link.url, link.title, tags = del_tags, extended = striptags(link.description), dt =safestr(link.pub_date), replace="no") def copy_file(url, id): filename="/home/luxagraf/webapps/static/images/magnolia_thumbs/%s/%s.jpg" %(datetime.datetime.today().strftime("%b").lower(), id) urllib.urlretrieve(url, filename) return id def post_to_tumblr(link): from links import tumblr blog = settings.TUMBLR_URL user= settings.TUMBLR_USER password = settings.TUMBLR_PASSWORD api = tumblr.Api(blog,user,password) post = api.write_link(link.url,name=link.title,description=link.description,date=safestr(link.pub_date)) def send_to_deliciousfb(link): """Wanted my links to go to Facebook and since the Facebook API is needlessly complex I just created a second delicious account and added the feed via facebook""" del_tags = '' tags = link.tags.split(',') for tag in tags: del_tags += tag.strip().replace(' ','_')+' ' desc = link.description.replace('
','\n“') desc = desc.replace('','”\n') desc = striptags(desc) delicious.add(settings.DELTOFACEUSER, settings.DELTOFACEPASS, link.url, link.title, tags = del_tags, extended = desc, dt =safestr(link.pub_date), replace="no")