2010-04-30 3 views
0

Je crée une application rails qui prend des informations sur les produits d'un flux de données XML hébergé sur un serveur tiers. Ce code XML est envoyé avec gzip, et j'ai de sérieuses difficultés à obtenir n'importe où avec.Ouverture et décompression d'une URL XML dans Rails

J'ai passé pas mal de temps avec Google à ce sujet, mais les résultats de mes recherches semblent être plus sur l'envoi de sortie Gzipped plutôt que sur la réception d'une entrée Gzippée.

La solution que j'ai trouvée est venue de StackOverflow, mais je reçois toujours des erreurs. Ce que j'essaie de faire en premier lieu est d'imprimer les données XML dans le navigateur, puis je peux commencer par le traitement de celui-ci. Voici mon code actuel:

def load_data 
    url = "http://xml.domain.com/datafeed/" 
    xml_input = Net::HTTP.get(URI.parse(url)) 
    zstream = Zlib::Inflate.new 
    @xml_output = zstream.inflate(xml_input) 
    zstream.finish 
    zstream.close 
    end 

L'erreur que je reçois de c'est:

Zlib::DataError in Cron/get datafeedController#load_data 

vérification d'en-tête incorrect

Je suppose que cela signifie que le les données ne sont pas dans le format attendu, mais je ne trouve pas d'informations sur la façon de le faire correctement n'importe où. Deux choses que j'ai exclues, c'est que l'URL est valide et que la réponse est gzippée, mais je suis coincé avec la façon de surmonter cela.

Toute aide serait grandement appréciée :-)

+0

Cela peut sembler une question stupide, mais êtes-vous * vous * il est gzippés? Avez-vous essayé de manipuler les données telles quelles sans essayer de les décompresser? Il n'est pas inhabituel que la documentation d'une API soit en retard par rapport à l'implémentation réelle, en particulier dans un projet/service plus petit. –

Répondre

2

Trié!

file = Net::HTTP.get(URI.parse(url)) 
gz = Zlib::GzipReader.new(StringIO.new(file)) 
whole_xml = gz.read 

ensuite de charger en hpricot faire l'analyse syntaxique XML:

hp = Hpricot(whole_xml)