2016-03-11 35 views
1

我試圖運行這個程序:的Python:沒有JSON對象可以解碼

https://github.com/bmjr/guhTrends

python 2.7.x運行在命令行下面的腳本。我認爲它是用python3.x寫成的。下面的代碼中已棄用了哪些內容?

import urllib 
import json 
import matplotlib.pyplot as plt 

dates = urllib.request.urlopen('http://charts.spotify.com/api/tracks/most_streamed/global/weekly/') 
dataDates = json.loads(dates.read().decode()) 

錯誤:

Traceback (most recent call last): 
    File "DataMining.py", line 6, in <module> 
    dates = urllib.request.urlopen('http://charts.spotify.com/api/tracks/most_streamed/global/weekly/') 
AttributeError: 'module' object has no attribute 'request' 
+1

請將您的代碼片段降低到重現問題所需的絕對最小值。請將* exact *程序複製粘貼到您的問題中。就目前來看,你的代碼片段有語法錯誤。有關更多信息,請參見[mcve]。 –

+1

要修改來自Rob的評論,在90%的案例中,當您製作可驗證的案例時,您會明白代碼出了什麼問題。而且,如果不是,有人可以讓你瞭解你的問題。但沒有一個可證實的例子,兩者都不可能。 –

+1

目前,http://charts.spotify.com/api/tracks/most_streamed/global/weekly/不會返回JSON。它返回一個狀態碼502和HTML,而不是JSON。 –

回答

0

該腳本將無法在python2下工作,因爲python2的urllib沒有請求模塊

如果您想在python2下開始運行該腳本,請使用urllib2.urlopen而不是urllib.request

要獲得bith(python2python3)Python腳本工作中使用six module這是Python 2和3兼容庫

from six.moves import urllib 
import json 
import matplotlib.pyplot as plt 

dates = urllib.request.urlopen('http://charts.spotify.com/api/tracks/most_streamed/global/weekly/') 
dataDates = json.loads(dates.read().decode()) 
0

你請求的資源是當前不可用(我看到一個504)。由於這可能會在您請求遠程服務時發生,因此請始終檢查響應中的狀態代碼;這並不是說你的代碼肯定是錯誤的,在這種情況下,你假設響應是有效的JSON,而不檢查請求是否成功。

檢查urllib documentation以瞭解如何操作(或者,最好按照該頁頂部的建議並使用requests package代替)。

+0

謝謝,現在我也看到了504。我會檢查文檔。我爲上述答案投了贊成票,因爲它解決了棄用/兼容性問題,但您的答案也非常重要。 –

相關問題