#!/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())