今天遇到一个问题就是用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()解决同样的问题可以加入...
在开发Flutter应用时,我们经常会遇到需要从外部数据源获取数据的情况,比如集成StackOverflow的问题API来构建一个问答应用。本项目"FlutterStackOverflowApp"就是这样一个实例,它利用StackOverflow API来展示问题...
在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...
StackOverflow API 该应用程序使用户可以提交他们感兴趣的主题,然后显示这些查询的结果。 该页面的第二个功能使用户能够搜索特定主题的顶级StackOverflow答题器。 此应用是使用HTML5,CSS#和jQuery构建的。 该...
6. **JSON 处理**:StackOverflow API 返回的数据通常是 JSON 格式,因此我们需要解析和生成 JSON。Scala 有许多库(如 Play JSON 或 Circe)可以方便地进行 JSON 操作。 7. **类型系统**:Scala 的类型系统强大且...
StackOverFlowApi :smiling_face_with_heart-eyes:屏幕截图参考: :dizzy: 程式语言: Kotlin :fire:架构和模式: ...其余的Api: 基本网址: :backhand_index_pointing_right: 中篇 :backhand_index_pointing_right:
3. **高效**:通过StackOverflow的API直接获取信息,减少中间环节。 4. **可扩展**:作为开源项目,可以自定义搜索策略,或者添加其他编程语言的支持。 **注意事项** 1. 由于StackOverflow API有请求限制,频繁使用...
在这个场景下,`meteor-stackoverflow` 是一个专门针对 Meteor 框架的包,它提供了对 Stack Overflow API 的 OAuth2 认证支持,使得在 Meteor 应用中集成 Stack Overflow 功能变得更加便捷。 OAuth2 是一种授权框架...
4. **JSON解析**:StackOverflow的API通常返回JSON格式的数据,因此需要了解`encoding/json`包,学习如何解码JSON数据到Go结构体。 5. **命令行接口**:使用`os`、`flag`和`fmt`包创建命令行接口,接收用户输入,...
Newtonsoft.Json库提供了一种高效且强大的方式将.NET对象转换为JSON字符串(序列化),以及将JSON字符串还原为.NET对象(反序列化)。这在跨平台数据传输、存储和API交互中极为常见。 2. **支持的 .NET 版本** - *...
API 诊所粗略笔记 什么是 API? 应用程序接口 它是一组规则、代码、规范,软件程序用来相互通信 它是不同软件程序之间的接口,以便它们可以相互通信 您一直在这里使用您在前期工作中开始并现在使用的 API Ruby API...
在本项目"stackoverflow_API_scrap"中,我们将探讨如何利用Stack Overflow的API和Web抓取技术来构建一个SQLite数据库。Stack Overflow API是一个公开接口,允许开发者获取网站上的问题、答案、用户信息等数据。结合...
Silex骷髅 欢迎使用Silex Skeleton-一种功能齐全的Silex应用程序,您可以将其用作新应用程序的框架。 本文档包含有关如何开始使用Silex Skeleton的信息。 创建Silex应用程序 Silex使用简化了新项目的创建: ...
在深入探讨Stackoverflow的架构设计和开发内幕之前,有必要先对Stackoverflow本身有一个基本了解。Stackoverflow是一个面向编程专业人士的问答网站,其特点在于用户可以问问题、回答问题并参与社区讨论。由于其高效...
此外,可能还涉及到了**JSON(JavaScript Object Notation)**,因为Stack Overflow API返回的数据格式通常是JSON。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。开发者需要解析...
1. **StackOverflow 插件**:这是一个专为 IntelliJ IDEA 设计的插件,旨在方便开发者在 IDE 内部直接访问 StackOverflow 网站,以寻求编程问题的答案和解决方案,提高开发效率。 2. **停止更新**:原始插件的...
【系统稳定性——StackOverFlowError常见原因及解决方法】 在Java编程中,系统稳定性是至关重要的,而StackOverflowError是一个常见的运行时错误,通常由于内存管理问题导致。本篇文章将详细探讨StackOverflowError...
播放 json 扩展 play-json实用程序扩展库 特征 轻松转换密钥 import play . api . libs . json . ext . _ ... val madoka = JsObject ( Seq ( " firstName " - > JsString ( " Madoka " ), " lastName " - > Js...
StackOverflow作为全球最大的程序员社区之一,其创始人Jeff Atwood的推荐图书具有重要的参考价值。本文将深入解析这些书籍的关键知识点,帮助读者更好地理解每本书的价值所在。 #### 二、《代码大全2》 - **作者**...
stackoverflow java mobi 电子书 ebook java学习好资料