访问FreshPixl的Fono API以深入了解移动电话
fonoapi的Python项目详细描述
https://fonoapi.freshpixl.com/
Fono API是一个可以提供移动设备描述的API 例如型号、品牌、CPU、GPU、尺寸、发布日期等。这个 package包通过 requests包。
开发了APIshakee93。这个包开始是 叉子 由jesusperiago编写-我添加了 使用getlatest方法来利用getlatest API method,并获得了很多 为提交此包而进行的幕后组织更改 使其更容易使用。
安装
pip install fonoapi
教程
在开始之前,请确保generate an API token。我们要走了 首先创建一个FonoAPI对象,我们用 API令牌以便开始与FONO API交互:
from__future__importprint_function# -- for Python 2.7fromfonoapiimportFonoAPIfon=FonoAPI('TOKEN')
获取与特定设备名称匹配的设备
假设我们有一个特定的设备,比如iphone 7 希望进一步了解。我们可以使用getdevice方法返回 API提供的有关此特定设备的信息:
device='iPhone 7'iPhone_7=fon.getdevice(device)print(iPhone_7)
| Devices Object: mobile device data| ------------------------------------ Number of devices : 4 Input parameters : {'device': 'iPhone 7', 'position': None, 'brand': None}
getdevice方法返回一个Devices对象,该对象 使从fono api检索数据变得容易。打印出 对象为我们提供有关检索信息的设备数量的信息。 以及传递给getdevice的参数。
我们可以通过以下三种方式输出Devices对象中的数据 对Devices对象调用以下方法:-dataframe :作为pandas数据框,其中每一行对应一个电话- list_of_dicts:作为字典列表,每个电话有一个dict- list_of_lists :作为列表列表,其中每个子列表对应 到电话
并非fono api中的所有移动设备都具有所有可能的属性 与他们有关的。对于list_of_dicts,只有 与每个电话相关的属性包含在每个电话的 字典。在dataframe或list_of_lists的情况下,您可以 为每个电话选择要包含的特定列(如果未指定 要包括的列,包括所有可能的列)。在这种情况下, 没有特定列值的设备的值为 ^分别是{tt17}$或None。
在我们的例子中,让我们看看属性Brand, DeviceName, body_c 对于我们的api调用返回的设备:
print(iPhone_7.dataframe(['Brand','DeviceName','body_c']))
Brand | DeviceName | body_c |
---|---|---|
Prestigio | Prestigio MultiPhone 7500 | None |
Prestigio | Prestigio MultiPhone 7600 Duo | None |
Apple | Apple iPhone 7 Plus |
|
Apple | Apple iPhone 7 |
|
- 列表中有两个由prestigio提供的非苹果设备!模型 两个设备的名称以prestigio multiphone开头 7500,所以当我们 搜索字符串“iphone 7”
- 两个预数字设备没有^{tt20}的值$ 属性,因此该列的值为NaN
为了在我们的结果中去掉预数字设备,我们所拥有的 要做的是指定brand参数到getdevice方法:
device,brand='iPhone 7','Apple'iPhone_7=(fon.getdevice(device,brand).dataframe(['Brand','DeviceName','body_c']))print(iPhone_7)
Brand | DeviceName | body_c |
---|---|---|
Apple | Apple iPhone 7 Plus |
|
Apple | Apple iPhone 7 |
|
获取特定品牌的最新设备
getlatest将返回有关 一个特定的品牌。例如,假设我们希望 苹果最新的移动设备:
brand='Apple'latest_apples=(fon.getlatest(brand,limit=5).dataframe(['DeviceName','announced','_3_5mm_jack_','talk_time']))print(latest_apples)
DeviceName | announced | 3_5mm_jack | talk_time |
---|---|---|---|
Apple iPad Pro 12.9 | 2017, June | Yes | Up to 10 h (multimedia) |
Apple iPad Pro 10.5 | 2017, June | Yes | Up to 10 h (multimedia) |
Apple iPad 9.7 | 2017, March | Yes | Up to 10 h (multimedia) |
Apple iPhone 8 | Not announced yet | No | None |
Apple Watch Series 1 Sport 42mm | 2016, September | No | Up to 3 h 40 min |
最后,也许我们想在最近的移动设备上检索数据 很多品牌的设备…但我们不确定是否拼写 品牌名称正确。默认情况下,当getlatest(或 getdevice)不从api检索任何结果,它们返回 空的Devices对象。空的Devices对象的值为 True用于其null类属性(以及False的值 它的not_null类属性)。例如:
brands=['Apple','Samsung','LG','Huawei','SonyEricsson']brand_devices=[]forbrandinbrands:devices=fon.getlatest(brand,limit=3)brand_devices.append(devices)
Could not retrieve brand information for brand SonyEricsson from the Fono API.
# Print out the Devices object for SonyEricssonprint(brand_devices[-1])
| Devices Object: mobile device data| ------------------------------------ Number of devices : 0 Input parameters : {'brand': 'SonyEricsson', 'limit': 3}
这里的问题是api中没有品牌sonyericsson, 正确的名字应该是爱立信。假设我们想 获取存储在brand_devices中的所有设备信息, Devices对象的列表,并创建单个pandas数据帧:
importpandasaspdcolumns=['Brand','DeviceName','announced','talk_time']brand_devices=[devices.dataframe(columns)fordevicesinbrand_devicesifdevices.not_null]all_brands=pd.concat(brand_devices)print(all_brands)
Brand | DeviceName | announced | talk_time |
---|---|---|---|
Apple | Apple iPad Pro 12.9 | 2017, June | Up to 10 h (multimedia) |
Apple | Apple iPad Pro 10.5 | 2017, June | Up to 10 h (multimedia) |
Apple | Apple iPad 9.7 | 2017, March | Up to 10 h (multimedia) |
Samsung | Samsung Galaxy Tab A 8.0 (2017) | Not announced yet | NaN |
Samsung | Samsung Galaxy C10 | Not announced yet | NaN |
Samsung | Samsung Galaxy J5 (2017) | 2017, June | Up to 21 h (3G) |
LG | LG V30 | Not announced yet | NaN |
LG | LG X venture | 2017, May | Up to 24 h (3G) |
LG | LG Stylo 3 Plus | 2017, May | Up to 14 h (3G) |
Huawei | Huawei MediaPad M3 Lite 8 | 2017, June | NaN |
Huawei | Huawei Honor 9 | 2017, June | NaN |
Huawei | Huawei nova 2 plus | 2017, May | NaN |
将有效的api令牌传递给py.test以运行包的单元测试。
py.test --apitoken <TOKEN>