質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1070閲覧

PythonでJSONデータの処理を行いたい

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/28 08:10

お世話になっております。
Pythonのプログラムで、Webサービス(VirusTotal)のAPIを使って問い合わせを行い、その結果をJSONデータで受け取るプログラムを作成しています。
現在Webサイトへの問い合わせは実現でき、その結果をJSONで取得することまでできました。
JSONデータの中身を指定して値が0でないときに処理を行うように条件式を組みたいのですがうまくいきません。
※以下のコードのif文の後半部です。
if jsondata['response_code'] == 1 and jsondata**['detected_urls']['positives']** != 0:
jsondataの['detected_urls']['positives']の値が0でない場合に、という条件にしたいです。

お手数をおかけしますが、アドバイスをいただけれると幸いです。
よろしくお願いします。

Python

1 for item in uniq_ip_list: 2 3 index += 1 4 params = { 5 'apikey':'実際のapikeyの値', 6 'ip':item 7 } 8 9 response = requests.get(url, params=params) 10 11 jsondata = response.json() 12 13 #問い合わせ結果を書き込み 14 if jsondata['response_code'] == 1 and jsondata['detected_urls']['positives'] != 0: 15 hit += 1 16 print("怪しいサイト") 17 18

Error

Traceback (most recent call last):

File "<string>", line 1, in <module>

File "c:プログラムのパス.py", line 76, in SearchIP

if jsondata['response_code'] == 1 and jsondata['detected_urls']['positives'] != 0:

TypeError: list indices must be integers or slices, not str

Press Ctrl+C to copy this message to the clipboard.

OK

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

APIの戻り値が不明ですが、もし/domain/reportであれば、
jsondata['detected_urls']['positives'ではなくjsondata['detected_urls'][0]['positives'が正しいです。

Python

1 2# https://developers.virustotal.com/reference#domain-report 3jsondata = { 4 "undetected_referrer_samples": [{ 5 "date": "2018-03-04 16:38:06", 6 "positives": 0, 7 "total": 66, 8 "sha256": "ce08cf22949b6b6fcd4e61854ce810a4f9ee04529340dd077fa354d759dc7a95" 9 }, { 10 "positives": 0, 11 "total": 53, 12 "sha256": "b8f5db667431d02291eeec61cf9f0c3d7af00798d0c2d676fde0efb0cedb7741" 13 }], 14 "whois_timestamp": 1520586501, 15 "detected_downloaded_samples": [{ 16 "date": "2013-06-20 18:51:30", 17 "positives": 2, 18 "total": 46, 19 "sha256": "cd8553d9b24574467f381d13c7e0e1eb1e58d677b9484bd05b9c690377813e54" 20 }], 21 "detected_referrer_samples": [], 22 "undetected_downloaded_samples": [{ 23 "date": "2018-01-14 22:34:24", 24 "positives": 0, 25 "total": 70, 26 "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" 27 }], 28 "resolutions": [{ 29 "last_resolved": "2018-03-09 00:00:00", 30 "ip_address": "185.53.177.31" 31 }, { 32 "last_resolved": "2013-06-20 00:00:00", 33 "ip_address": "90.156.201.97" 34 }], 35 "subdomains": [ 36 "test.027.ru", 37 "www.027.ru" 38 ], 39 "categories": [ 40 "parked", 41 "uncategorized" 42 ], 43 "domain_siblings": [], 44 "undetected_urls": [], 45 "response_code": 1, 46 "verbose_msg": "Domain found in dataset", 47 "detected_urls": [{ 48 "url": "http://027.ru/", 49 "positives": 2, 50 "total": 67, 51 "scan_date": "2018-04-01 15:51:22" 52 }, { 53 "url": "http://027.ru/adobe/flash_install_v10x1.php", 54 "positives": 5, 55 "total": 67, 56 "scan_date": "2018-03-26 09:22:43" 57 }, { 58 "url": "http://027.ru/track.php", 59 "positives": 4, 60 "total": 66, 61 "scan_date": "2018-01-14 22:39:41" 62 }, { 63 "url": "http://027.ru/track.php?domain=027.ru&caf=1&toggle=answercheck", 64 "positives": 2, 65 "total": 66, 66 "scan_date": "2018-01-09 22:19:43" 67 }, { 68 "url": "https://027.ru/", 69 "positives": 1, 70 "total": 66, 71 "scan_date": "2016-02-08 13:25:40" 72 }], 73} 74 75print( jsondata['response_code']) 76print( jsondata['detected_urls'][0]['positives'])

投稿2021/06/28 08:19

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/28 08:39

早々にご回答いただきありがとうございます。 対象は「/ip-address/report」となります。 ご教示いただいたコードで実行した際に、以下のエラーが表示されました。 度々の質問で恐縮ですが、いかのないようからわかることはありますでしょうか。 --------------------------- Error --------------------------- Traceback (most recent call last): File "<string>", line 1, in <module> File "プログラムのパス", line 76, in SearchIP if jsondata['response_code'] == 1 and jsondata['detected_urls'][0]['positives'] != 0: IndexError: list index out of range Press Ctrl+C to copy this message to the clipboard. --------------------------- OK ---------------------------
can110

2021/06/28 09:01

jsondata['detected_urls']のリストが空であると思われます。 リストが空でないかをチェックしたうえで判定処理をするようにしましょう。
退会済みユーザー

退会済みユーザー

2021/06/29 00:07

アドバイスをいただきありがとうございました。 いただいた内容で処理できるようになりました。 今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問