好久没写博客了,最近一直在用豆瓣API爬数据,不知道以前的是什么样,毕竟刚开始用没多久,就用最新的V2版本,以前的不更新了,可以参照https://developers.douban.com/wiki/?title=api_v2,但是在用某些API的时候会出一些问题,需要自己琢磨琢磨,因为网上关于API爬数据的资料并不多,今天就聊一些豆瓣同城V2的一个接口的调用——获取活动列表。

根据豆瓣同城V2提供的接口,获取活动列表:GET https://api.douban.com/v2/event/list,返回值是eventlist,其格式可以自己查询,我们试一下:

try:
html = urllib2.urlopen(r'https://api.douban.com/v2/event/list')
except Exception as ex:
print ex
hjson = json.loads(html.read())
eventlist(hjson)

这是主要代码,eventlist是定义的一个函数,输出活动列表,运行一下,出错,400bad request,还是不知道什么原因,从网页上跳一下https://api.douban.com/v2/event/list,得到一个文件,用浏览器打开,显示信息为

{"msg":"invalid_parameter","code":1016,"request":"GET \/v2\/event\/list"}

,参数错误,我的天哪,什么鬼,不是按照API说的做了吗,怎么出错了?难道获取列表的不能用?试一下获取城市列表:

try:
html = urllib2.urlopen(r'https://api.douban.com/v2/loc/list')
except Exception as ex:
print ex hjson = json.loads(html.read())
city_print(hjson)

city_print为定义的输出城市列表的函数,运行一下,完美输出,兄弟,蒙了吧。到底什么原因呢,百度一下,毫无进展,要不Google一下(呵呵),还得靠自己。从源头找找思路,打开豆瓣,进去同城子模块,发现左上角显示你的所在地,脑子闪过一个念头:会不会是获取的时候要指定地名?马上试试,但是怎么指定地名呢,想想前几天爬豆瓣电影top250的时候有个start参数,这样是不是也管用,管用的话用哪个词呢。在看获取城市列表的接口,是loc/list,那指定地名也用这个试试,说干就干:

try:
html = urllib2.urlopen(r'https://api.douban.com/v2/event/list?loc=qingdao') except Exception as ex:
print ex
hjson = json.loads(html.read())
eventlist(hjson)

因为我在青岛,就把地名指定为青岛,运行一下,简单看一些数据:

-----------------------
owner_name: 良友书坊文化机构
owner_uid: liangyoubooks
owner_id: 121533
id: 26343442
begin_time: 2016-03-06 10:00:00
end_time: 2016-05-04 22:00:00
address: 青岛 市南区 香港中路沿线 澳门路117号海信广场B1层 良友书坊•有度空间
----------------------
owner_name: 我爱户外
owner_uid: 128609
owner_id: 128609
id: 26248720
begin_time: 2016-02-21 08:30:00
end_time: 2016-05-15 16:00:00
address: 青岛 崂山区 沙子口广场
----------------------
owner_name: 摄影师贾葭
owner_uid: LifephotoJia
owner_id: 103740178
id: 25637123
begin_time: 2016-04-17 08:00:00
end_time: 2016-07-15 17:00:00
address: 青岛 市南区 湛山/太平角 适合拍摄的任意地点
----------------------

完美!遇到问题自己解决的感觉就一个字——爽!完整代码也贴出来吧,写的有点拙劣,大神勿看。

#---coding:utf-8---
"""
Date: 2016-4-17
Language: Python2.7.6
by seven_clear
""" import json
import urllib2
import string def eventlist(json):
'输出活动列表'
print 'count:',json['count']
print 'total:',json['total']
print '-----------------------'
for event in json['events']:
print 'owner_name:',event['owner']['name']
print 'owner_uid:',event['owner']['uid']
print 'owner_id:',event['owner']['id']
print 'id:',event['id']
#print 'content:',event['content']
print 'begin_time:',event['begin_time']
print 'end_time:',event['end_time']
print 'address:',event['address']
print '----------------------' def city_print(json):
'输出城市列表'
print 'count:',json['count']
print 'total:',json['total']
print '----------------------------'
for city in json['locs']:
print 'parent:',city['parent']
print 'id:',city['id']
print 'name:',city['name']
print 'uid:',city['uid']
print '----------------------------' try:
html = urllib2.urlopen(r'https://api.douban.com/v2/event/list?loc=qingdao')
#https://api.douban.com/v2/loc/list') except Exception as ex:
print ex
#print html.read() hjson = json.loads(html.read())
eventlist(hjson)
#city_print(hjson) for key in hjson:#测试json格式
print key

一个豆瓣API的使用——拒绝思维定式的更多相关文章

  1. 一个豆瓣 API 的反向代理配置,旨在解决豆瓣屏蔽小程序请求问题(豆瓣接口 403 问题)

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  2. 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目

    CloudReader 一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material Desgin阅读类的开源项目.项目采取的是Retrofit + RxJava + ...

  3. 瓣呀,一个基于豆瓣api仿网易云音乐的开源项目

    整体采用material design 风格,本人是网易云音乐的粉丝,所以界面模仿了网页云音乐,另外,项目中尽量使用了5.0之后的新控件. 项目整体采用mvp+rxjava+retrofit 框架,使 ...

  4. 使用OAuth2.0访问豆瓣API

    如何计算某个用户的access_token过期时间?开发者可以通过两种方式计算:用户授权时,oauth2/access_token接口返回的expires_in值就是access_token的生命周期 ...

  5. 小试牛刀--利用豆瓣API爬取豆瓣电影top250

    最近得赶进度爬点东西,对于豆瓣,它为开发者提供了API,目前是v2版本,目前key不对个人开放,但是可以正常通过其提供的API获取数据.豆瓣V2版API权限分3类:公开.高级.商务,我们用开放基本数据 ...

  6. 【jquery mobile笔记二】jquery mobile调用豆瓣api示例

    页面主要代码如下 <div data-role="page" id="page1">     <div data-role="hea ...

  7. 豆瓣api之OAuth认证

    豆瓣api通过OAuth允许第三方应用访问用户数据,所以OAuth认证就是我们整个project的基础了. OAuth认证听起来挺神秘,其实挺简单的. 现在的大型网站的开放平台的认证几乎都是采用OAu ...

  8. 基于vue2.0的一个豆瓣电影App

    1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie ...

  9. 基于Bootstrap+angular的一个豆瓣电影app

    1.搭建项目框架 npm初始化项目 npm init -y //按默认配置初始化项目 安装需要的第三方库 npm install bootstrap angular angular-route --s ...

随机推荐

  1. PDF的信息表达原理及特点分析

    一.PDF概述 PDF(Portable Document Format)是一种结构化的文档格式.它由美国著名排版与图像处理软件Adobe公司于1993年首次发布(1.0版),并于同年推出了其相应的支 ...

  2. 开启macbook win7触控屏右键

    开启macbook win7触控屏右键,如下图

  3. php多条件搜索

    PHP多条件查询 December : Tuesdayby 小屋 在我们的网站设计过程中,经常会用到多条件查询,本文的源码是一个二手房屋查询的例子.在本例中,我们要实现能够通过地理位置,物业类型,房屋 ...

  4. 数据库一些常用的SQL语句

    1.多表连接查询: 假设现在有三个表,One,Two,Three: One表字段:Code(主键),Name Two表字段:Birthday,T_code(One表Code的外键) Three表字段: ...

  5. VS 2008 快捷键

    注释代码:<Ctrl+K,C>取消注释:<Ctrl+K,U> 封装字段(生成get.set方法): <Ctrl+R,E> 定位大括号范围:光标放在其中一个括号的位置 ...

  6. Wordpress上传到阿里云服务器

    Wordpress上传到阿里云服务器 登录服务器 https://account.aliyun.com/login/login.htm 绑定域名 获取FTP信息.数据库信息 在本地修改wordpres ...

  7. 在JSP中使用JavaBean

    //创建一个PersonBean类 public class PersonBean {    private String name;    private int age;    public Pe ...

  8. miniui中常用的状态显示方式

    1.查询sys_code表得到对应的状态 考生状态:<input class="mini-combobox" style="" textField=&qu ...

  9. gcd 最小公约数

    int gcd(int a, int b) { ? a : gcd(b, a % b); }

  10. 利用Jurassic在.net下运行js函数

    static void Main(string[] args) { var eng = new Jurassic.ScriptEngine(); eng.Evaluate("function ...