2013-10-06 17 views
0

我们通过Google找到此代码。它应该为我们提供关键字的Google索引。问题是,它的工作原理了一会儿,然后给了我们这样的错误:检索关键字Google索引时的TypeError

./g1.py size hassize 
Traceback (most recent call last): 
    File "./g1.py", line 22, in <module> 
    n2 = int(gsearch(args[0]+" "+args[1])['cursor']['estimatedResultCount']) 
TypeError: 'NoneType' object is unsubscriptable 

代码:

#!/usr/bin/env python 

import math,sys 
import json 
import urllib 

def gsearch(searchfor): 
    query = urllib.urlencode({'q': searchfor}) 
    url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query 
    search_response = urllib.urlopen(url) 
    search_results = search_response.read() 
    results = json.loads(search_results) 
    data = results['responseData'] 
    return data 

args = sys.argv[1:] 
m = 45000000000 
if len(args) != 2: 
     print "need two words as arguments" 
     exit 
n0 = int(gsearch(args[0])['cursor']['estimatedResultCount']) 
n1 = int(gsearch(args[1])['cursor']['estimatedResultCount']) 
n2 = int(gsearch(args[0]+" "+args[1])['cursor']['estimatedResultCount']) 

回答

1

我跑你的代码了几次,发现,每隔一段时间查询返回具有data['responseData'] = None的对象。这导致你报告的错误。要了解这是为什么有时候的情况下,我输出的整个data对象时data['responseData'] = None,并发现:

{u'responseData': None, 
u'responseDetails': u'Suspected Terms of Service Abuse. 
         Please see http://code.google.com/apis/errors', 
u'responseStatus': 403} 

看来,你的一些请求都返回HTTP 403 Forbidden状态码,并且结果查询没有得到满足(因此没有数据)。我会读the page on Google's Terms of Service,看看您是否可以弄清楚为什么您的一些请求可能违反了服务条款。

+0

@是的,但是你最好的解决方案是什么,我没有做得太快我也休息一下。任何有关这方面的经验请分享 – user2711681

+0

你的意思是你应该如何提出API请求或你如何发现错误? – mdml

+0

是的我的意思是如何即兴API请求,因为我只是做5或6它给我错误关于此的任何提示? – user2711681