diff options
Diffstat (limited to 'apps/links/retriever.py')
-rw-r--r-- | apps/links/retriever.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/apps/links/retriever.py b/apps/links/retriever.py new file mode 100644 index 0000000..35bd41a --- /dev/null +++ b/apps/links/retriever.py @@ -0,0 +1,161 @@ +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('<blockquote>','\n“') + desc = desc.replace('</blockquote>','”\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") |