我正在尝试构建一个youtube视频ID图表,以便考虑每一步恢复的建议数量(让我们称之为 numberOfRelated )和最大深度( maxDepth 图的强>是固定的。 (参见附件中的图解说明)
http://postimg.org/image/ytp80f02n/
我正在使用YouTube-data-api(v3),我在执行时遇到困难(如果 numberOfRelated = 10且 maxDepth = 3,执行时间约为2分钟)
# -*- 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。我认为它来自代码的这一部分我无法弄清楚问题
BORNINF,BORNSUP = maxDepth*(depth-1), maxDepth*depth
for x in xrange(BORNINF,BORNSUP):
getAllID(videosId[x][1],depth)
感谢您的帮助!
答案 0 :(得分:0)
最后,经过几天的挣扎,我找到了一个令人满意的解决方案。
递归函数:
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])
使用第一个节点'实例化递归函数。 (又名视频)
url='https://www.youtube.com/watch?v=M1hYcein2-Y'
initialID = f.get_id(url)
videosId.append([0,initialID])
getAllID(1,initialID)
它仍然很慢,但我能让它发挥作用:
如果 maxDepth = 5且 numberOfRelated = 5,我有32,1s 如果 maxDepth = 6且 numberOfRelated = 5,我已经有156个
值得一提的是,全球解决方案(从ID图中恢复数据)可在此处获取:https://github.com/kwnovi/melihat/blob/master/main.py