2010-06-27 7 views
6

मैं एक आर API for StackOverflow बनाने की कोशिश कर रहा हूं। आउटपुट gzipped है। उदाहरण के लिए:आर में एक फाइल स्ट्रीम gunzip?

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" 

वहाँ, उत्पादन फाइल करने के लिए लेखन यह gunzip'ing, और उसे वापस पढ़ने की कमी आर में इस gunzip एक अच्छा तरीका है?

+0

मैं इस शोध के दूसरे छोर को गिरने के लिए बाध्य होने वाले पैकेज की प्रतीक्षा कर रहा हूं! –

+0

@ जेडी: बिल्कुल। मैं जल्द ही गूगल कोड पेज पोस्ट करूंगा और सहयोगियों को लेने में खुश हूं। लेकिन मेरी प्रारंभिक भावना यह है कि एसओ एपीआई बहुत उपयोगी नहीं है। – Shane

उत्तर

11

आप कर सकता है:

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

धन्यवाद! जब आप समाप्त कर लें तो कनेक्शन बंद करना न भूलें। – Shane

+0

डबल 'रीडलाइन' की आवश्यकता क्यों है? [एमबीक्यू उत्तर] (http://stackoverflow.com/questions/3128422/gunzip-a-file-stream-in-r/3128738#3128738) भी काम करता है। – Marek

+0

@ मरेक: सही। यह सिर्फ मैं अलग-अलग चीजों की कोशिश कर रहा था और मैंने कुछ अतिरिक्त आदेश चिपकाया होगा। यह बात बताने के लिए धन्यवाद। – nico

5

प्रयास करें:

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

आदर्श रूप में हम, सर्वर है कि हम Gzipped सामग्री संभाल कर सकते हैं बता HTTP हेडर कि यह सामग्री वास्तव gzip एन्कोड किया गया है से यह पता लगाने चाहिए और उसके बाद केवल तभी डिकंप्रेस करें। आरसीआरएल लाइब्रेरी यह कर सकती है:

library(Rcurl) 
getURL("http://api.stackoverflow.com/0.9/stats/", 
     .opts=list(encoding="identity,gzip") 
+1

यह करने का सही तरीका होगा, लेकिन इस बात से अवगत रहें कि स्टैक ओवरफ़्लो एपीआई टीम ने [HTTP प्रोटोकॉल का पालन करने का निर्णय लिया है] (http://stackapps.com/questions/729); थोड़ा संबंधित हम समय के साथ [उचित HTTP/1.1 कैश नियंत्रण] (http://stackapps.com/questions/1028) नहीं देख पाएंगे ... –

संबंधित मुद्दे