访问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,只有 与每个电话相关的属性包含在每个电话的 字典。在dataframelist_of_lists的情况下,您可以 为每个电话选择要包含的特定列(如果未指定 要包括的列,包括所有可能的列)。在这种情况下, 没有特定列值的设备的值为 ^分别是{tt17}$或None

在我们的例子中,让我们看看属性Brand, DeviceName, body_c 对于我们的api调用返回的设备:

print(iPhone_7.dataframe(['Brand','DeviceName','body_c']))
BrandDeviceNamebody_c
PrestigioPrestigio MultiPhone 7500None
PrestigioPrestigio MultiPhone 7600 DuoNone
AppleApple iPhone 7 Plus
  • IP67 certified - dust and water resistant:raw-latex:r
AppleApple iPhone 7
  • IP67 certified - dust and water resistant:raw-latex:r
  • 列表中有两个由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)
BrandDeviceNamebody_c
AppleApple iPhone 7 Plus
  • IP67 certified - dust and water resistant:raw-latex:r
AppleApple iPhone 7
  • IP67 certified - dust and water resistant:raw-latex:r

获取特定品牌的最新设备

getlatest将返回有关 一个特定的品牌。例如,假设我们希望 苹果最新的移动设备:

brand='Apple'latest_apples=(fon.getlatest(brand,limit=5).dataframe(['DeviceName','announced','_3_5mm_jack_','talk_time']))print(latest_apples)
DeviceNameannounced3_5mm_jacktalk_time
Apple iPad Pro 12.92017, JuneYesUp to 10 h (multimedia)
Apple iPad Pro 10.52017, JuneYesUp to 10 h (multimedia)
Apple iPad 9.72017, MarchYesUp to 10 h (multimedia)
Apple iPhone 8Not announced yetNoNone
Apple Watch Series 1 Sport 42mm2016, SeptemberNoUp 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)
BrandDeviceNameannouncedtalk_time
AppleApple iPad Pro 12.92017, JuneUp to 10 h (multimedia)
AppleApple iPad Pro 10.52017, JuneUp to 10 h (multimedia)
AppleApple iPad 9.72017, MarchUp to 10 h (multimedia)
SamsungSamsung Galaxy Tab A 8.0 (2017)Not announced yetNaN
SamsungSamsung Galaxy C10Not announced yetNaN
SamsungSamsung Galaxy J5 (2017)2017, JuneUp to 21 h (3G)
LGLG V30Not announced yetNaN
LGLG X venture2017, MayUp to 24 h (3G)
LGLG Stylo 3 Plus2017, MayUp to 14 h (3G)
HuaweiHuawei MediaPad M3 Lite 82017, JuneNaN
HuaweiHuawei Honor 92017, JuneNaN
HuaweiHuawei nova 2 plus2017, MayNaN
测试

将有效的api令牌传递给py.test以运行包的单元测试。

py.test --apitoken <TOKEN>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分别使用椭圆曲线密码对文本消息进行java加密和解密   java如何将JTable滚动到特定值?   java JSP登录注销简单web应用程序,使用bean在数据库中存在数据时返回false   java无法编译,未设置类路径,包不存在?   java为什么这一变量会受到影响?   集合为什么Java在Map中没有putIfAbsent(key,supplier)方法?   安卓在Java中计算仿真时间   java初始化方法在主类中的指定方法之前运行   java如何在hadoop的reduce中将genericWritable恢复为用户定义的可写?   如何使用java替换pdf中的文本   参数不适用于ASP服务器的java HttpPost   创建对象时的java NullPointerException   Java JPanel中的swing图形有问题,但它在一个框架中工作   java Android Studio在硬件设备上运行时出错   google api类路径的java空指针异常   java如何将InputStream转换为DataHandler?   java在多个Jetty服务器之间共享连接池