Отправка и получение сообщений по протоколам (libpurple)
У меня была идея, которая потребовала бы от меня возможности отправлять и получать сообщения через стандартные протоколы обмена сообщениями, такие как msn, icq, aim, skype и т. Д.
В настоящее время я знаком только с PHP и Python и, таким образом, буду наслаждаться библиотекой, к которой я могу получить доступ с указанных языков. Я нашел phurple ( http://sourceforge.net/projects/phurple/) для php и python-purple ( http://developer.pidgin.im/wiki/PythonHowTo), которые, похоже, не актуальны, Что бы вы, ребята, предложили сделать? Моя цель - написать веб-приложение на расстоянии, например, meebo.com.
Ответ должен включать учебник или пример реализации и приличную документацию.. pidgin.im на самом деле не имеет полезного учебника..
В качестве альтернативы вы также можете просто сказать мне различные виды реализаций, чтобы я мог создать свой собственный класс из существующей реализации icq, aim, msn и т. д.
Примером того, как подключиться к учетной записи (логин) и затем отправить одно сообщение, будет отличная помощь!
Приходите, ребята:)
4 ответа
Вот как подключиться к серверу 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."
Не знаю, видели ли вы это, но вот официальное руководство по Python DBus: ссылка.
РЕДАКТИРОВАТЬ: повторно добавить ссылку на вики Pidgin Dev. Он научит вас всему, что я написал выше, просто прокрутите страницу вниз. http://developer.pidgin.im/wiki/PythonHowTo
Хорошей идеей будет пройти через интерфейс DBus: Pidgin (фиолетовый) полностью поддерживает его, а библиотека интерфейса DBus для Python достаточно стабильна.
Если вы распакуете файл из 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();
}
?>
Я использую WebIcqLite: отправитель сообщений ICQ для протокола ICQ. Это работает, и класс легко понять. Я не знаю о других протоколах, хотя. Что не так с библиотекой Phurple?