私はかなり新しくコーディングして、いくつかのことを試しています。私は私が持っている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スクリプトを実行した後、それは結果を返します。私の人生のためにそれを理解しているようだ。どんな助けでも大歓迎です。
エラーがインデックス 'video_data'しようとしている、' video_data'は 'から取得されますyoutube_video_details'となります。 'status_code!= 200'の場合、' youtube_video_details'は何を返しますか? –
迅速な対応をありがとうございます。それを試して、KeyErrorを得ました。私が仕事を辞めるときには、それをもっと見ていきます。 – Sevllian