Trackbacks

9. November 2007

Tim Adler schreibt in seinem Blog, wie er in Django den Empfang von Trackbacks realisiert hat. Seine Implementierung habe ich zum größten Teil übernommen, wenn auch an meine Bedürfnisse angepasst. Sie dürfen mich also ab sofort gerne zitieren.

Bei der Gelegenheit habe ich auch für meinen Blog die Möglichkeit geschaffen, selbst Trackbacks an andere Blogs zu schicken. Dafür habe ich zunächst das Model für die Blogeinträge erweitert:

class Post(models.Model):
    [...]
    trackback= models.CharField('Trackback Url', maxlength=255, blank=True)
    [...]

dispatcher.connect(track, signal=signals.pre_save, sender=Post)

Die letzte Zeile führt jedesmal die Funktion track aus, wenn ein Eintrag gespeichert wird:

def track(sender, instance, signal, *args, **kwargs):
    if not instance.public:
        return
    try:
        foo=sender.objects.get(id=instance._get_pk_val())
        if foo.public: # trackback was already sent
            return
    except (sender.DoesNotExist, AssertionError):
        pass
    urls=instance.trackback.split( ' ' )
    data= {'title': instance.title.encode('utf-8'), 
            'url': 'http://%s%s'%(Site.objects.get_current().domain,instance.get_absolute_url()), 
            'excerpt': instance.body[:255].encode('utf-8'), 
            'blog_name': Site.objects.get_current().name}
    for url in urls:
        if not 'http://' == url[:7]:
            url= 'http://%s'%url
        try:
            request=urllib2.Request( url, data= urllib.urlencode( data ) )
            resource= urllib2.urlopen( request )
            result= resource.read()
            if not '<error>0</error>' in result.strip().lower():
                print 'Could not trackback %s: %s'%(url, result)
        except urllib2.URLError, e:
            print 'Could not trackback %s %s'%(url,e)

Im Admintool kann ich jetzt bei jedem Eintrag eine Liste von Trackback-Urls angeben, die angepingt werden, sobald ich einen Eintrag sichtbar schalte. Als nächstes fehlt nur noch, dass die Links in meinen Einträgen automatisch nach Trackback-Urls durchsucht werden, damit ich das nicht mehr von Hand machen muss.

Kommentar schreiben