Created
April 9, 2013 09:52
-
-
Save liwh/5344506 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
from util import api, settings | |
from v3._base import CachedPlusHandler, BaseHandler, UserClient | |
import json | |
import logging | |
import urllib2 | |
from service import service_ugc, service_user, service_connection | |
from service.connection import ttypes | |
import re | |
class Activity(object): | |
u"""活动""" | |
def __init__(self, data): | |
self.actid = data.get('act_id','') | |
self.name = data.get('act_title', '') | |
self.img = data.get('act_img', '') | |
self.content = data.get('act_desc', '') | |
self.url = data.get('act_url', '') | |
class PaikeAdvertise(object): | |
u"""广告""" | |
def __init__(self, data): | |
# data = [ | |
# { | |
# "adv_img": "http://res.mfs.ykimg.com/051000004F47439C675851163E079F82.jpg", | |
# "adv_title": "test", | |
# "adv_type": 505, | |
# "adv_details": "asdf", | |
# "created_at": "2012-02-24T06:40:46+08:00" | |
# } | |
# ] | |
if data: | |
i = len(data) -1 | |
advs = data[i] | |
advs_type = advs.get('adv_type', 0) | |
if advs_type == 505: | |
self.type = 2 #1为广告页面,2为广告用户 | |
self.uid = advs.get('adv_details', '') | |
else: | |
self.type = 1 | |
self.url = advs.get('adv_details', '') | |
self.img = advs.get('adv_img', '') | |
else: | |
self.type = '' | |
self.url = '' | |
self.img = '' | |
class LatestVideos(CachedPlusHandler): | |
u"""拍客客户端最新视频列表""" | |
def get_cache_key(self): | |
data = { | |
'pg': self.pg, | |
'pz': self.pz, | |
} | |
return data | |
def get_cache_expire(self): | |
u"""缓存时间为10分钟""" | |
return settings.cache_expire_M | |
def prepare(self): | |
self.pg = int(self.get_argument('pg', 1)) | |
self.pz = int(self.get_argument('pz', 30)) | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/latest/videos?pid={1}&pg={2}&pz={3}' | |
url = url.format(api.internal_server(), settings.internal_pid, self.pg, self.pz) | |
logging.debug(url) | |
results = get_paike_videos(url, self.pg, self.pz, self.is_update_cache) | |
self.write(results) | |
def finish(self, chunk=None): | |
judge_version = service_ugc.compare_version(self.user_client.prod_ver, '1.5') | |
if self.get_status() in (200, 304) and judge_version: | |
_info = self._result_buffer[-1] | |
_results = _info.get('results', {}) | |
service_ugc.append_video_info(_results, self.user_id) | |
BaseHandler.finish(self, chunk) | |
class HottestVideos(CachedPlusHandler): | |
u"""拍客客户端最热视频列表""" | |
def get_cache_key(self): | |
data = { | |
'pg': self.pg, | |
'pz': self.pz, | |
} | |
return data | |
def get_cache_expire(self): | |
u"""缓存时间为10分钟""" | |
return settings.cache_expire_M | |
def prepare(self): | |
self.pg = int(self.get_argument('pg', 1)) | |
self.pz = int(self.get_argument('pz', 30)) | |
self.uid = self.user_id | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/hottest/videos?pid={1}&pg={2}&pz={3}' | |
url = url.format(api.internal_server(), settings.internal_pid, self.pg, self.pz) | |
logging.debug(url) | |
results = get_paike_videos(url, self.pg, self.pz, self.is_update_cache) | |
self.write(results) | |
def finish(self, chunk=None): | |
judge_version = service_ugc.compare_version(self.user_client.prod_ver, '1.5') | |
if self.get_status() in (200, 304) and judge_version: | |
_info = self._result_buffer[-1] | |
_results = _info.get('results', {}) | |
service_ugc.append_video_info(_results, self.user_id) | |
BaseHandler.finish(self, chunk) | |
class VideoCats(CachedPlusHandler): | |
u"""拍客客户端视频的类别""" | |
def get_cache_key(self): | |
return '' | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/catlist?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
cats = [{'catsid': c.get('sort_id', ''), 'value': c.get('title', '')} for c in content] | |
result = {'status': 'success', 'total': len(cats), 'results': cats} | |
self.write(result) | |
class VideoCatsPaike1_4(CachedPlusHandler): | |
u"""拍客客户端视频的类别""" | |
def get_cache_key(self): | |
return '' | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/catlist?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
cats = [] | |
cats.append({'catsid': 8888, 'value': u'最热'}) | |
for c in content: | |
cats.append({'catsid': c.get('sort_id', ''), 'value': c.get('title', '')}) | |
result = {'status': 'success', 'total': len(cats), 'results': cats} | |
self.write(result) | |
class VideoSingleCat(CachedPlusHandler): | |
u"""拍客客户端分类视频列表""" | |
def get_cache_key(self): | |
data = { | |
'pg': self.pg, | |
'pz': self.pz, | |
} | |
return data | |
def get_cache_expire(self): | |
u"""缓存时间为10分钟""" | |
return settings.cache_expire_M | |
def prepare(self): | |
self.pg = int(self.get_argument('pg', 1)) | |
self.pz = int(self.get_argument('pz', 30)) | |
def get(self, catsid=None): | |
if not catsid: | |
self.send_error(-200, desc='invalid catsid') | |
if catsid == '8888': | |
url = 'http://{0}/internal/cms/paike/hottest/videos?pid={1}&pg={2}&pz={3}' | |
url = url.format(api.internal_server(), settings.internal_pid, self.pg, self.pz) | |
elif catsid == '9999': | |
url = 'http://{0}/internal/cms/paike/latest/videos?pid={1}&pg={2}&pz={3}' | |
url = url.format(api.internal_server(), settings.internal_pid, self.pg, self.pz) | |
else: | |
url = 'http://{0}/internal/cms/paike/cats/videos?pid={1}&pg={2}&pz={3}&sortid={4}' | |
url = url.format(api.internal_server(), settings.internal_pid, self.pg, self.pz, catsid) | |
logging.debug(url) | |
results = get_paike_videos(url, self.pg, self.pz, self.is_update_cache) | |
self.write(results) | |
def finish(self, chunk=None): | |
judge_version = service_ugc.compare_version(self.user_client.prod_ver, '1.5') | |
if self.get_status() in (200, 304) and judge_version: | |
_info = self._result_buffer[-1] | |
_results = _info.get('results', {}) | |
service_ugc.append_video_info(_results, self.user_id, True) | |
BaseHandler.finish(self, chunk) | |
class Advertise(CachedPlusHandler): | |
u"""拍客客户端广告接口""" | |
def get_cache_key(self): | |
return '' | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/advs?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
if content: | |
advertise = PaikeAdvertise(content) | |
if advertise.img: | |
results = {'status': 'success', 'results': advertise} | |
self.write(results) | |
else: | |
self.send_error(code=400, desc='failed') | |
else: | |
return self.send_error(code=400, desc='failed') | |
class AdvertiseList(CachedPlusHandler): | |
u"""多条广告接口""" | |
def get_cache_key(self): | |
return '' | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/advs?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url, timeout=3).read() | |
content = json.loads(content) | |
if content: | |
advs_list = [] | |
for c in content: | |
advs = {} | |
if c.get('adv_type', 0) == 505: | |
advs['type'] = 2 | |
advs['uid'] = c.get('adv_details', '') | |
else: | |
advs['type'] = 1 | |
advs['url'] = c.get('adv_details', '') | |
advs['img'] = c.get('adv_img', '') | |
if c.get('open_type', 0) != 1: | |
advs_list.append(advs) | |
results = {'status': 'success', 'total': len(advs_list),'results': advs_list} | |
self.write(results) | |
else: | |
return self.send_error(code=400, desc='failed') | |
class ActivityList(CachedPlusHandler): | |
u"""活动列表""" | |
def get_cache_key(self): | |
data = { | |
'pg': self.pg, | |
'pz': self.pz, | |
} | |
return data | |
def prepare(self): | |
self.pg = int(self.get_argument('pg', 1)) | |
self.pz = int(self.get_argument('pz', 30)) | |
def get(self): | |
pg = int(self.get_argument('pg', 1)) | |
pz = int(self.get_argument('pz', 30)) | |
url = 'http://{0}/internal/cms/paike/actlist?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
total = content.get('total', 0) | |
content = [Activity(c) for c in content.get('results', []) if c] | |
results = {'status': 'success', 'total': total, 'pg': pg, 'pz': pz, 'results': content} | |
self.write(results) | |
class ActivityVideos(CachedPlusHandler): | |
u"""活动对应的视频""" | |
def get_cache_key(self): | |
data = { | |
'pg': self.pg, | |
'pz': self.pz, | |
'actid': self.actid, | |
} | |
return data | |
def get_cache_expire(self): | |
u"""缓存时间为10分钟""" | |
return settings.cache_expire_M*2 | |
def prepare(self): | |
self.pg = int(self.get_argument('pg', 1)) | |
self.pz = int(self.get_argument('pz', 30)) | |
self.actid = self.get_argument('actid', '') | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/activity/videos?actid={1}&pid={2}&pg={3}&pz={4}' | |
url = url.format(api.internal_server(), self.actid, settings.internal_pid, self.pg, self.pz) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
total = content.get('total', 0) | |
videos = content.get('results', []) | |
vid_title = {} | |
vids = [] | |
for v in videos: | |
videoid = v.get('encodedId', '') | |
vid_title[videoid] = v.get('title', '') | |
vids.append(videoid) | |
#去掉空数据 | |
video_list = service_ugc.remove_invalid_video(vids) | |
# 添加头像 | |
uids = [u.get('userid', '') for u in video_list] | |
user_info_map = service_user.user_info_list(uids) | |
for u in video_list: | |
u['avatar'] = user_info_map.get(u.get('userid', ''), {}).get('avatar', '') | |
u['title'] = vid_title.get(u.get('videoid', '')) | |
results = {'status': 'success', 'total': total, 'pg': self.pg, 'pz': self.pz, 'results': video_list} | |
self.write(results) | |
def finish(self, chunk=None): | |
judge_version = service_ugc.compare_version(self.user_client.prod_ver, '1.5') | |
if self.get_status() in (200, 304) and judge_version: | |
_info = self._result_buffer[-1] | |
_results = _info.get('results', {}) | |
service_ugc.append_video_info(_results, self.user_id) | |
BaseHandler.finish(self, chunk) | |
class VideoTags(CachedPlusHandler): | |
def get_chache_key(self): | |
return '' | |
def get_cache_expire(self): | |
u"""缓存时间为10分钟""" | |
return settings.cache_expire_M | |
def get(self): | |
url = 'http://{0}/internal/cms/paike/tags?pid={1}'.format(api.internal_server(), settings.internal_pid) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
if content: | |
content = json.loads(content).get('results', []) | |
tags = [{'name': x.get('name', ''), 'value': x.get('title', '')}for x in content] | |
result = {'status': 'success', 'total': len(content), 'results': tags} | |
else: | |
result = {'status': 'success', 'total': 0, 'results': []} | |
self.write(result) | |
class PaikeVideoInfo(CachedPlusHandler): | |
u"""拍客微信web页视频详情""" | |
def get_cache_key(self): | |
return '' | |
def get(self, vid=None): | |
if not vid: | |
self.send_error(400, desc='no videoid') | |
video_info = service_ugc.video_info2(vid, timeout=0, no_cache=True, with_avatar=True, with_imgs=True) | |
for img in video_info.get('imgs', []): | |
img['url'] = api.convert_img_url(img.get('url', '')) | |
results = {'status': 'success', 'results': video_info} | |
self.write(results) | |
class GetPartnerFriends(BaseHandler): | |
u"""获取第三方好友列表""" | |
def get(self): | |
if not self.user_id: | |
self.send_error(401, desc='not login') | |
cursor = str(self.get_argument('cursor', 0)) | |
pg = str(self.get_argument('pg', 1)) | |
pz = str(self.get_argument('pz', 30)) | |
token = self.get_argument('token', '') | |
secret = self.get_argument('secret', '') | |
btype = int(self.get_argument('type', 1)) | |
user_info = service_connection.Connection.query(self.user_id) | |
for u in user_info: | |
if u.btype == btype : | |
token, secret = u.btoken.split(',', 1) | |
sid = u.buid | |
#取不到token用默认的token进行查询 | |
#if not token or not secret : | |
# token, secret = '45fc8bdc6639ed330b2f2e441bba66c4', 'd0aacc9af15e643b1a16915b3d04be62' | |
# sid = self.get_argument('partnerid', '') | |
if btype == service_connection.SINA_WEIBO_BTYPE: | |
partner_user_info = service_connection.sina_friends(btype, token, secret, sid, cursor, pz) | |
appid = service_connection.SINA_WEIBO_BPID | |
elif btype == service_connection.QQ_WEIBO_BTYPE: | |
appid = service_connection.QQ_WEIBO_BPID | |
partner_user_info = service_connection.qq_friends(btype, token, secret, pg, pz) | |
else: | |
self.send_error(400, code=0, desc='invalid type') | |
partner_user_map = {} | |
user_results = [] | |
sid_list = [] | |
if partner_user_info and btype == service_connection.SINA_WEIBO_BTYPE: | |
next_cursor = partner_user_info[0].next_cursor | |
pre_cursor = partner_user_info[0].pre_cursor | |
logging.debug(len(partner_user_info)) | |
elif partner_user_info and btype == service_connection.QQ_WEIBO_BTYPE: | |
hasnext = partner_user_info[0].hasnext | |
else: | |
self.send_error(400, code=0, desc='no partner friends') | |
for su in partner_user_info: | |
sid_list.append(su.sid) | |
partner_user = {} | |
partner_user['sid'] = su.sid | |
partner_user['sname'] = su.sname | |
partner_user['savatar'] = su.savatar | |
if btype == service_connection.SINA_WEIBO_BTYPE: | |
partner_user['sgender'] = self.convert_gender(su.sgender) | |
else: | |
partner_user['sgender'] = int(su.sgender) | |
user_results.append(partner_user) | |
partner_user_map[su.sid] = partner_user | |
ids = ','.join(sid_list) | |
if btype == service_connection.SINA_WEIBO_BTYPE: | |
appid = service_connection.SINA_WEIBO_BPID | |
elif btype == service_connection.QQ_WEIBO_BTYPE: | |
appid = service_connection.QQ_WEIBO_BPID | |
else: | |
self.send_error(400, code=0, desc='invalid type') | |
url = 'http://{0}/oauth2/uids_of_partners?appid={1}&tuids={2}'.format(api.passport2_server(), appid, ids) | |
logging.debug(url) | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
user_list = content.get('data', []) | |
if not user_list: | |
user_list = [] | |
user_partner_map = {} | |
uids = [] | |
for u in user_list: | |
if u.get('isrealuser', ''): | |
one_uid = api.encodeuid(u.get('uid', '')) | |
one_sid = u.get('tuid', '') | |
uids.append(one_uid) | |
user_partner_map[one_sid] = one_uid | |
user_info_map = service_user.user_info_list(uids) | |
user_relationship = service_user.relationship(self.user_id, uids) | |
for u in user_results: | |
sid = u.get('sid', '') | |
userid = user_partner_map.get(sid, '') | |
if userid: | |
u['stype'] = 1 | |
u['userid'] = userid | |
u.update(user_info_map.get(userid, {})) | |
if user_relationship: | |
u['is_friend'], u['is_follower'] = user_relationship.get(userid) | |
else: | |
u['stype'] = 2 | |
if btype == service_connection.SINA_WEIBO_BTYPE: | |
results = {'status': 'success','pre_cursor': pre_cursor, 'next_cursor': next_cursor, 'results': user_results} | |
if btype == service_connection.QQ_WEIBO_BTYPE: | |
results = {'status': 'success','pg': pg, 'pz': pz, 'hasnext': hasnext, 'results': user_results} | |
self.write(results) | |
def convert_gender(self, sgender): | |
dic_gender = { | |
'f' : 1, | |
'm' : 2 , | |
} | |
return dic_gender.get(sgender, 0) | |
class InvitePartnerFriends(BaseHandler): | |
u"""发表一条邀请好友的微博""" | |
def post(self): | |
username = self.get_argument('username', '') | |
sname = self.get_argument('sname', '') | |
stype = int(self.get_argument('type', 1)) | |
uid = self.user_id | |
if not uid: | |
self.send_error(401, desc='not login') | |
if not username or not sname: | |
self.send_error(0, desc='miss argument') | |
content = u'@{0} 我正在使用优酷拍客上传分享视频,你也下载玩玩吧!下完后关注我的昵称:{1} 下载地址:http://mobile.youku.com/' | |
content = content.format(sname, username) | |
user_info = service_connection.Connection.query(self.user_id) | |
b_info = None | |
for u in user_info: | |
if u.btype == stype: | |
b_info = u | |
if b_info: | |
if b_info.btype == service_connection.QQ_WEIBO_BTYPE: | |
content = { | |
'content': content, | |
} | |
content = json.dumps(content) | |
result = service_connection.post_status(b_info, content) | |
if result: | |
self.write({'status': 'success', 'code': 1, 'desc': 'success'}) | |
else: | |
self.send_error(400, code=0, desc='send status failed') | |
else: | |
self.send_error(400, code=0, desc='get token failed') | |
def get_paike_videos(url, pg, pz, no_cache=False): | |
u"""根据url获取最新最热和分类视频列表""" | |
content = urllib2.urlopen(url).read() | |
content = json.loads(content) | |
total = content.get('total', 0) | |
videos = content.get('results', []) | |
vid_title = {} | |
vid_img = {} | |
vid_img_hd ={} | |
vids = [] | |
for v in videos: | |
videoid = v.get('tid', '') | |
vid_title[videoid] = v.get('title', '') | |
if not vid_img.get(videoid, ''): | |
vid_img[videoid] = v.get('img', '') | |
if not vid_img_hd.get(videoid, ''): | |
vid_img_hd[videoid] = v.get('img_hd', '') | |
vids.append(videoid) | |
video_list = service_ugc.remove_invalid_video(vids, no_cache) | |
# 添加头像 | |
uids = [u.get('userid', '') for u in video_list] | |
user_info_map = service_user.user_info_list(uids) | |
for u in video_list: | |
u_vid = u.get('videoid', '') | |
u['avatar'] = user_info_map.get(u.get('userid', ''), {}).get('avatar', '') | |
u['title'] = vid_title.get(u_vid, '') or u.get('title', '') | |
u['img'] = vid_img.get(u_vid, '') or u.get('img', '') | |
u['img_hd'] = vid_img_hd.get(u_vid, '') or api.convert_img_url(u['img'])# 大图 | |
results = {'status': 'success', 'total': total, 'pg': pg, 'pz': pz, 'results': video_list} | |
return results | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment