一个豆瓣API的使用——拒绝思维定式

好久没写博客了,最近一直在用豆瓣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
时间: 2024-10-23 17:58:21

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

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

CloudReader 一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material Desgin阅读类的开源项目.项目采取的是Retrofit + RxJava + MVVM-DataBinding架构开发.开发中所遇到的各种问题已归纳在这里. github地址:CloudReader What can be learned about this project 那么,从本项目中你能学到哪些知识呢? 1.干货集中营内容与豆瓣电影书籍内容. 2.高仿网易云音乐歌单

一个Restful Api的访问控制方法

最近在做的两个项目,都需要使用Restful Api,接口的安全性和访问控制便成为一个问题,看了一下别家的API访问控制办法. 新浪的API访问控制使用的是AccessToken,有两种方式来使用该AccessToken: 1.API请求 URL 的后面加上一个AccessToken 2.Http头里面加一个字段AccessToken=xxx 这种AccessToken是写死在程序里面的,在每次请求的时候附带上,对于这种AccessToekn新浪那边有过期时间,过期之后就无法再使用了. 很明显这

C# 网络编程之通过豆瓣API获取书籍信息(一)

这篇文章主要是讲述如何通过豆瓣API获取书籍的信息,起初看到这个内容我最初的想法是在"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源码,再通过正则表达式分析获取结点标签得到信息.但后来发现可以通过豆瓣API提供的编程接口实现. 该文章仅是基础性C#网络编程文章,尝试测试了下豆瓣API,并没什么高深的内容.但希望对大家有所帮助,仅供学习. (警告:文章仅供参考,提供一种想法,否则访问多次-10次被403 forbidden莫怪.建议认证使用豆瓣API) 一

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

1.搭建项目框架 npm初始化项目 npm init -y //按默认配置初始化项目 安装需要的第三方库 npm install bootstrap angular angular-route --save 新建一个index.html页面 引用 这三个依赖库 新建两个文件夹coming_soon in_theaters 然后在这两个文件夹里分别创建一个controller.js 文件和view.html文件 最后项目文件的结构是这样 2.搭建首页样式 采用bootstrap http://v3

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

1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie 然后一路回车 接着 进入项目目录 cd vue-movie 然后安装项目依赖包 cnpm install 没安装cnpm的先执行这个命令 npm install -g cnpm --registry=https://registry.npm.taobao.org 接着 npm run dev 看到

爱搜索,爱生活,基于豆瓣API & Angular开发的web App(by vczero)

一.扯淡的说 name:[豆瓣搜索] 最近关注了下豆瓣的API,发现豆瓣开放平台需要加强API文档撰写啊....但是有个可喜的发现豆瓣V2接口提供了搜索接口.最近在用phantom弄些爬虫,想想,真是美丽极了!有个豆瓣的接口,我都不用去爬数据,不用数据存储,丢给github page直接完事.豆瓣,Nice!最近也在看angular,于是就萌生了使用Angular + 豆瓣API 做一个web app.于是...网上回家就折腾了. 体验地址:http://vczero.github.io/t/h

豆瓣API接口开发,结合angularJS来做,感觉爽歪歪!

第一次做还是先说下API 是什么鬼? API : application program interface 应用程序编程接口: 有那些常见的API: webAPI : 通过WEB方式提供结构叫 WEBAOPI ; API : 所有有输入有输出的东西都可以称之为API  --- 都是函数: 例如:Math.random()  --- api 例如: 豆瓣API 开发平台: https://developers.douban.com/wiki/?title=guide 豆瓣API V2 (测试版)

基于豆瓣API的APP

团队模式 我们团队选择的模式是功能团队模式,具备不同能力的同学们平等协作,共同完成一个功能.在这个功能完成之后,这些人又重新组织,和别的角色一起去完成下一个功能.他们之间没有管理和被管理的关系,小组内的交流也比较频繁. 团队人员:RXXTN.非职业天使.略略li.轻咏上邪.guantongxue 团队题目 ↑这是头号玩家电影里的一幕↑,在绿洲游戏创始人哈利迪的个人档案馆中,哈利迪按照时间记录了自己生平看过的所有电影.受到这一幕的启发,我们团队决定开发一款APP,但不仅仅是记录自己在何时看过什么,

小程序请求豆瓣API报403解决方法

微信小程序使用wx.request API请求豆瓣公开api的时候,会报一个403(Forbidden)的错误.这是为什么呢?是由于来自小程序的调用过多,豆瓣来自于小程序的调用被禁止.这里收集以下三种方法解决此问题(设置代理): 1.使用 https://douban.uieee.com 2.使用 https://www.zhihu.com/question/265806694/answer/302894881 以上两种方法均是设置代理请求豆瓣API数据. 使用方法:把 https://www.