しかし最近、Skype APIの公式ドキュメントを見ると、「D-BUSメッセージング」に気づきました。なぜ以前に注意を払わなかったのかわかりません。 すべてを処理した後、私は最終的に私が長い間欲しかったことをしました! PHPでSkype APIにアクセスできました。 これについては私の記事で説明したいと思います。
dbus-phpをインストールするには、php5-devパッケージに含まれるphpizeが必要です。
sudo apt-get install php5-dev
次のコマンドを実行してphp-pearをインストールします。
sudo apt-get install php-pear pear install PEAR
phpのdbus拡張機能をインストールして、依存関係を事前にインストールします(makeがインストールされている必要があります。インストールされていない場合、dbus-betaのインストールは失敗します!)。
sudo apt-get install libdbus-1-dev libxml2-dev pecl install dbus-beta
拡張機能のダウンロードをPHP設定に追加します。
echo -e "; configuration for php DBus module\nextension=dbus.so"| sudo tee -a /etc/php5/conf.d/dbus.ini
拡張機能が動作するかどうかを確認し、ターミナルでphp -iコマンドを入力してそこを見つけます。
dbus Dbus support => enabled Version => 0.1.0
見つけた? いいね! 続行できます!
見つかりませんでしたか? さて、すべてを繰り返し、エラーを見つけ、修正して読み続ければ、すべてがうまくいきます。
それだけです! これで、仕事に必要なものはすべて揃いました。
phpコード自体に取りかかりましょう。
最も単純で最も重要なのは、Skypeに接続してAPIへのアクセスをリクエストすることです。次のようにします。
$dbus = new Dbus(Dbus::BUS_SESSION, true); // Dbus $n = $dbus->createProxy('com.Skype.API', '/com/Skype', 'com.Skype.API'); // $n -> Invoke('NAME PHP'); // , $n -> Invoke('PROTOCOL 8'); //
Invoke()は、スカイプに指示を送信するための主要な方法です。
それでは、Skype通知を受信するスクリプトを教えましょう。
// class phpSkype { public static function notify ($notify) { echo $notify."\n"; } } $dbus -> registerObject('/com/Skype/Client', 'com.Skype.API.Client', 'phpSkype'); // while(1) { $s = $dbus -> waitLoop(1); }
このスクリプトを実行すると、次のようなすべてのskype通知を確認できます。
CONNSTATUS ONLINE CURRENTUSERHANDLE *my_user* USERSTATUS DND CHATMESSAGE 5150665 STATUS READ CHATMESSAGE 5149961 STATUS READ CHATMESSAGE 5149993 STATUS READ CHATMESSAGE 5150025 STATUS READ CHATMESSAGE 5150057 STATUS READ CHATMESSAGE 5150697 STATUS SENDING CHAT #zaidin16/$e00fc2f75170ec9e ACTIVITY_TIMESTAMP 1345401315 CHATMESSAGE 5150697 STATUS SENT
phpSkypeクラスを補完し、メッセージを処理して応答するようにスクリプトをトレーニングします。これは私が得たものです。
<?php $dbus = new Dbus(Dbus::BUS_SESSION, true); // Dbus $n = $dbus->createProxy('com.Skype.API', '/com/Skype', 'com.Skype.API'); // $n -> Invoke('NAME PHP'); // , $n -> Invoke('PROTOCOL 8'); // class phpSkype { /* * . * , , * preg_match('/RECEIVED/', $notify) */ public static function notify ($notify) { if (preg_match('#RECEIVED|SENT#Uis', $notify)) { $message_id = explode(' ', $notify); bot::get_details($message_id[1]); // } } } class bot { private static $last_id; public static function get_details ($message_id) { global $n; $ch = $n -> Invoke('GET CHATMESSAGE '.$message_id.' CHATNAME'); // id , $mess = $n -> Invoke('GET CHATMESSAGE '.$message_id.' BODY'); // $aut = $n -> Invoke('GET CHATMESSAGE '.$message_id.' FROM_DISPNAME'); // /* * , , . * : , id . */ $author = explode('FROM_DISPNAME ', $aut); $chat = explode('CHATNAME ', $ch); $message = explode('BODY ', $mess); echo $author[1].': '.$message[1]."\n"; // /* * , , - * "!". */ if ($message[1][0] == '!') { self::reply($chat[1], $message[1], $message_id); } } public function reply ($chat, $message, $id) { global $n; /* * , id , , , * "!test" , * , . - id * , , id , . */ self::$last_id = $message; if (self::$last_id <= $message) { switch ($message) { case '!test': $reply = 'It\'s work!'; break; case '!help': $reply = ', '; break; default: $reply = ' !help'; break; } if ($reply != '') $n -> Invoke('CHATMESSAGE '.$chat.' '.$reply); // } else { echo ' !'."\n"; } } } $dbus -> registerObject('/com/Skype/Client', 'com.Skype.API.Client', 'phpSkype'); // while(1) { $s = $dbus -> waitLoop(1); } ?>
これで、スクリプトは特定のメッセージに応答できるようになり、少し変更すると、すべてのメッセージに応答できるようになります。 もしあなたが自分のコンピュータでホストされている場合、またはローカルホストとホスト上のスクリプトの束を介して、サイトに面白い何かを実装することができます。これはあなたが思いつく方法です。
Invoke()メソッドを介して利用可能なコマンドの詳細なリストは、 ここにあります 。
また、[Microsoftのアクションに関連しない]ソースコードとより機能的なスクリプト。
これはすべてUbuntu 12.04 LTSシステムで行いました。残りのシステムでの動作を保証することはできません。誰かがチェックしてくれれば嬉しいです。
どんなアイデアでも大歓迎です。
読んでくれてありがとう!