1. Каким образом можно реализовать передачу данных скрипту? Наверное его нужно поднимать в качестве демона, что бы он слушал определённый порт и реагировать на поступающую туда информацию. Но я в этом совсем не бум-бум, по этому даже пока не знаю в какую сторону гуглить, так что буду благодарен за советы.
2. В общем то пока самый главный вопрос - пока нчал так сказать “с конца”: отправка сообщений пользователям. Взял twisted, покрутил, поглядел пример, в итоге есть небольшой кусок кода, который отправляет нужное сообщение на нужный номер аськи, так что осталось только передать в него данные, но - пока он реагирует только на сообщение на его номер icq (т.е. работа в режиме отвечающего бота, как описано 100500 раз в гуглах), а вот как его “в ручную” заставить отправить сообщение я что то понять не могу. Где и как вызывает функция receiveMessage() для отправки сообщения и какие параметры туда передаются я, пока, понять не могу (я так подозреваю что всё это тянется из нутров самого twisted, по этому как с этим работать - я не знаю).
Прошу сильно не пинать ножками, это для меня первая практическая работа на питоне.
Для наглядности - код:
#!/usr/bin/env python
# -*- coding: utf8 -*-
try:
from twisted.words.protocols import oscar
from twisted.internet import protocol, reactor
except:
print 'Import Error!!!\n'
import os
import sys
import datetime
SN = '653470894'
PASS = '###'
hostport = ('login.icq.com', 5238)
icqMode = 1
SendTo = '163797502'
msg = 'test message'
class Bot(oscar.BOSConnection):
capabilities = [oscar.CAP_CHAT]
def initDone(self):
print "Connection (%s) to server: %s:%s\n" % (SN, hostport[0], hostport[1])
self.requestSelfInfo().addCallback(self.gotSelfInfo)
self.requestSSI().addCallback(self.gotBuddyList)
def gotSelfInfo(self, user):
self.name = user.name
def gotBuddyList(self, l):
self.activateSSI()
self.setProfile("""ICQ Gateway by KorP""")
self.setIdleTime(0)
self.clientReady()
def receiveMessage(self, user, multiparts, flags):
print datetime.datetime.now()
print user
self.sendMessage(SendTo, msg)
class BotAuth(oscar.OscarAuthenticator):
print 'Start ICQ connect\n'
print 'pid:', os.getpid()
BOSClass = Bot
if __name__ == "__main__":
try:
protocol.ClientCreator(reactor, BotAuth, SN, PASS, icq=icqMode).connectTCP(*hostport)
reactor.run()
except Exception, err:
print 'Error in Main:\n',err
time.sleep(30)
os.execl(sys.executable, sys.executable, sys.argv[0])