2010-06-27 4 views
6

Ich versuche ein R API for StackOverflow zu erstellen. Die Ausgabe wird gezippt. Zum Beispiel:gunzip einen Dateistream in R?

readLines("http://api.stackoverflow.com/0.9/stats/", warn=F) 
[1] "\037‹\b"                                                                       
[2] "\030\002úØÛy°óé½\036„iµXäË–[<üt—Zu[\\VmÎHî=ÜÛݹ×ýz’Í.äûû÷>ý´\a\177Ýh÷\017îÝÛÙwßÚáÿþ«¼þý\027ÅrÝæÔlgüÀëA±\017›ìŽï{M¤û.\020\037�Ë\"¿’\006³ì\032„Úß9¸ÿ`¼ç÷³*~ÿKêˆð¡\006v¦ð²ýô£�ñÃ�ì+ôU�_\026滽�]êt¼·?ÞûÈ4ù%\016~S0^>àe¶ÀG\037½n³éÛôKê缬®‚\016Êê¢úý×u‰fó¶]=º{·aΚŽ—y{·©î\026‹‹»h5^-/‚W1 |9[UŲõ^§�Ç" 
[3] ":¬´¿1M\177ð\"0íö¹ñ…YÞLëbÕ*!~â\027\036§çU�®êê¢ÎˆµhòýæÅ´Zn\036S¶Z•ùv[­§óm´î�"                                                      
[4] "Í™t˪^d¥£·üÂ?¾ÿ\033'¿$ù\177" 

Gibt es eine gute Möglichkeit, dies in R gunzip, kurz, um den Ausgang des Schreibens einzureichen, gunzip'ing es, und es zurück in das Lesen?

+0

Ich freue mich auf das Paket, das am anderen Ende dieser Forschung fallen wird! –

+0

@JD: Absolut. Ich werde die Google-Code-Seite in Kürze veröffentlichen und freue mich darauf, Mitbearbeiter zu übernehmen. Aber mein anfängliches Gefühl ist, dass die SO API nicht sehr nützlich ist. – Shane

Antwort

11

Sie könnten tun:

conn <- gzcon(url("http://api.stackoverflow.com/0.9/stats/")) 
data <- readLines(conn) 
+0

Danke! Vergiss nicht, die Verbindung zu schließen, wenn du fertig bist. – Shane

+0

Warum doppelte 'readLines' benötigt? [mbq Antwort] (http://stackoverflow.com/questions/3128422/gunzip-a-file-stream-in-r/3128738#3128738) funktioniert auch. – Marek

+0

@Marek: korrigiert. Das war nur ich versuche verschiedene Dinge und ich muss etwas zusätzlichen Befehl eingefügt haben. Danke, dass du darauf hingewiesen hast. – nico

5

Versuchen:

p <- gzcon(url("http://api.stackoverflow.com/0.9/stats/")) 
readLines(p) 
4

Idealerweise sollten wir den Server sagen, dass wir gzipped Inhalte verarbeiten können, erfahren Sie von den HTTP-Header, die der Inhalt tatsächlich ist gzip codierte und dekomprimiere dann nur, wenn es ist. Die Rcurl-Bibliothek kann dies tun:

+1

Das wäre der richtige Weg, aber seien Sie sich bewusst, dass das Stack Overflow API-Team in dieser Hinsicht [sich gegen die Einhaltung des HTTP-Protokolls entschieden hat] (http://stackapps.com/questions/729); etwas verwandt werden wir [http://stackapps.com/questions/1028] auch nicht [richtige HTTP/1.1-Cache-Kontrolle] sehen ... –

Verwandte Themen