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.
django , python , trackback Kommentar schreiben Trackback-URL