Делаем из iPhone пульт управления маком
🕛 04.06.2009, 16:13
Если у вас есть мак с установленным апачем и php с помощью простого веб приложения легким движением руки iPhone превращается в пульт управления.Как все это работает? Да очень просто. Наш iPhone через сафари будет посылать запрос php скрипту, который в свою очередь будет выполнять AppleScript, ну а уж он будет посылать команды приложениям.
И так поехали. Для начала научим наше приложение управлять iTunes и QuickTime Player, какие еще команды будет уметь выполнять приложения будет зависеть только от вашей фантазии.
Для начала в файле commands.php опишем обработку запросов и выполнение комманд. Приведу полный текст скрипта.
<?php if ($_GET['app'] == 'iTunes') { if ($_GET['cmd'] == 'Play') { $cmd = 'tell application "iTunes" to play'; } if ($_GET['cmd'] == 'Pause') { $cmd = 'tell application "iTunes" to pause'; } if ($_GET['cmd'] == 'NextSong') { $cmd = 'tell application "iTunes" to next track'; } if ($_GET['cmd'] == 'PrevSong') { $cmd = 'tell application "iTunes" to previous track'; } } if ($_GET['app'] == 'QuickTime') { if ($_GET['cmd'] == 'Play') { $cmd = 'tell application "QuickTime Player" to activate (play document 1)'; } if ($_GET['cmd'] == 'Pause') { $cmd = 'tell application "QuickTime Player" to activate (pause document 1)'; } if ($_GET['cmd'] == 'Fullscreen') { $cmd = 'tell application "QuickTime Player" to activate (present document 1 scale screen)'; } if ($_GET['cmd'] == 'Close') { $cmd = 'tell application "QuickTime Player" to activate (close document 1)'; } } exec('osascript -e \'' . $cmd . '\''); header('location: /remote/'); ?>Думаю тут все понятно. В зависимости от полученной команды выполняется определенный скрипт. Команды AppleScript будет выполнять через вызов утилиты osascript с помощью функции exec()
exec('osascript -e \'' . $cmd . '\'');Обработчик есть, теперь напишем страницу с которой мы собственно и будет всем управлять.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, user-scalable=no" /> <title>iRemote</title> <link rel="stylesheet" href="style.css" /> </head> <body> <h1>QuickTime</h1> <ul> <li><a href="commands.php?app=QuickTime&cmd=Play">Play</a></li> <li><a href="commands.php?app=QuickTime&cmd=Pause">Pause</a></li> <li><a href="commands.php?app=QuickTime&cmd=Fullscreen">F ullscreen</a></li> <li><a href="commands.php?app=QuickTime&cmd=Close">Close</a></li> </ul> <h1>iTunes</h1> <ul> <li><a href="commands.php?app=iTunes&cmd=Play">Play</a></li> <li><a href="commands.php?app=iTunes&cmd=Pause">Pause</a></li> <li><a href="commands.php?app=iTunes&cmd=NextSong">Next Song</a></li> <li><a href="commands.php?app=iTunes&cmd=PrevSong">Previo us Song</a></li> </ul> </body> </html>
<meta name="viewport" content="width=device-width, user-scalable=no" />указывает, что наша страница будет занимать всю ширину экрана и не будет изменять свои размеры. Для того чтобы придать нашей странице вид обычного приложения подключим style.css в котором пропишем несколько стилей для iPhone (стили взял с сайта apple, поэтому привожу как есть).
body { margin: 0; padding: 0; margin-left:10px; background-color: rgb(197,204,211); -webkit-text-size-adjust:none; } h1 { margin:0; padding-top:10px; padding-right:10px; padding-bottom:10px; padding-left:10px; font-size:17px; font-family: Helvetica; font-weight:bold; color: rgb(76,86,108); } ul { padding: 0; margin-top:0; margin-right:10px; margin-bottom:17px; font-size:17px; font-family: Helvetica; font-weight:bold; color:black; width: 300px; background-color: white; border-width: 1px; border-style:solid ; border-color:rgb(217,217,217); -webkit-border-radius: 8px; } li { list-style-type: none; border-top-width:1px; border-top-style:solid; border-top-color:rgb(217,217,217); padding-top:10px; padding-right:10px; padding-bottom:14px; padding-left:10px; } li:first-child { border-top:0; } a { display: block; padding-top: 8px; padding-right: 8px; padding-bottom: 12px; padding-left: 8px; margin-top: -8px; margin-right: -8px; margin-bottom: -12px; margin-left: -8px; text-decoration: none; color:black; }В итого на iPhone мы должны увидеть примерно следующее
Некоторые могли заметить, что рядом с заголовком iTunes выводится название текущее трека, для этого на страницу добавим пару строк
<h1>QuickTime - <?php echo exec('osascript -e \'tell application "QuickTime Player" to get the name of the document 1\'')?></h1>Этот код будет выводить название файла загруженного в QuickTime
:
<h1>iTunes - <?php echo exec('osascript -e \'tell application "iTunes" to get the name of the current track\'');?></h1>А этот выведет название текущего трека.
Вот мы и сделали наше веб приложение для Iphone'а. Спасибо за внимание.