今天遇到一个问题就是用python调用stackoverflow提供的api的时候,一开始老是不能直接将其解析为字符串,但是在chrome浏览器上面直接访问那个api却可以看到json串,在ff下面是返回一个json串的文件,要求下载,文件内容就是我想要的。然后查了下response 的header, 发现content-type是application/json的,看来chrome是智能一些,它试图去用解析这个文件并直接在浏览器上面显示而不需要下载。同时发现content-encoding是gzip的,接下来就好办了。直接用python的gzip + cStringIO来处理,代码如下。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import urllib
import simplejson as json
import gzip
import cStringIO
def run():
url = 'http://api.stackoverflow.com/1.0/stats'
c = urllib.urlopen(url).read()
s = cStringIO.StringIO(c)
gzfile = gzip.GzipFile(fileobj=s, mode='rb')
content = gzfile.read()
data = json.loads(content)
print type(data)
print data
run()
得到的是这样的json字符串:
{
"statistics": [
{
"total_questions": 1154706,
"total_unanswered": 210487,
"total_accepted": 722309,
"total_answers": 2880708,
"total_comments": 4533614,
"total_votes": 10049713,
"total_badges": 1128935,
"total_users": 427202,
"questions_per_minute": 2.36,
"answers_per_minute": 4.72,
"badges_per_minute": 1.98,
"views_per_day": 586548.96,
"api_version": {
"version": "1.0",
"revision": "2010.12.15.1"
},
"site": {
"name": "Stack Overflow",
"logo_url": "http://sstatic.net/stackoverflow/img/logo.png",
"api_endpoint": "http://api.stackoverflow.com",
"site_url": "http://stackoverflow.com",
"description": "Q&A for professional and enthusiast programmers",
"icon_url": "http://sstatic.net/stackoverflow/img/apple-touch-icon.png",
"aliases": [
"http://www.stackoverflow.com"
],
"state": "normal",
"styling": {
"link_color": "#0077CC",
"tag_foreground_color": "#3E6D8E",
"tag_background_color": "#E0EAF1"
}
}
}
]
}
*思考: stackoverflow的服务器这样做(返回application/json这样的media type而不是以前经常遇到的text/plain)的原因可能是为了压缩数据,后面的content-encoding是gzip更加说明了这一点,这样可以减少网络IO,由此判断stackoverflow的访问量还是挺大的,之前有几次访问都出现”网站访问量过大,请稍后访问“的类似提示。。。
*补充: 如果想服务端返回application/json这样的media type,很简单,只需要在header里面设置content-type就行了。类似: headers = {'content-type': 'application/json'}, return Response(body, headers=headers)
分享到:
相关推荐
虽然不影响接口的读取,但是可读性太差,于是研究了一下怎么直接显示成中文。最后找到了解决方案如下,在配置中加入下面一行代码就OK了。 app.config['JSON_AS_ASCII'] = False json.dumps()解决同样的问题可以加入...
解决java.lang.StackOverflowError
StackOverflow API 该应用程序使用户可以提交他们感兴趣的主题,然后显示这些查询的结果。 该页面的第二个功能使用户能够搜索特定主题的顶级StackOverflow答题器。 此应用是使用HTML5,CSS#和jQuery构建的。 该...
Flutter StackOverflow App 后端接口使用stack overflow问题API
流星堆栈溢出 Stackoverflow API 的 Oauth2 包装器,它是 account-stackoverflow 的中心点
API 诊所粗略笔记 什么是 API? 应用程序接口 它是一组规则、代码、规范,软件程序用来相互通信 它是不同软件程序之间的接口,以便它们可以相互通信 您一直在这里使用您在前期工作中开始并现在使用的 API Ruby API...
StackOverFlowApi :smiling_face_with_heart-eyes:屏幕截图参考: :dizzy: 程式语言: Kotlin :fire:架构和模式: ...其余的Api: 基本网址: :backhand_index_pointing_right: 中篇 :backhand_index_pointing_right:
Silex骷髅 欢迎使用Silex Skeleton-一种功能齐全的Silex应用程序,您可以将其用作新应用程序的框架。 本文档包含有关如何开始使用Silex Skeleton的信息。 创建Silex应用程序 Silex使用简化了新项目的创建: ...
StackOverflow 创始人推荐图书
SonarQube JSON分析器免责...故障排除如果JSON文件包含一些高度嵌套的对象(超过一百个嵌套级别),则您可能会遇到如下StackOverflowError : Exception in thread "main" java.lang.StackOverflowErrorat com.sonar.ss
堆栈溢出API(COMP 4350分配1) 这是一个网络应用程序,用于使用其API从热门网站StackOverflow检索标记关键字的前10个投票最多和最新的帖子。
播放 json 扩展 play-json实用程序扩展库 特征 轻松转换密钥 import play . api . libs . json . ext . _ ... val madoka = JsObject ( Seq ( " firstName " - > JsString ( " Madoka " ), " lastName " - > Js...
stackoverflow_API_scrap 使用其API的stackoverflow信息和Web抓取来创建Sqlite DB
stackoverflow java mobi 电子书 ebook java学习好资料
jsonresume的堆栈溢出主题从入门安装命令行在json中创建简历运行开发服务器的官方 。 继续安装: npm install -g resume-cli安装并投放主题克隆存储库npm install git+...
在Controller返回JSON数据到前端的时候 出现了这个StackOverflowError的错误 即 在将对象转换为JSON格式的数据的时候出现了无限递归调用的情况 如下: org.springframework....
我从几篇博客中截到的关于stackoverflow搭建技术资料,里面图文并茂,相信对想了解stackoverflow基本架构的IT伙伴们会有启发
Stackoverflow 上关于 Python 的问题
介绍该存储库是有关 (CS 6501)的最终项目的。 在此项目中,我们提出了一个名为问题推荐系统(QRS)的系统,用户可以使用该系统输入新问题,他们将获得可能已经有好的... 而且,我们的预览页面(使用stackoverflow API
Stackoverflow 热门 Python 文章翻译(文集) 目录 基础 基本语法控制流相关 字符串相关 文件相关 数学相关 基本数据结构 列表 元组 字典 进阶 函数 内置函数 异常 模块 标准库 日期 oop 其他 pip/easy_install...