我有很多设备名称和制造商,我从各种来源获得。我正在寻找一种程序化方式(可能是api)来确定哪些设备是手机,哪些是平板电脑,哪些是其他设备(例如计算机)。
我在网上搜索过,我只能找到非常好的WURFL API,但它无法仅通过名称来确定设备。
设备的一些例子(名称,制造商):
Galaxy Note 3,三星
MID-97D,上网本
感谢您的帮助!
修改:
所有答案都非常好。如果我能分开赏金,我会做到这一点。
我选择给予GSMArena答案的赏金,因为它是最有用和最实用的答案。
谢谢大家!
答案 0 :(得分:7)
我建议采用更简单的方法。每当设备用于无线通信时,都必须进行认证。在美国 - 这就是FCC。
他们有一个API:
https://data.fcc.gov:443/api/accessibilityclearinghouse/product/searchProducts?api_key=23232323&format=json&rowPerPage=20&searchString=galaxy%20s4
很高兴回来:
"maker": "Samsung",
请在此处查看:background-size: contain
您还可以查询eis,如eBay和亚马逊。
答案 1 :(得分:2)
我使用的是http://www.handsetdetection.com/ API付费版本,可以提供准确的结果。他们有免费试用版选项进行测试。
$referer_site = $_SERVER['HTTP_REFERER'];
$useragent = $_SERVER['HTTP_USER_AGENT']; //"NokiaN95";//
$curlOpts = array(
CURLOPT_URL => "http://api.handsetdetection.com/apiv3/site/detect/xxxxx.json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => 'xxxxxxxx:xxxxxxxxx',
CURLOPT_HTTPHEADER => array('Content-Type:application/json'),
CURLOPT_POSTFIELDS => '{"user-agent":"'.$useragent.'"}');
/******************************************/
$curl = curl_init();
curl_setopt_array($curl, $curlOpts);
$responseBody = curl_exec($curl);
$jsonObj = json_decode($responseBody);
curl_close($curl);
$device_details = json_decode($responseBody);
答案 2 :(得分:2)
在搜索和谷歌搜索了一段时间后,我遇到了一个名为GSMArena的网站。现在该网站是手机和平板电脑的比较网站,你基本上可以看到平板电脑/手机的所有规格。查看搜索页面的源代码,我发现有一个div与#34; maker"包含所有搜索结果。
此外,一旦您点击手机/平板电脑链接,它就会转到标题为"平板电脑名称的页面 - 完整的平板电脑规格"如果它是一个标签,并且"移动名称 - 完整的手机规格"如果它是移动设备。
如果找到与搜索查询的直接匹配,则会直接重定向到规格页面,因此我添加了一个If测试,以检查它是搜索页面还是规格页面。
我的程序获得"制造商的第一个链接" div(使用BeautifulSoup)然后转到链接,拉出html,然后获取页面的标题。
如果未找到任何结果,我的程序会将其标记为"其他"
代码:
import urllib.request
from bs4 import BeautifulSoup
searchlist = ["galaxy note","nexus 10","nexus 5","galaxy ace","moto g","galaxy tab 2", "MID-97D"]
for searchstr in searchlist:
other = False
searchstr = searchstr.replace(" ", "%20")
searchlink = "http://www.gsmarena.com/results.php3?sQuickSearch=yes&sName="+searchstr
string = urllib.request.urlopen(searchlink).read().decode("ISO-8859-1")
soup = BeautifulSoup(string,"lxml")
if soup.title.string == "Phone Finder results - GSMArena.com":
makerdiv = soup.find_all('div', attrs={'class': 'makers'})
links = makerdiv[0].find_all('a')
if len(links) != 0:
link = "http://www.gsmarena.com/" + links[0].attrs['href']
string = urllib.request.urlopen(link).read().decode("ISO-8859-1")
soup = BeautifulSoup(string,"lxml")
else:
other = True
if other == False:
title = soup.title.string
name = title.split("-")[0]
rest = title.split("-")[1]
taborphone = rest.split(" ")[2]
else:
name = searchstr
taborphone = "other"
print("Name:",name)
print("Type:",taborphone)
输出:
Name: Samsung Galaxy Note5
Type: phone
Name: Samsung Google Nexus 10 P8110
Type: tablet
Name: LG Nexus 5X
Type: phone
Name: Samsung Galaxy Ace 3
Type: phone
Name: Motorola Moto G (3rd gen)
Type: phone
Name: Samsung Galaxy Tab 2 7.0 P3100
Type: tablet
Name: MID-97D
Type: other
它有效:)
优点:
数据库将始终保持更新状态,GSMArena的数据库中包含大量手机和平板电脑
缺点:
它不能用于平板电脑和手机等设备,如上网本等。
我刚注意到@Oli在评论中提出了GSMArena。
答案 3 :(得分:1)
以下方法应该有效,但需要一些编程:
主要优点是您的结果将始终是最新的,并得到世界上最好的搜索引擎的支持。
至于缺点,如果您将免费使用Google API,他们将限制每天允许的请求数量(可以增加费用)。此外,还可能需要对其他人进行一些审核。设备,以确保您的分类程序正常工作
通过在谷歌中输入样本设备名称并查看搜索结果,可以在开发之前粗略估计方法潜力。如果它们包含“缺失”'设备类型,然后值得尝试实现这一点。
由于Google API对商业用途有严格的速率限制和限制,因此您可以考虑使用其他搜索引擎,例如:雅虎,如果你通知他们allows commercial use,他们在这种情况下有很高的费率限制。
答案 4 :(得分:0)
我通常使用移动设备API https://specsapi.cc。 这是cURL示例:
curl -X GET “https://specsapi.cc/specification?limit=1&name=iphone%20xs%20max&year=2018” -H “accept: application/json”
他们有几个可以随时使用的API客户端https://github.com/specsapi/specsapi-clients