2016-09-01 29 views
-1

私はかなり新しくコーディングして、いくつかのことを試しています。私は私が持っているPythonスクリプトを実行すると、このエラーが発生しています。私はこのエラーは、何かが "None"を返すためだと読んだが、何が原因であるかを調べるのに困っている(まだこれをすべて習得しようとしている)。Python 2.7 TypeError: 'NoneType'オブジェクトに '_getitem_'属性がありません

このスクリプトの目的は、ビデオからサムネイルを引っ張って、インターネットで同じものの他のインスタンスを検索することです。

import argparse 
import requests 
import json 

from pytineye import TinEyeAPIRequest 

tineye = TinEyeAPIRequest('http://api.tineye.com/rest/','PUBLICKEY','PRIVATEKEY') 

youtube_key = "VIDEOID" 

ap = argparse.ArgumentParser() 
ap.add_argument("-v","--videoID", required=True,help="The videoID of the YouTube video. For example: https://www.youtube.com/watch?v=VIDEOID") 
args = vars(ap.parse_args()) 

video_id = args['videoID'] 

# 
# Retrieve the video details based on videoID 
# 
def youtube_video_details(video_id): 

    api_url = "https://www.googleapis.com/youtube/v3/videos?part=snippet%2CrecordingDetails&" 
    api_url += "id=%s&" % video_id 
    api_url += "key=%s" % youtube_key 

    response = requests.get(api_url) 

    if response.status_code == 200: 

     results = json.loads(response.content) 

     return results 

    return None 


print "[*] Retrieving video ID: %s" % video_id 
video_data = youtube_video_details(video_id) 

thumbnails = video_data['items'][0]['snippet']['thumbnails'] 

print "[*] Thumbnails retrieved. Now submitting to TinEye." 

url_list = [] 

# add the thumbnails from the API to the list 
for thumbnail in thumbnails: 

    url_list.append(thumbnails[thumbnail]['url']) 


# build the manual URLS 
for count in range(4): 

    url = "http://img.youtube.com/vi/%s/%d.jpg" % (video_id,count) 

    url_list.append(url) 


results = [] 

# now walk over the list of URLs and search TinEye 
for url in url_list: 

    print "[*] Searching TinEye for: %s" % url 

    try: 
     result = tineye.search_url(url) 
    except: 
     pass 

    if result.total_results: 
     results.extend(result.matches) 

result_urls = [] 
dates  = {} 

for match in results: 

    for link in match.backlinks: 

     if link.url not in result_urls: 

      result_urls.append(link.url) 
      dates[link.crawl_date] = link.url 

print    
print "[*] Discovered %d unique URLs with image matches." % len(result_urls) 

for url in result_urls: 

    print url 


oldest_date = sorted(dates.keys()) 

print 
print "[*] Oldest match was crawled on %s at %s" % (str(oldest_date[0]),dates[oldest_date[0]]) 

私はそれはおそらく、単純な何か知っているが、私ができる」:

[*] Retrieving video ID: VIDEOID 
    Traceback (most recent call last): 
    File "VidSearch.py", line 40, in <module> 
    thumbnails = video_data['items'][0]['snippet']['thumbnails'] 
    TypeError: 'NoneType' object has no atribute '_getitem_' 

次は(YouTubeのキーを削除)私が実行しているスクリプトです:私のPythonスクリプトを実行した後、それは結果を返します。私の人生のためにそれを理解しているようだ。どんな助けでも大歓迎です。

+1

エラーがインデックス 'video_data'しようとしている、' video_data'は 'から取得されますyoutube_video_details'となります。 'status_code!= 200'の場合、' youtube_video_details'は何を返しますか? –

+0

迅速な対応をありがとうございます。それを試して、KeyErrorを得ました。私が仕事を辞めるときには、それをもっと見ていきます。 – Sevllian

答えて

0

youtube_video_detailsの方法では、 response.status_codeは多分200ないので、この方法は、あなたがこのように行うことができますのでNone

を返す:

video_data = youtubo_video_details(video_id) 

if not video_data:   

    thumbnails = video_data['items'][0]['snippet']['thumbnails'] 
+0

ありがとうございます。私は仕事から降りるときにそれを試してみます。 – Sevllian

関連する問題