#python #json #python-3.x #python-requests
#python #json #python-3.x #python-запросы
Вопрос:
Я извлекаю данные из JSON API.
Данные состоят из списка приложений, каждое приложение имеет множество свойств.
Мне нужны только те приложения, которые соответствуют query_input
и которым не доверяют (см. Рисунок документации API): Я хочу пересечение двух. Мне нужны только приложения, которые соответствуют обоим условиям. Если я использую:
parameters = {"query" : query_input, "trusted" : "false", "limit" : 3}
request = requests.get("http://(certain api link)", params = parameters)
print(json.dumps(request.json(), indent = 4))
Если я использую приведенный выше код и задаю query_input
как «facebook», я получаю это:
{
"info": {
"status": "OK",
"time": {
"seconds": 0.068413019180298,
"human": "68 milliseconds"
}
},
"datalist": {
"total": 1000,
"count": 3,
"offset": 0,
"limit": 3,
"next": 3,
"hidden": 0,
"loaded": true,
"list": [
{
"id": 44893072,
"name": "Facebook",
"package": "com.facebook.katana",
"uname": "facebook",
"size": 56986654,
"icon": "http://(certain link)",
"graphic": "http://(certain link)",
"added": "2013-02-15 03:30:51",
"modified": "2019-03-21 02:24:03",
"updated": "2019-03-21 23:01:10",
"uptype": "xxxxxxxxx",
"store": {
"id": 65518,
"name": "mark8",
"avatar": "http://(certain link)",
"appearance": {
"theme": "lightsky",
"description": ""
},
"stats": {
"apps": 3552,
"subscribers": 1110865,
"downloads": 505861392
}
},
"file": {
"vername": "215.0.0.0.37",
"vercode": 146691804,
"md5sum": "bc0ed01e35b7f888bdaa34eb2c2a2e1f",
"filesize": 56986654,
"path": "http://(certain link)",
"path_alt": "(certain link)",
"malware": {
"rank": "TRUSTED"
}
},
"stats": {
"downloads": 10272286,
"pdownloads": 122342832,
"rating": {
"avg": 4.2,
"total": 4966
},
"prating": {
"avg": 4.17,
"total": 20811
}
},
"has_versions": true,
"obb": null,
"appcoins": {
"advertising": false,
"billing": false
}
},
{
"id": 44918187,
"name": "Facebook Lite",
"package": "com.facebook.lite",
"uname": "facebook-lite",
"size": 1292422,
"icon": "http://(certain link)",
"graphic": "(certain link)",
"added": "2017-09-21 11:39:42",
"modified": "2019-03-21 19:06:13",
"updated": "2019-03-21 23:04:44",
"uptype": "xxxxxxx",
"store": {
"id": 1618942,
"name": "hazel777",
"avatar": "http://(certain link)",
"appearance": {
"theme": "pink",
"description": "Thanks 4 being a follower"
},
"stats": {
"apps": 4098,
"subscribers": 63185,
"downloads": 28170613
}
},
"file": {
"vername": "139.0.0.9.85",
"vercode": 146791354,
"md5sum": "xxxxxxxxxxxxxxxxxxxxxxxx",
"filesize": 1292422,
"path": "http://(certain link)",
"path_alt": "http://(certain link)",
"malware": {
"rank": "TRUSTED"
}
},
"stats": {
"downloads": 18393,
"pdownloads": 23956738,
"rating": {
"avg": 3,
"total": 2
},
"prating": {
"avg": 4.28,
"total": 2225
}
},
"has_versions": true,
"obb": null,
"appcoins": {
"advertising": false,
"billing": false
}
},
{
"id": 3126316,
"name": "Facebook",
"package": "com.sonyericsson.androidapp.fbsetupwizard",
"uname": "xperia-fb-setup",
"size": 181391,
"icon": "http://(certain link)",
"graphic": null,
"added": "2013-03-26 03:26:09",
"modified": "2013-05-05 17:59:53",
"updated": "2019-03-06 19:05:21",
"uptype": "dropbox",
"store": {
"id": 8655,
"name": "vitonline",
"avatar": "http://(certain link)",
"appearance": {
"theme": "light-blue",
"description": ""
},
"stats": {
"apps": 8609,
"subscribers": 27653,
"downloads": 3807977
}
},
"file": {
"vername": "5.0.A.0.10",
"vercode": 10485770,
"md5sum": "xxxxxxxxxxxxxxxx",
"filesize": 181391,
"path": "http://(certain link)",
"path_alt": "http://(certain link)",
"malware": {
"rank": "TRUSTED"
}
},
"stats": {
"downloads": 218559,
"pdownloads": 269179,
"rating": {
"avg": 3.75,
"total": 44
},
"prating": {
"avg": 3.63,
"total": 98
}
},
"has_versions": true,
"obb": null,
"appcoins": {
"advertising": false,
"billing": false
}
}
]
}
}
Это вроде как работает.
Я получаю приложения, связанные с facebook, и потому, что "limit" : 3
в нем отображаются только 3 приложения (все приложения находятся в «datalist»> «list», и каждое приложение начинается с «id» и заканчивается «billing»).
Я должен получать только приложения с рейтингом вредоносных программ «НЕИЗВЕСТНЫЙ», но я получаю приложения с рейтингом вредоносных программ «ДОВЕРЕННЫЙ», который мне не нужен.
Ответ №1:
Я думаю, что документация немного вводит в заблуждение. Если вы установите для своего доверенного параметра значение true, это будет List trusted apps only
. Если вы установите для него значение false, все приложения будут доверенными и неизвестными.
Нет возможности получать только неизвестные приложения из источника.
Я попробовал запрос для Facebook, и все приложения возвращаются как надежные. Возможно, это связано с тем, что из этого источника нет ненадежных / неизвестных приложений. Проверяя с помощью terrarium
в качестве запроса, вы можете получить некоторые неизвестные уровни доверия с помощью trusted=false
, а затем они удаляются, когда trusted=true
Похоже, вам вручную нужно будет получить все результаты, а затем отфильтровать ваш словарь, где ранг вредоносного ПО не равен Trusted
app_data = request.json()
untrusted = [app_entry for app_entry in app_data['datalist']['list'] if app_entry['file']['malware']['rank'].upper() != 'TRUSTED']
Комментарии:
1. Рад, что смог помочь 🙂
2. Только одна вещь… Как вы «пробовали запросы для Facebook», если я опустил ссылки?
Ответ №2:
В документации API указано false
логическое значение JSON для trusted
, поэтому в Python вы должны использовать логическое значение False
вместо строкового значения "false"
, которое сервер будет рассматривать как истинное значение вместо ложного значения:
parameters = {"query" : query_input, "trusted" : False, "limit" : 3}