2009-04-10 9 views
4

J'ai un site django, et certains des flux sont publiés via FeedBurner. Je voudrais ping FeedBurner chaque fois que je sauve une instance d'un modèle particulier. Le site Web de FeedBurner dit d'utiliser le mécanisme de ping XML-RPC, mais je ne trouve pas beaucoup de documentation sur la façon de l'implémenter.Ping FeedBurner dans Django App

Quelle est la manière la plus facile de faire le ping XML-RPC dans django/Python?

Répondre

12

Vous pouvez utiliser la fonction de Django signals pour obtenir un rappel après un modèle est enregistré:

import xmlrpclib 
from django.db.models.signals import post_save 
from app.models import MyModel 

def ping_handler(sender, instance=None, **kwargs): 
    if instance is None: 
     return 
    rpc = xmlrpclib.Server('http://ping.feedburner.google.com/') 
    rpc.weblogUpdates.ping(instance.title, instance.get_absolute_url()) 

post_save.connect(ping_handler, sender=MyModel) 

De toute évidence, vous devez mettre à jour cela avec ce qui fonctionne pour votre app et lire sur les signaux au cas où vous voulez un événement différent.

+1

veulent juste que les gens sachent que, parce que Google a acquis FeedBurner, la nouvelle URL est http://ping.feedburner.google.com. – Apreche

+1

Vous devez ajouter une barre oblique à la fin de l'URL du serveur, sinon l'appel RPC ira à ping.feedburner.google.com/RPC2 et obtiendra une erreur 404. – iamamac

+0

@lamamac Ajout de la barre oblique. Merci d'avoir attrapé ça! – tghw

1

qch peut-être comme ça:

import xmlrpclib 
j = xmlrpclib.Server('http://feedburnerrpc') 
reply = j.weblogUpdates.ping('website title','http://urltothenewpost') 
Questions connexes