python 调用优酷关键词搜索视频api

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()

猜你喜欢

转载自blog.csdn.net/zzuchengming/article/details/54617145