首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恢复与初始视频相关的所有视频ID

恢复与初始视频相关的所有视频ID
EN

Stack Overflow用户
提问于 2015-03-12 15:01:39
回答 1查看 139关注 0票数 0

我试图构造一个youtube视频ID图,以考虑在每一步恢复的建议数(我们称之为numberOfRelated)和图的最大深度(maxDepth) )是固定的。(图示说明见附件)

http://postimg.org/image/ytp80f02n/

我正在使用YouTube-data-api (v3),执行时间非常困难(如果numberOfRelated = 10,maxDepth=3,执行时间约为2分钟)。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from lib import function  as f 
import urllib
import  json 
import sys
import argparse
import logging

api_key = 'API_KEY'

videosId = []
maxDepth=2
numberOfRelated = 5

# FIND RELATED VIDEOS FROM A SPECIFIC ONE 
def getVideoRelated (depth, VideoID):

    related_video_api ="https://www.googleapis.com/youtube/v3/search?relatedToVideoId="+str(VideoID)+"&type=video&maxResults="+str(numberOfRelated)+"&key="+str(api_key)+"&part=id"

    try:
        inp = urllib.urlopen(related_video_api)

        respRelated=json.load(inp)
        inp.close()

        # list of related video from a specific one 
        for x in xrange(0,len(respRelated['items'])):
            videosId.append([depth,respRelated['items'][x]['id']['videoId']])

    except Exception, err:
        print "error when trying to get the ID of related videos"

def getAllID(ID, depth):

    if (depth==maxDepth):
        return

    depth+=1
    getVideoRelated(depth,ID)

    BORNINF,BORNSUP = maxDepth*(depth-1), maxDepth*depth 

    for x in xrange(BORNINF,BORNSUP):
        getAllID(videosId[x][1],depth)



def main():
    url='https://www.youtube.com/watch?v=2HIuN5lxMCI'
    initialID = f.get_id(url)

    videosId.append([0,initialID])
    getAllID(initialID,0)

    print videosId
    print len(videosId)

if __name__ == '__main__':
    main()

你知道如何更有效地做这件事吗?(例如:在我的电脑前用numberOfRelated = 50和maxDepth=5恢复数据)

我的代码似乎也没有恢复我想要的所有ID。我认为这是代码的这一部分,我无法解决这个问题

代码语言:javascript
复制
    BORNINF,BORNSUP = maxDepth*(depth-1), maxDepth*depth 

    for x in xrange(BORNINF,BORNSUP):
        getAllID(videosId[x][1],depth)

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 10:34:41

最后,经过几个晚上的挣扎,我找到了一个令人满意的解决方案。

递归函数:

代码语言:javascript
复制
def getAllID(depth,ID):

if (depth==maxDepth):
    return

childs = getVideoRelated(depth,ID)

for x in range(0,len(childs)):
    videosId.append([childs[x][0], childs[x][1]])
    getAllID(childs[x][0]+1, childs[x][1])

用第一个“节点”实例化递归函数(又名视频)

代码语言:javascript
复制
url='https://www.youtube.com/watch?v=M1hYcein2-Y'
initialID = f.get_id(url)

videosId.append([0,initialID])
getAllID(1,initialID)

它仍然很慢,但我可以让它运转起来:

如果numberOfRelated =5和maxDepth = 5,则maxDepth =6和=5得到32,1s

值得注意的是,全局解决方案(从ID图中恢复数据)可以在这里获得:https://github.com/kwnovi/melihat/blob/master/main.py

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29013244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档