`
jianpx
  • 浏览: 171180 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

直接读取stackoverflow api 的返回值作为json串

阅读更多

今天遇到一个问题就是用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)

 

 

1
1
分享到:
评论

相关推荐

    Flask 让jsonify返回的json串支持中文显示的方法

    虽然不影响接口的读取,但是可读性太差,于是研究了一下怎么直接显示成中文。最后找到了解决方案如下,在配置中加入下面一行代码就OK了。 app.config['JSON_AS_ASCII'] = False json.dumps()解决同样的问题可以加入...

    FlutterStackOverflowApp后端接口使用stackoverflow问题API

    在开发Flutter应用时,我们经常会遇到需要从外部数据源获取数据的情况,比如集成StackOverflow的问题API来构建一个问答应用。本项目"FlutterStackOverflowApp"就是这样一个实例,它利用StackOverflow API来展示问题...

    如何解决java.lang.StackOverflowError

    在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...

    jquery-stackoverflow-api:StackOverflow API

    StackOverflow API 该应用程序使用户可以提交他们感兴趣的主题,然后显示这些查询的结果。 该页面的第二个功能使用户能够搜索特定主题的顶级StackOverflow答题器。 此应用是使用HTML5,CSS#和jQuery构建的。 该...

    stackoverflow-bot:stackoverflow 推特机器人

    6. **JSON 处理**:StackOverflow API 返回的数据通常是 JSON 格式,因此我们需要解析和生成 JSON。Scala 有许多库(如 Play JSON 或 Circe)可以方便地进行 JSON 操作。 7. **类型系统**:Scala 的类型系统强大且...

    StackOverFlowApi:使用Stack OverFlow Api

    StackOverFlowApi :smiling_face_with_heart-eyes:屏幕截图参考: :dizzy: 程式语言: Kotlin :fire:架构和模式: ...其余的Api: 基本网址: :backhand_index_pointing_right: 中篇 :backhand_index_pointing_right:

    how2 通过 terminal 使用 stackoverflow 的一个工具.zip

    3. **高效**:通过StackOverflow的API直接获取信息,减少中间环节。 4. **可扩展**:作为开源项目,可以自定义搜索策略,或者添加其他编程语言的支持。 **注意事项** 1. 由于StackOverflow API有请求限制,频繁使用...

    meteor-stackoverflow:Stackoverflow API 的 Oauth2 包装器,它是 account-stackoverflow 的中心点

    在这个场景下,`meteor-stackoverflow` 是一个专门针对 Meteor 框架的包,它提供了对 Stack Overflow API 的 OAuth2 认证支持,使得在 Meteor 应用中集成 Stack Overflow 功能变得更加便捷。 OAuth2 是一种授权框架...

    Go-在你的终端访问StackOverflow

    4. **JSON解析**:StackOverflow的API通常返回JSON格式的数据,因此需要了解`encoding/json`包,学习如何解码JSON数据到Go结构体。 5. **命令行接口**:使用`os`、`flag`和`fmt`包创建命令行接口,接收用户输入,...

    Newtonsoft.Json.rar

    Newtonsoft.Json库提供了一种高效且强大的方式将.NET对象转换为JSON字符串(序列化),以及将JSON字符串还原为.NET对象(反序列化)。这在跨平台数据传输、存储和API交互中极为常见。 2. **支持的 .NET 版本** - *...

    Teaching-API-Clinic:StackOverflow API 上的诊所

    API 诊所粗略笔记 什么是 API? 应用程序接口 它是一组规则、代码、规范,软件程序用来相互通信 它是不同软件程序之间的接口,以便它们可以相互通信 您一直在这里使用您在前期工作中开始并现在使用的 API Ruby API...

    stackoverflow_API_scrap:使用其API的stackoverflow信息和Web抓取来创建Sqlite DB

    在本项目"stackoverflow_API_scrap"中,我们将探讨如何利用Stack Overflow的API和Web抓取技术来构建一个SQLite数据库。Stack Overflow API是一个公开接口,允许开发者获取网站上的问题、答案、用户信息等数据。结合...

    stackApi:StackOverflow API测试silexangularmaterial

    Silex骷髅 欢迎使用Silex Skeleton-一种功能齐全的Silex应用程序,您可以将其用作新应用程序的框架。 本文档包含有关如何开始使用Silex Skeleton的信息。 创建Silex应用程序 Silex使用简化了新项目的创建: ...

    Stackoverflow架构设计和开发内幕

    在深入探讨Stackoverflow的架构设计和开发内幕之前,有必要先对Stackoverflow本身有一个基本了解。Stackoverflow是一个面向编程专业人士的问答网站,其特点在于用户可以问问题、回答问题并参与社区讨论。由于其高效...

    Stack-Overflow-API

    此外,可能还涉及到了**JSON(JavaScript Object Notation)**,因为Stack Overflow API返回的数据格式通常是JSON。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。开发者需要解析...

    stackoverflow fixed 2021-04-08 by storm.zip

    1. **StackOverflow 插件**:这是一个专为 IntelliJ IDEA 设计的插件,旨在方便开发者在 IDE 内部直接访问 StackOverflow 网站,以寻求编程问题的答案和解决方案,提高开发效率。 2. **停止更新**:原始插件的...

    系统稳定性——StackOverFlowError常见原因及解决方法1

    【系统稳定性——StackOverFlowError常见原因及解决方法】 在Java编程中,系统稳定性是至关重要的,而StackOverflowError是一个常见的运行时错误,通常由于内存管理问题导致。本篇文章将详细探讨StackOverflowError...

    play-json-ext:简单的json转换功能

    播放 json 扩展 play-json实用程序扩展库 特征 轻松转换密钥 import play . api . libs . json . ext . _ ... val madoka = JsObject ( Seq ( " firstName " - > JsString ( " Madoka " ), " lastName " - > Js...

    StackOverflow 创始人推荐图书

    StackOverflow作为全球最大的程序员社区之一,其创始人Jeff Atwood的推荐图书具有重要的参考价值。本文将深入解析这些书籍的关键知识点,帮助读者更好地理解每本书的价值所在。 #### 二、《代码大全2》 - **作者**...

    stackoverflow java问答电子书

    stackoverflow java mobi 电子书 ebook java学习好资料

Global site tag (gtag.js) - Google Analytics