Как мне запросить данные JSON из API с несколькими фильтрами?

#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}