Получить тип устройства (телефон/планшет/другое) по бренду

У меня есть длинный список имен устройств и производителей, которые я получил из разных источников. Я ищу программный способ (возможно, api), чтобы определить, какие из устройств являются телефонами, которые являются планшетами и что-то еще (например, компьютер).

Я искал в Интернете, и я мог найти только WURFL API, который довольно хорош, но он не может определить устройство только его название.

Некоторые примеры устройств (имя, изготовители):

Galaxy Note 3, Samsung

MID-97D, нетбук

Спасибо за помощь!

Edit

Все ответы были очень хорошими. Если бы я мог разделить щедрость, я бы сделал это.

Я решил дать щедрость за ответ GSMArena, потому что он был самым полезным и практичным.

Спасибо всем!

Ответ 1

После поиска и поиска в Google, я наткнулся на сайт под названием GSMArena. Теперь сайт является сравнительным сайтом для телефонов и планшетов, в основном вы можете увидеть все спецификации планшета/телефона. Глядя на исходный код страницы поиска, я обнаружил, что существует div с классом "maker", который содержит все результаты поиска.

Также, как только вы нажмете на ссылку для телефона/планшета, вы перейдете на страницу с названием "название планшета - спецификации полного планшета", если его вкладка и "мобильное имя - полнофункциональные спецификации телефона", если это мобильный.

Если он нашел прямую совпадение с поисковым запросом, он перенаправляется прямо на страницу спецификации, поэтому я добавил тест If, чтобы проверить, является ли это страницей поиска или специальной страницей.

Моя программа получает первую ссылку в div "maker" (используя 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 в комментариях.

Ответ 2

Я предлагаю более простой подход. Всякий раз, когда устройство используется для беспроводной связи, оно должно быть сертифицировано. В США - это FCC.

У них есть API:

https://data.fcc.gov:443/api/accessibilityclearinghouse/product/searchProducts?api_key=23232323&format=json&rowPerPage=20&searchString=galaxy%20s4

С радостью возвращается:

  "maker": "Samsung",

Смотрите здесь: https://ach.fcc.gov/for-developers//#!/API/product_searchProducts_get

Вы также можете запросить apis как eBay и Amazon.

Ответ 3

Я использую 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);

Ответ 4

Следующий подход должен работать, но потребуется некоторое программирование:

  • Создайте группы синонимов для каждого имени типа устройства, которое вы пытаетесь классифицировать (например, [телефон, мобильный телефон], [планшет, панель])
  • Используйте API поиска REST Google, чтобы получить результаты поиска для вашего имени устройства (вместо этого можно использовать более специализированный API интернет-магазинов)
  • Используйте регулярные выражения, чтобы подсчитать количество совпадений в результатах поиска против каждого синонима в определенной группе.
  • Группа с наибольшим итоговым количеством совпадений для всех синонимов представляет тип вашего устройства.
  • Если совпадений не найдено, тип устройства следует классифицировать как "другое". Чтобы предотвратить ложное позитивное сопоставление в качестве одной из целевых групп, можно установить минимальное количество совпадений, чтобы убедиться, что "другое" устройство по ошибке не помещено в "планшеты" или "телефоны". Я предполагаю, что проверка регулярного выражения будет выполняться сразу с несколькими элементами результатов поиска.

Главными плюсами являются то, что ваши результаты будут всегда актуальны и поддерживаться лучшей поисковой системой в мире.

Что касается минусов, если вы будете использовать Google API бесплатно, они ограничат количество запросов в день (могут быть увеличены за плату). Также для "других" устройств может потребоваться некоторая модерация, чтобы убедиться, что ваша программа классификации работает правильно.

Потенциал подхода можно приблизительно оценить до разработки, просто введя образцы имен устройств в Google и просмотрев результаты поиска. Если они содержат "отсутствующие" типы устройств, то стоит попытаться реализовать это.

Поскольку Google API имеет строгие ограничения скорости и ограничения для коммерческого использования, вы можете вместо этого использовать другие поисковые системы, например. Yahoo, который разрешает коммерческое использование, если вы уведомите об этом, и в этом случае они имеют высокие пределы ставок.