Делаем из 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'а. Спасибо за внимание.