代码之家  ›  专栏  ›  技术社区  ›  Thomaschaaf

通过(libpurple)messenger协议发送和接收消息

  •  4
  • Thomaschaaf  · 技术社区  · 15 年前

    我有一个想法,那就是要求我能够通过msn、icq、aim、skype等标准messenger协议发送和接收消息。。。

    我目前只熟悉PHP和Python,因此我喜欢一个可以从上述语言访问的库。我找到了phurple( http://sourceforge.net/projects/phurple/ )对于php和python紫色( http://developer.pidgin.im/wiki/PythonHowTo

    答案应该包括一个教程或示例实现和一个像样的文档。。pidgin.im实际上没有有用的教程。。

    另外,你也可以告诉我不同类型的实现,这样我就可以在现有icq、aim、msn等实现的基础上构建自己的类。

    举一个例子,说明如何连接到一个帐户(登录),然后发送一条消息,这将是最终的帮助!

    来吧,伙计们:)

    4 回复  |  直到 15 年前
        1
  •  11
  •   Isaiah    15 年前

    下面是如何连接到Pidgin DBus服务器。

    #!/usr/bin/env python
    import dbus
    
    bus = dbus.SessionBus()
    
    if "im.pidgin.purple.PurpleService" in bus.list_names():
        purple = bus.get_object("im.pidgin.purple.PurpleService",
                "/im/pidgin/purple/PurpleObject",
                "im.pidgin.purple.PurpleInterface")
    
        print "Connected to the pidgin DBus."
        for conv in purple.PurpleGetIms():
            purple.PurpleConvImSend(purple.PurpleConvIm(conv), "Ignore this message.")
    
    else:
        print "Could not find piding DBus service, make sure Pidgin is running."
    

    link .

    编辑: 重新添加到pidgin dev wiki的链接。它教会你我在上面发布的一切, 只需进一步向下滚动页面。 http://developer.pidgin.im/wiki/PythonHowTo

        2
  •  2
  •   jldupont    15 年前

        3
  •  1
  •   fernyb    15 年前

    如果从phurple解压文件,您会得到如下示例:

    <?php
      if(!extension_loaded('phurple')) {
      dl('phurple.' . PHP_SHLIB_SUFFIX);
      }
    
      class CustomPhurpleClient extends PhurpleClient {
        private $someVar;
        protected function initInternal() {
            $this->someVar = "Hello World";
        }
    
        protected function writeIM($conversation, $buddy, $message, $flags, $time) {
            if(PhurpleClient::MESSAGE_RECV == $flags) {
                printf( "(%s) %s %s: %s\n",
                            $conversation->getName() ? $conversation->getName() : $buddy->getName(),
                            date("H:i:s", $time),
                            is_object($buddy) ? $buddy->getAlias() : $buddy,
                            $message
                    );
            }
        }
    
        protected function onSignedOn($connection) {
            print $this->justForFun($this->someVar);
        }
    
        public function justForFun($param) {
            return "just for fun, the param is: $param";
        }
      } 
      // end Class CustomPhurpleClient
    
      // Example Code Below:
      try {
        $user_dir = "/tmp/phphurple-test";
        if(!file_exists($user_dir) || !is_dir($user_dir)) {
            mkdir($user_dir);
        }
    
        PhurpleClient::setUserDir($user_dir);
        PhurpleClient::setDebug(true);
        PhurpleClient::setUiId("TestUI");
    
        $client = CustomPhurpleClient::getInstance();
        $client->addAccount("msn://nick@hotmail.com:password@messenger.hotmail.com:1863");
        $client->connect();
    
        $client->runLoop();
      } catch (Exception $e) {
        echo "[Phurple]: " . $e->getMessage() . "\n";
        die();
      }
    ?>
    
        4
  •  0
  •   dusoft    15 年前

    我用 WebIcqLite: ICQ messages sender 对于ICQ协议。这很有效,而且这门课很容易理解。不过,我不知道其他协议。Phurple图书馆怎么了?