0

現在、次のような JSON から値を取得しようとしています。

bitly_data = "https://api-ssl.bitly.com/v3/link/clicks?access_token=ACCESS_TOKEN&link=http://bit.ly/TCATL"

(読み取ると、このデータは次のようになります{"status_code": 200, "data": {"units": -1, "tz_offset": -4, "unit": "day", "link_clicks": 390}, "status_txt": "OK"})

link_clicks次に、データを読み取り、整数値のみを変数として保存しようとしますclicks

src = urllib2.urlopen(bitly_data)
clicks = json.load(src)
clicks = clicks['data']['link_clicks']
print clicks

clicksTypeError が発生しますが、正しい値が出力されます (390)。'NoneType' object is not subscriptable

全体のトレースバックは次のとおりです。

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py", line 1344, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/Zach/Dropbox/bitly/bit.py", line 33, in settings
    clicks = clicks['data']['link_clicks']

エラーにもかかわらず、正しい値が返される理由について、私はほとんど混乱しています。問題のある行を as に書き換えてみましclicks = clicks['data']['link_clicks'] or 0たが、役に立ちませんでした。いいねにもしてみましたif statementが、

if clicks['data']['link_clicks'] == None:
     clicks = 0
else:
     clicks = clicks['data']['link_clicks']

しかし、これも効果がありませんでした。

よろしくお願いします。

4

1 に答える 1

2

問題は、この場合、返される JSON が次のようになることです。

{u'status_code': 403, u'data': None, u'status_txt': u'INVALID_ACCESS_TOKEN'}

これはおそらく、URL に適切なアクセス トークンがないことが原因です。

https://api-ssl.bitly.com/v3/link/clicks?access_token=ACCESS_TOKEN&link=http://bit.ly/TCATL

これはaccess_token=ACCESS_TOKEN、特定の API アクセス トークンをそこに配置することを期待するデモまたはチュートリアルからのものである可能性があります。

コメントに記載されているように、短期的な修正方法の 1 つは putif clicks['data'] == Noneですが、おそらく API アクセス トークンの問題を修正することをお勧めします。

于 2012-11-01T02:53:43.970 に答える