2012-08-09 20 views
5
import json 
import urllib 
import urllib2 
url = "https://www.virustotal.com/vtapi/v2/file/report" 
parameters = {"resource": "2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1", 
     "apikey": "123123123123123123"} 
data = urllib.urlencode(parameters) 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 

json_object = json.load(response) 

print json_object['scans'] 

コードが返すJSONオブジェクトの特定の値を取得する方法についてお手伝いしますか?このコードは、VirusTotalに接続してオブジェクトのスキャン結果を取得します。Pythonを使用してJSONオブジェクトの値/コンテンツを取得する方法

最後のコード行で印刷しようとしましたが、出力全体が印刷されました。など

{ 
    "scans": { 
     "TotalDefense": { 
      "detected": false, 
      "version": "37.0.10022", 
      "result": null, 
      "update": "20120809" 
     }, 
     "nProtect": { 
      "detected": false, 
      "version": "2012-08-09.02", 
      "result": null, 
      "update": "20120809" 
     }, 
     "CAT-QuickHeal": { 
      "detected": false, 
      "version": "12.00", 
      "result": null, 
      "update": "20120809" 
     }, 
     "McAfee": { 
      "detected": false, 
      "version": "5.400.0.1158", 
      "result": null, 
      "update": "20120809" 
     }, 
     "K7AntiVirus": { 
      "detected": false, 
      "version": "9.145.7456", 
      "result": null, 
      "update": "20120808" 
     }, 
     "TheHacker": { 
      "detected": false, 
      "version": "None", 
      "result": null, 
      "update": "20120808" 
     }, 
     "VirusBuster": { 
      "detected": false, 
      "version": "15.0.138.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "F-Prot": { 
      "detected": false, 
      "version": "4.6.5.141", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Symantec": { 
      "detected": false, 
      "version": "20121.1.0.298", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Norman": { 
      "detected": false, 
      "version": "6.08.06", 
      "result": null, 
      "update": "20120809" 
     }, 
     "ByteHero": { 
      "detected": false, 
      "version": "1.0.0.1", 
      "result": null, 
      "update": "20120723" 
     }, 
     "TrendMicro-HouseCall": { 
      "detected": false, 
      "version": "9.500.0.1008", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Avast": { 
      "detected": false, 
      "version": "6.0.1289.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "eSafe": { 
      "detected": false, 
      "version": "7.0.17.0", 
      "result": null, 
      "update": "20120808" 
     }, 
     "ClamAV": { 
      "detected": false, 
      "version": "0.97.3.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Kaspersky": { 
      "detected": false, 
      "version": "9.0.0.837", 
      "result": null, 
      "update": "20120809" 
     }, 
     "BitDefender": { 
      "detected": false, 
      "version": "7.2", 
      "result": null, 
      "update": "20120809" 
     }, 
     "ViRobot": { 
      "detected": false, 
      "version": "2011.4.7.4223", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Sophos": { 
      "detected": false, 
      "version": "4.80.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Comodo": { 
      "detected": false, 
      "version": "13190", 
      "result": null, 
      "update": "20120809" 
     }, 
     "F-Secure": { 
      "detected": false, 
      "version": "9.0.16440.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "DrWeb": { 
      "detected": false, 
      "version": "7.0.3.07130", 
      "result": null, 
      "update": "20120809" 
     }, 
     "VIPRE": { 
      "detected": false, 
      "version": "12556", 
      "result": null, 
      "update": "20120809" 
     }, 
     "AntiVir": { 
      "detected": false, 
      "version": "7.11.39.82", 
      "result": null, 
      "update": "20120809" 
     }, 
     "TrendMicro": { 
      "detected": false, 
      "version": "9.561.0.1027", 
      "result": null, 
      "update": "20120809" 
     }, 
     "McAfee-GW-Edition": { 
      "detected": false, 
      "version": "2012.1", 
      "result": null, 
      "update": "20120808" 
     }, 
     "Emsisoft": { 
      "detected": false, 
      "version": "5.1.0.11", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Jiangmin": { 
      "detected": false, 
      "version": "13.0.900", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Antiy-AVL": { 
      "detected": false, 
      "version": "2.0.3.7", 
      "result": null, 
      "update": "20120808" 
     }, 
     "Microsoft": { 
      "detected": false, 
      "version": "1.8601", 
      "result": null, 
      "update": "20120809" 
     }, 
     "SUPERAntiSpyware": { 
      "detected": false, 
      "version": "4.40.0.1006", 
      "result": null, 
      "update": "20120809" 
     }, 
     "GData": { 
      "detected": false, 
      "version": "22", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Commtouch": { 
      "detected": false, 
      "version": "5.3.2.6", 
      "result": null, 
      "update": "20120809" 
     }, 
     "AhnLab-V3": { 
      "detected": false, 
      "version": "2012.08.09.00", 
      "result": null, 
      "update": "20120808" 
     }, 
     "VBA32": { 
      "detected": false, 
      "version": "3.12.18.2", 
      "result": null, 
      "update": "20120809" 
     }, 
     "PCTools": { 
      "detected": false, 
      "version": "8.0.0.5", 
      "result": null, 
      "update": "20120809" 
     }, 
     "ESET-NOD32": { 
      "detected": false, 
      "version": "7370", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Rising": { 
      "detected": false, 
      "version": "24.22.02.05", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Ikarus": { 
      "detected": false, 
      "version": "T3.1.1.122.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Fortinet": { 
      "detected": false, 
      "version": "4.3.398.0", 
      "result": null, 
      "update": "20120809" 
     }, 
     "AVG": { 
      "detected": false, 
      "version": "10.0.0.1190", 
      "result": null, 
      "update": "20120809" 
     }, 
     "Panda": { 
      "detected": false, 
      "version": "10.0.3.5", 
      "result": null, 
      "update": "20120809" 
     } 
    }, 
    "scan_id": "2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1-1344514045", 
    "sha1": "1bebf3ff83636e19cb8e26b6d46472c614aac7ab", 
    "resource": "2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1", 
    "response_code": 1, 
    "scan_date": "2012-08-09 12:07:25", 
    "permalink": "https://www.virustotal.com/file/2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1/analysis/1344514045/", 
    "verbose_msg": "Scan finished, scan information embedded in this object", 
    "total": 42, 
    "positives": 0, 
    "sha256": "2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1", 
    "md5": "6aadd888170411af8aaa0bd8ebffeba4" 
} 
+0

'print json_object ['scan']'は実際に 'scan_id'、' sha1'などを出力しますか? –

+0

コードの出力を表示している場合、JSONオブジェクトは期待通りではない可能性があります。コードにprint json_objectを追加して、その出力も表示できますか? – ernie

+1

ドキュメントはかなり明確で、実際には 'スキャン 'の内容を取得すると思いますが、それはあなたが望むものではありません。辞書、リストなどを扱う方法に関するPythonのドキュメントを読むことをお勧めします。 –

答えて

4

使用json.loadsそれはdictsを含む辞書にJSON文字列に変換します、リスト、

編集2:

JSONオブジェクトは、次のようになります あなたが好きな各項目にアクセスすることができますこれはjson_object['scans']['TotalDefense']['version'] 続きです。 でも、私のコメントで述べたように、json.loads(json.load(response))が必要な場合があります。

編集1: あなたの例では、print json_object['scans']についてもう一度"scans"は表示されません。 http://docs.python.org/library/json.htmlから


>>> import json 
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}] 

このページには、より複雑なデコードを行う方法についての情報を持っています。

+0

'.loads'は文字列を要求しますが、' urlopen'はファイルのようなオブジェクトを返します。ここで '.load'を使うのは正しいです。 –

+0

彼はすでに 'load'ing yesを行っていますが、なぜ' print json_object ['scan'] 'を実行したときに' 'スキャン ''を再度見るのでしょうか?次に彼は実際にトラバースすることができるdictを得るために 'json.loads(json.load(response))'または 'print json.loads(json_object ['scan'])'を実行することができます。 – aneroid

+1

ああ、 'json_object ['scans']'はJSONを含む文字列だと思うかもしれませんが、それは変わったようです。ドキュメントによると、それはありません:https://www.virustotal.com/documentation/public-api/#getting-file-scans –

2
import json 
import urllib 
import urllib2 
url = "https://www.virustotal.com/vtapi/v2/file/report" 
parameters = {"resource": "2aa837802b1c7867a65067525a843566029bd97e3ce99f6eb55217e219043ae1", 
     "apikey": "12312312312312312"} 
data = urllib.urlencode(parameters) 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
json_object = response.read() 
print '\n ' 
response_dict = json.loads(json_object) 
print response_dict.get("response_code",{}) 

これは、オブジェクト内のresponse_codeの値を出力します。ネストされた値を使用するには、response_dict.get("scans",{}).get("AVG",{}) を実行することができます。みんなありがとう!

関連する問題