我正在尝试创建一个R API for StackOverflow。输出是gzip压缩的。例如:
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"
有没有一种很好的方法可以在R中进行枪杀,没有将输出写入文件,将其压缩并重新读取?
答案 0 :(得分:11)
你可以这样做:
conn <- gzcon(url("http://api.stackoverflow.com/0.9/stats/"))
data <- readLines(conn)
答案 1 :(得分:5)
尝试:
p <- gzcon(url("http://api.stackoverflow.com/0.9/stats/"))
readLines(p)
答案 2 :(得分:4)
理想情况下,我们应该告诉服务器我们可以处理gzip压缩的内容,从HTTP头中找出内容实际上是gzip编码的,然后只有在解压缩时才解压缩。 Rcurl库可以做到这一点:
library(Rcurl)
getURL("http://api.stackoverflow.com/0.9/stats/",
.opts=list(encoding="identity,gzip")