2017-08-28 1 views
-1

Ich arbeite mit der VirusTotal API, die versucht, ein Skript zu schreiben, das Ergebnisse scannt und meldet. Das Problem, das ich habe, ist mit dem SCANS-Abschnitt des Codes, ich kann extrahieren, wie viele positiv sind oder nicht, aber wollte jeden positiven Scan und das Ergebnis ausgeben (Name des Virus, Phishing usw.).JSON - Parsing unabhängig benannte Unterobjekte

Beispiel JSON:

{ 
'response_code': 1, 
'verbose_msg': 'Scan finished, scan information embedded in this object', 
'scan_id':'1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31-1390467782', 
'permalink': 'https://www.virustotal.com/url/__urlsha256__/analysis/1390467782/', 
'url': 'http://www.virustotal.com/', 
'scan_date': '2014-01-23 09:03:02', 
'filescan_id': null, 
'positives': 0, 
'total': 51, 
'scans': { 
     'CLEAN MX': { 
     'detected': false, 
     'result': 'clean site' 
     }, 
     'MalwarePatrol': { 
     'detected': false, 
     'result': 'clean site' 
     } 
} 
} 

Der Code, den ich schrieb scheint nicht alle Scans Informationen in die Schleife passieren das einzige, was ich für den Zugriff scheinen kann, ist der AV-Scanner Name nicht erkannt/Ergebnis Informationen für jeder. Das erste Mal mit JSON api arbeiten, so dass jede Hilfe geschätzt wird.

params = {'apikey': apikey, 'resource':line} 
response = requests.get(vt_report_url, params=params) 
result = response.json() 

if result['positives'] != "0": 
    print "malware detection" 
    for avList in result['scans']: 
     if avList[1] == 'true': 
      print str(avList[0]) + " - "+ str(avList[2]) 

Antwort

0

Aus dem Code kann ich sehen, dass scans ein dict ist, so dass Sie eine Schleife müssen durch sie dict.items() verwenden.

Code:

params = {'apikey': apikey, 'resource':line} 
response = requests.get(vt_report_url, params=params) 
result = response.json() 

if result['positives'] != 0: 
    print "malware detection" 
    for key, value in result['scans'].items(): 
     if value['detected'] == False: 
      print str(key) + " - "+ str(value['result']) 

Ausgang:

malware detection 
CLEAN MX {'detected': False, 'result': 'clean site'} 
+0

Ich habe diesen Code ein zu gehen und es sah zunächst wie es funktionieren würde, aber es vergeht nicht die Einzelteile nach unten in ein Array wie ich es erwartet hatte. Ich habe einen Schlüsselfehler auf der if-Anweisung bekommen, also drucke ich den Wert vor der Überprüfung aus und spaltet die Elemente nicht wie erwartet auf, sondern gibt eine einzelne Zeile von '{u'detected' zurück: False, u'result ': u'clean site '} ' – nilats

+0

@nilats Sie nie erwähnt, welche Ausgabe Sie benötigt. –

+0

Fair genug, mein Ziel war es, den AV-Namen und das Ergebnis im Format von "CLEAN MX - saubere Website"/n "MalwarePatrol - saubere Website" für jeden der verschiedenen Scans – nilats