#!/usr/bin/env python #coding=utf-8 import sys try: import web except Exception: print 'please install webpy first' sys.exit(0) try: from douban.service import DoubanService from douban.client import OAuthClient except ImportError: print 'please install douban-python' sys.exit(0) HOST = 'http://www.douban.com' PREFIX = '/service/apidemo' API_KEY='' SECRET='' request_tokens = {} access_tokens = {} def html_header(): print """ API认证演示

API认证演示

""" def html_footer(): print """
""" def search_panel(q = "monty python"): print """

搜索电影并添加收藏...

""" % (PREFIX, q) class index(object): def GET(self): html_header() search_panel() html_footer() class search(object): def GET(self): q = web.input().get('q','') html_header() search_panel(q) if q: service = DoubanService(api_key=API_KEY,secret=SECRET) feed = service.SearchMovie(q) print '
' for movie in feed.entry: print '
' print '' % (PREFIX, movie.id.text) print '' % (movie.GetAlternateLink().href, movie.title.text, ((len(movie.link) >= 3) and movie.link[2].href) or '') print '
' print '%s' % (movie.GetAlternateLink().href, movie.title.text) print '
' print '
' print '
' html_footer() class collection(object): def GET(self): sid = web.input().get('sid','') if not sid: print 'no sid' return client = OAuthClient(key=API_KEY, secret=SECRET) cookies = web.cookies() access_key = cookies.get('access_key') access_secret = access_tokens.get(access_key) if not access_key or not access_secret: request_key = web.input().get('oauth_token','') request_secret = request_tokens.get(request_key) if request_key and request_secret: try: access_key, access_secret = \ client.get_access_token(request_key, request_secret) if access_key and access_secret: # store user access key in cookie, # not accessable by other people web.setcookie('access_key', access_key) access_tokens[access_key] = access_secret except Exception: access_token = None print '获取用户授权失败' return else: client = OAuthClient(key=API_KEY, secret=SECRET) key, secret = client.get_request_token() if key and secret: request_tokens[key] = secret url = client.get_authorization_url(key, secret, callback=HOST+PREFIX+'/collection?sid='+sid) web.tempredirect(url) return else: print '获取 Request Token 失败' return service = DoubanService(api_key=API_KEY, secret=SECRET) movie = service.GetMovie(sid) html_header() search_panel() print '

你希望收藏电影: %s

' % (movie.title.text) print '
' print '
' print '' % (movie.GetAlternateLink().href, movie.title.text, movie.link[2].href) print '
' print '%s' % (movie.GetAlternateLink().href, movie.title.text) print '
' print '
' if access_key and access_secret: if service.ProgrammaticLogin(access_key, access_secret): try: entry = service.AddCollection('wish', movie, tag=['test']) if entry: print '已添加到你的收藏' else: print '添加收藏失败' except Exception: print '添加收藏失败, 授权失效' del access_tokens[access_key] web.setcookie('access_key', '', 0) else: print '无法添加收藏,可能你因为你没有授权这个应用访问你在豆瓣的数据' print '
' html_footer() urls = ( PREFIX+'/', 'index', PREFIX+'/search', 'search', PREFIX+'/collection', 'collection', ) if __name__ == '__main__': web.run(urls, globals())