kavanland
clone your own copy | download snapshot

Snapshots | iceberg

No images in this repository’s iceberg at this time

Inside this repository

index_tumblr.py
text/x-python

Download raw (1.9 KB)

import datetime
import pytumblr
import time
from django.core.management.base import BaseCommand
from django.conf import settings
from twitblr.models import Tumblr, Photo, Tag


def tumblr_loop(client, before=None, after=0):
    posts = client.tagged("anna kavan", before=before, limit=20)

    recurse = True

    for post in posts:
        date = post.get("timestamp")

        if date <= after:
            recurse = False
            break

        initial = {
            "date": datetime.datetime.fromtimestamp(post.get("timestamp")),
            "body": post.get("body", ""),
            "text": post.get("text", ""),
            "caption": post.get("caption", ""),
            "url": post.get("post_url"),
            "blog_name": post.get("blog_name")
        }

        obj = Tumblr.objects.create(**initial)

        for photo in post.get("photos", []):
            original_photo = photo["original_size"]

            initial = {
                "caption": photo.get("caption", ""),
                "height": original_photo["height"],
                "width": original_photo["width"],
                "url": original_photo["url"]
            }
            p = Photo.objects.create(**initial)
            obj.photos.add(p)

        for tag in post.get("tags", []):
            t, created = Tag.objects.get_or_create(name=tag)
            obj.tags.add(t)

    if recurse:
        timestamp = posts[-1]["timestamp"]
        tumblr_loop(client, before=timestamp, after=after)


class Command(BaseCommand):
    help = 'Indexes Tumblr posts'

    def handle(self, *args, **options):
        try:
            latest_tumblr = Tumblr.objects.order_by('-date')[:1].get()
            timestamp = int(time.mktime(latest_tumblr.date.timetuple()))
        except:
            timestamp = 0

        client = pytumblr.TumblrRestClient(*settings.TUMBLR_KEYS)
        tumblr_loop(client, after=timestamp)