skip to Main Content

I’m retrieving data from a JSON API.
The data consists of a list of apps, each app having lots of properties.
I only want the apps that match query_input and that are not trusted (see API documentation picture):
enter image description here
I want the intersection of the two. I only want apps that match both conditions. If I use:

parameters = {"query" : query_input, "trusted" : "false", "limit" : 3}
request = requests.get("http://(certain api link)", params = parameters)
print(json.dumps(request.json(), indent = 4))

If I use the code above, and set query_input as “facebook” I get this:

{
    "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
                }
            }
        ]
    }
}

It sort of works.
I get facebook related apps, and because "limit" : 3, it only shows 3 apps (all apps are in “datalist” > “list”, and each app begins with “id” and ends with “billing”).
I should only be getting apps with malware rankings of “UNKNOWN”, but I’m getting apps with malware rankings of “TRUSTED”, which I don’t want.

2

Answers


  1. The API documentation lists false as a JSON boolean value for trusted, so in Python you should use a boolean value of False instead of a string value "false", which would be treated as a truthy value instead of a falsy value by the server:

    parameters = {"query" : query_input, "trusted" : False, "limit" : 3}
    
    Login or Signup to reply.
  2. I think the documentation is a bit misleading. If you set your trusted parameter to true it will List trusted apps only. If you set it to false it will be all apps Trusted and Unknown.

    There is no option to get only unknown apps from a source.

    I’ve tried the query for Facebook and all apps return as Trusted. Perhaps this is because there are no untrusted/unknown apps from that source.
    Checking with terrarium as the query you can get some Unknown trust levels with trusted=false and then they are removed when trusted=true

    So it looks like you will manually need to get all the results and then filter your dictionary where the malware rank is not equal to Trusted

    app_data = request.json()
    untrusted = [app_entry for app_entry in app_data['datalist']['list'] if app_entry['file']['malware']['rank'].upper() != 'TRUSTED']
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search