Как определить, является ли это мобильным устройством с PHP? Свойства и методы

Для наполнения проекта pre.musicdown.org приходится использовать самописный парсер, с помощью которого сайт автоматически наполняется свежей информацией о музыкальных релизах. Парсером является скрипт написанный на PHP, который в свою очередь через определенный промежуток времени запускает планировщик CRON.

Примерно неделю парсер работал нормально, но через какое то время админы одного из сайтов от куда скрипт берет информацию обнаружили, что их сайт парсят и запретили доступ к нему c IP откуда он запускался.

Сразу хочу заметить, что изначально использовался самый простой способ для получения содержимого страниц. Это функция file_get_contents , пример ее использования приведен ниже.

$html = file_get_contents(«http://www.example.com/»);

У этой функции есть один большой недостаток — невозможность передачи никаких параметров, а особенно параметра User-Agent с помощью которого можно определить какой Browser использует клиент, какую OS и т.д. Может из-за отсутствия User-Agent парсер так быстро и вычислили!? Так же к недостаткам можно отнести отсутствие TimeOut, поддержки Proxy и ряда других возможностей.

Для написания функции для получения контента страницы пришлось использовать CURL, который оказался очень гибким инструментом с рядом интересных возможностей.

function get_url_contents($url){
$crl = curl_init();
$user_agents = «User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)»;
…..
$user_agents = «User-Agent: Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)»;

$user_agent = $user_agents;

curl_setopt($crl, CURLOPT_PROXY, «address:PORT»);
curl_setopt($crl, CURLOPT_PROXYUSERPWD, «user:password»); если proxy с авторизацией
curl_setopt($crl, CURLOPT_URL,$url);
curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($crl, CURLOPT_USERAGENT, $user_agent);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
}

Функция возвращает содержание html страницы адрес которой передается в $url. Так же в функции организован массив из 20-ти User-Agent’ов, один из которых при выполнении случайным образом выбирается из массива.

Прокси сервер и его порт выставляется в строке curl_setopt($crl, CURLOPT_PROXY, «address :PORT «);

Вот в принципе и все, еще можно доработать функцию так, что бы она случайным образом выбирала и прокси сервер, если у Вас имеется список различных Proxy.

Я пишу веб-сайт с PHP. Поскольку для доступа в Интернет кому-либо из них необходимо будет получить доступ, я должен создать мобильную версию. Как лучше всего проверить, является ли это мобильным устройством? Я не хочу иметь оператор switch с 50 устройствами в конце, так как я не только хочу поддерживать iPhone.

Есть ли класс PHP, который я мог бы использовать?

Традиционно мобильные устройства были обнаружены путем сопоставления заголовка HTTP-пользователя HTTP со списком известных мобильных строк UA. Вместо этого новый подход пытается обнаружить наличие настольной ОС – все, что, как установлено, не является настольной ОС, должно быть мобильным.

Это приводит к гораздо менее ложным срабатываниям.

Вот фрагмент:

Import re # Some mobile browsers which look like desktop browsers. RE_MOBILE = { "iphone" : re.compile("ip(hone|od)", re.I), "winmo" : re.compile("windows\s+ce", re.I)} RE_DESKTOP = { "linux" : re.compile(r"linux", re.I), "windows" : re.compile(r"windows", re.I), "mac" : re.compile(r"os\s+(X|9)", re.I), "solaris" : re.compile(r"solaris", re.I), "bsd" : re.compile(r"bsd", re.I)} # Bots that don"t contain desktop OSs. RE_BOT = re.compile(r"(spider|crawl|slurp|bot)") def is_desktop(user_agent): # Anything that looks like a phone isn"t a desktop. for regex in RE_PHONE.values(): if regex.search(user_agent) is not None: return False # Anything that looks like a desktop probably is. for regex in RE_DESKTOP.values(): if regex.search(user_agent) is not None: return True # Bots get the desktop view. if RE_BOT.search(user_agent) is not None: return True # Anything else is probably a phone! return False def get_user_agent(request): # Some browsers put the User-Agent in a HTTP-X header if "HTTP_X_OPERAMINI_PHONE_UA" in request.headers: return request.headers["HTTP_X_OPERAMINI_PHONE_UA"] elif: # Skyfire / Bolt / other mobile browsers ... else: return request.headers.get("HTTP_USER_AGENT", "") def view(request): user_agent = get_user_agent(request) if is_desktop(user_agent): return desktop_response() else: return mobile_response()

Для обнаружения на основе User-Agent используйте базу данных WURFL . По крайней мере, это всеобъемлющий и постоянно обновляемый.

Если вы нацеливаетесь только на высококачественные (ish) телефоны, вам может не понадобиться их вообще обнаруживать, просто вставляйте соответствующие таблицы стилей мобильных устройств.

Если вы хотите настроить контент на какое-либо конкретное устройство, например, чтобы изменить размер изображений на ширину устройства, вы также можете использовать DeviceAtlas . На основе useragent запрашивающего устройства он укажет размер экрана, поддерживаемые форматы изображений, поддерживаемые типы разметки, максимальный размер страницы и т. Д.

Большинство мобильных сайтов используют исключительно user_agent. База данных с открытым исходным кодом возможностей устройства поддерживается на странице . Используя wurlf и на основе user_agent, вы можете идентифицировать физическую и пиксельную ширину экрана, длину и многие другие параметры и принять решение об их рендеринге,

Что такое мобильное устройство? Более слабый процессор? Более низкая пропускная способность? В действительности у него есть экран, разрешение которого ниже 320×240, а глубина цвета ниже 24.

Вы также должны использовать Javascript. Эта ссылка даст вам представление:

Всеобъемлющий Интернет - это подключение людей, данных, процессов и объектов . Это всемирная революция в способах ведения бизнеса и общения, в образовании и здравоохранении, это новые рабочие места. Уже сегодня мы становимся свидетелями тому, какие удивительные вещи возможны, когда мы подключаем людей, города и страны.

Развитие Всеобъемлющего Интернета обусловлено ростом числа подключений к Интернету людей и объектов. В 2015 г. число подключенных мобильных устройств и смартфонов превысит численность населения нашей планеты, в 2020 г. будет подключено более 5 млрд людей и 50 млрд объектов. И это не только привычные планшеты, но и самые разнообразные приборы, способные получать и передавать информацию.

При всем этом, важно не то, сколько будет подключено людей и объектов, а то, какие возможности откроет всеобщая подключенность. Расширится доступ к образованию и здравоохранению, появятся разнообразные способы повышения качества жизни. Госструктуры улучшат обслуживание граждан, предприятия на основе информации, получаемой из новых источников, поднимут качество принимаемых решений и производительность труда, смогут быстрее осваивать новое.

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

Преобразуется и городское хозяйство путем оптимизации расходов и экономии энергоресурсов. Так, 70% вырабатываемой в мире электроэнергии тратится на уличное освещение городов. Оборудовав фонари специальными датчиками и подключив их к сети, можно будет уменьшать интенсивность освещения, задействуя полную мощность только тогда, когда датчики обнаружат движение. При этом потребление электроэнергии сократится на 70-80%.

Подключенные к сети уличные фонари смогут выполнять функции базовых станций Wi-Fi или использоваться для подзарядки электромобилей, при этом горожане получат новые услуги, а города – новые доходы. И дело здесь не в технологиях, дело в том, как Всеобъемлющий Интернет навсегда сможет изменить нашу жизнь.

Даже подключение такого прозаичного, но одновременно такого важного объекта, как система управления сбором бытовых отходов, может сделать большое дело, сократив операционные издержки города на 30%. Датчики, установленные на мусорные контейнеры и подключенные к сети, сообщат соответствующим городским службам о переполнении или, наоборот, о том, что контейнеры пустуют и освобождать их пока еще рано.

Дальновидные руководители уже пожинают плоды использования технологий Всеобъемлющего Интернета. С его помощью в Барселоне уже сегодня повышают эффективность городских служб и предлагают жителям новые услуги. Барселона, один из немногих европейских городов, который может похвастаться бюджетным профицитом, служит инновационным примером того, как использовать мощность Всеобъемлющего Интернета к выгоде города и его жителей.

Будучи одним из ведущих мировых «умных» и подключенных сообществ (Smart+Connnected Communities), Барселона внедрила IoE-решения для управления водоснабжением, для частного и общественного транспорта, для вывоза мусора, причем все они помогают городу экономить деньги. Так, только управление водоснабжением с помощью сети экономит городу 58 млн долл. в год. Сетевые решения для уличного освещения снизили затраты на треть, экономя Барселоне 37 млн долларов ежегодно. Но самое важное, по мнению городского руководства, – это 47 тыс. новых рабочих мест, которые были созданы за последние 7 лет. И это огромное экономическое достижения для города с населением 1,7 млн человек.

Когда мы говорим о Всеобъемлющем Интернете, мы говорим о мире, где всё соединено со всем. Всеобщая подключенность изменит всю нашу жизнь: улицы станут безопаснее, дома – умнее, образование и здравоохранение – качественнее. Трансформируется и наша работа: больше информации, выше скорость принятия решений, более маневренные поставщики, более актуальное производство и более высокая экономическая эффективность. В двух словах, Всеобъемлющий Интернет меняет всё, и в результате выигрывают все.

Теперь у нас есть технология, есть возможности и есть опыт создания мира Всеобъемлющего Интернета. Я думаю, что 2014 год станет годом серьезного технологического переворота, который, по моему мнению, будет иметь значительно большее влияние на весь мир, чем первые 20 лет существования Интернета. Вы готовы?