* nixシステムでPHPを使用してSkype APIにアクセスする

ずっと前に、Skype用の留守番電話またはボットを手に入れたいと思っていました。 Googleには何も見つかりませんでした。Ubuntuを使用していても、タスクは数回困難になりました。 そして、私はPHPしか知らないこと、そしてあまり良くないことを考えると、私の夢は非現実的になりました。



しかし最近、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システムで行いました。残りのシステムでの動作を保証することはできません。誰かがチェックしてくれれば嬉しいです。

どんなアイデアでも大歓迎です。

読んでくれてありがとう!



All Articles