访问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 Guava:是否可能不使用多重映射映射所有条目。索引()?   java转换键值对作为JSON响应的对象?   java读取一个文本文件,然后计算字母频率,并从高到低列出它们   java Apache CXF为客户提供SEI   java如何在SQL查询中“转义”整个字符串   将JavaServlet定义为主网页servlet注释不起作用   运行jar文件时发生java FileNotFoundException   java有两种加载FXML的方法;为什么一个比另一个更受欢迎?   java无法切换到timeofindia站点页面中的帧   java Firebase Firestore在连接丢失后需要很长时间才能重新连接   java使用来自SQLite的通用数据填充RecyclerView/ListView   当我使用offer和poll独占访问它时,java是LinkedList线程安全的吗?   如何使用包含Java命名空间的XPath检索XML数据?   Spring Boot的java Elasticsearch Searchguard配置   java数组中的数组值赋值?   java保存成功,但更新失败使用Jointable的多对多Spring JPA和额外列   kotlin什么是java。构造器。单()?   简单解析例程的java问题