版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzuchengming/article/details/54617145
1,第一步注册账号,申请appKey就不说了,根据优酷开放平台的新手指南.
2,在优酷开放平台找到通过关键词搜索视频,查看调用该api需要的系统参数和业务参数。
其它参数都还好,我在调用时碰到的难搞参数有:
a,timestamp,表示时间戳。
python中用time.time()来返回当前时间的时间戳,单位是秒,返回类型是浮点数。
根据调用示例:
https://openapi.youku.com/router/rest.json?opensysparams={“timestamp”: 1453720442,
“client_id”: “163d4fd10c7f9a28”,
“version”: “3.0”,
“access_token”: “d9ce66ced641240836cf6011a4c195bc”,
“action”: “youku.search.video.keyword.get”,
“format”:”json”,
“sign”:”90cfec261f0ddc4ee843ccadf33f7885”}&caller=NOVA&keyword=abc
b,sign,就是签名,具体api的签名方法不一样,本api的签名方法是点击sign后拉到最下边可以看到有一个java生成签名的示例。
我对应着用python生成了一个签名。
具体调用代码如下:
#!/usr/bin/python
#coding=utf-8
#这是调用优酷视频关键字搜索api
#遇到难点:
# 1,需要申请appkey和app secret
# 2,时间戳:我用的是str(int(time.time()))
# 3,sign怎么求?
#根据java示例代码,一步步生成了sign
import sys
import urllib
import time
import json
import hashlib
import pip._vendor.requests
reload(sys)
sys.setdefaultencoding('utf-8')
url = "https://openapi.youku.com/router/rest.json"
class call_youku_video_search_api(object):
def __init__(self,query):
self.query = query
def create_sign(self):
strtemp = "action" + urllib.quote("youku.search.video.keyword.get") + "client_id" + urllib.quote(
"965416d2d0c16") + "format" + urllib.quote("json") + 'keyword' + urllib.quote(
self.query) + "timestamp" + urllib.quote(str(int(time.time()))) + "version" + urllib.quote("3.0")
strtemp = strtemp + "30692e8a8e0256016837fb" # 这个就是secret
m = hashlib.md5()
m.update(strtemp)
sign = m.hexdigest()
return sign
def get_veideo(self):
sign = self.create_sign()
opensysparams = {
"action": "youku.search.video.keyword.get",
"client_id": "965416d2d0c16",
"format": "json",
"timestamp": str(int(time.time())),
"version": "3.0",
"sign": sign
}
params = {
'opensysparams': str(json.dumps(opensysparams)),
'keyword': self.query
}
data = urllib.urlencode(params)
res = pip._vendor.requests.get(url, params=data)
result = json.dumps(res.json(), ensure_ascii=False, encoding="utf-8")
result = result.strip('\n')
result = result.strip()
title_link = []
npos1 = result.find("\"title\":")
while npos1 != -1:
result = result[npos1:]
result = result.lstrip("\"title\":")
npos2 = result.find("\"")
result = result[npos2:]
result = result.lstrip("\"")
npos3 = result.find("\"")
titletemp = "\"" + result[:npos3] + "\""
result = result[npos3:]
result = result.lstrip("\"")
npos4 = result.find("\"rurl\":")
if npos4 != -1:
result = result[npos4:]
result = result.lstrip("\"rurl\":")
npos5 = result.find("\"")
result = result[npos5:]
result = result.lstrip("\"")
npos6 = result.find("\"")
linktemp = "\"" + result[:npos6] + "\""
result = result[npos6:]
result = result.lstrip("\"")
title_link.append(titletemp + ":" + linktemp)
npos1 = result.find("\"title\":")
if title_link:
for i in range(0, len(title_link)):
print title_link[i]
return title_link
if __name__ == '__main__':
myvideo = call_youku_video_search_api("卧虎藏龙")
myvideo.get_veideo()