Су­ще­ству­ет два спосо­ба вза­и­мо­дей­ствия со скай­пом. Пер­вый и основ­ной - SkypeKit. Это на­бор из би­нар­но­го ядра, за­бот­ли­во со­бран­но­го мейн­тей­нером для всех ОС, и бин­дин­гов к не­му на пи­то­не, джаве и плю­сах. Все это до­ступ­но по под­писке, ко­то­рая сто­ит 5 дол­ла­ров разо­вым пла­те­жом и по­став­ляет­ся со скуд­ной до­ку­мен­та­ци­ей, ко­то­рая пред­став­ляет со­бой ско­рее опи­са­ние API (нам не при­вы­кать к Epydoc, ага), да и то не всех ме­то­дов и свойств. За­то в на­груз­ку вы по­лу­чи­те с де­ся­ток разных преду­пре­жде­ний о се­крет­но­сти и кон­фи­ден­ци­аль­но­сти по­лу­чен­ных файлов. А вот ка­че­ство ре­а­ли­за­ции очень хро­ма­ет, ваш по­кор­ный слу­га так и не смог найти тот event, ко­то­рый под­ни­ма­ет­ся при по­лу­че­ния запро­са на ав­то­ри­за­цию. В ин­тер­не­те, что ха­рак­тер­но, ин­фор­ма­ции то­же су­щие кру­пи­цы и, в большинстве сво­ем, по бин­дин­гу на C++, но, разобрав­шись со всем необ­хо­ди­мым функ­ци­о­на­лом ме­то­дом проб и оши­бок, вы по­лу­чи­те до­ступ к аб­со­лют­но всем функ­ци­ям Skype. Ну и для запус­ка би­нар­ни­ка ядра из SkypeKit SDK в той же Linux вер­сии ни­ка­кие ик­сы не нуж­ны, что то­же за­мет­ное пре­иму­ще­ство перед вто­рым спосо­бом - Skype API. Этот ва­ри­ант пред­став­ляет из се­бя на­бор про­то­ко­лов вза­и­мо­дей­ствия с скай­по­вым гу­ем че­рез Skype.framework для MacOS, X11 и DBUS для Linux, COM-ин­тер­фейс на Windows. Ос­нов­ные ми­ну­сы: острая необ­хо­ди­мость в запу­щен­ном кли­ен­те, ко­то­рый жрет ре­сур­сы и тре­бу­ет на­личия ик­сов, ну и от­но­си­тель­ная глюч­ность, срав­ни­тель­но с пер­вым ва­ри­ан­том. 

Хо­дят без­дар­ные слу­хи, что в ско­ром вре­ме­ни мы по­лу­чим еще и тре­тий способ - на­тив­ная биб­лио­тека без ка­ких-ли­бо ли­ми­тов. По­доб­ные раз­го­во­ры на­ча­лись по­сле деоб­фус­ка­ции би­нар­ни­ка скайпа и про­дол­жа­ют­ся по ме­ре на­пол­не­ния ре­по­зи­то­рия https://github.com/skypeopensource/. Хо­тя, меж­ду на­ми, де­воч­ка­ми, на­пол­ня­ет­ся он ко­дом та­ко­го низ­ко­го ка­че­ства, что ме­ня одо­ле­ва­ют со­мне­ния, бу­дет ли до­ве­ден проект до ра­бо­че­го об­раз­ца.

Я ре­шил ис­поль­зо­вать SkypeAPI. Пре­жде всего, я во­об­ще не знал о су­ще­ство­ва­нии SkypeKit, вот та­кой вот стыд­ный про­кол. Впро­чем, оно и к луч­ше­му, мень­ше вре­ме­ни ушло на на­пи­са­ние то­го, что не ра­бо­та­ло. Ана­ло­гов необ­хо­ди­мых мне функ­ций, до­ступ­ных в ста­рой пи­то­новской биб­лио­тек Skype4Py, в SDK про­сто про­сто не ока­за­лось. До­пус­каю, что я про­сто пло­хо ис­кал, но тем не ме­нее. Бо­та мы с ва­ми бу­дем пи­сать не про­сто­го, а ум­ного, ко­то­рый смо­жет под­дер­жи­вать эле­мен­тар­ный раз­го­вор, ну или да­же по­слать. Тут нам на по­мощь при­хо­дит AIML - XML-произ­вод­ный язык раз­мет­ки ло­ги­ки бо­тов в сти­ле "по­бол­тать". Со­всем удач­но на­шлась и биб­лио­тека PyAIML, ко­то­рая сде­ла­ла со­зда­ние ум­ного болт­ли­во­го ро­бо­та де­лом трех строк ко­да. Для на­ча­ла, нам нуж­ны мозги. 

Моз­ги мож­но взять в мяс­ном ма­га­зи­не, сту­шить их вме­сте с цвет­ной капу­стой или спар­же­вой фа­со­лью, по­дать с бе­лым ви­ном, за­бив на про­дол­же­ние это­го по­ста. Если та­кие ку­ли­нар­ные изыс­ки вас не пре­льща­ют, то откры­вайте Google Code, ку­да до­брые лю­ди вы­ло­жи­ли и до сих пор про­дол­жа­ют коми­тить большой жир­ный сет aiml-ок, ко­то­рые по­мо­гут ма­ши­не на­чать ду­мать и чув­ство­вать. Пре­жде чем про­дол­жить, нуж­но пере­ве­сти мозги из XML раз­мет­ки в би­нар­ный фор­мат, ина­че каж­дый раз ваш бот бу­дет запус­кать­ся по 5-10 ми­нут. Все это де­ла­ет­ся с по­мо­щью та­ко­го про­сто­го ко­да на Python. Будь­те го­то­вы к ис­прав­ле­ни­ям файлов свои­ми соб­ствен­ны­ми ру­ка­ми, мно­гие из них про­сто не про­хо­дят ва­ли­да­цию и пар­сер от­ва­ли­ва­ет­ся с пе­чаль­ны­ми но­во­стям. Обыч­но все пробле­мы ли­бо в не­за­кры­том те­ге, ли­бо в не­экра­ни­ро­ван­ном спец­сим­во­ле, или точ­ке гу­ля­щей. Про­цесс это уто­ми­тель­ный и не­спеш­ный, но во всем есть свои плю­сы: по ме­ре ре­дак­ти­ро­ва­ния вы по­зна­коми­тесь с син­так­си­сом AIML.

На этом мож­но бы­ло бы и за­кон­чить, 3 стро­ки ко­да и ваш бот научил­ся го­во­рить и от­ве­чать на по­лу­чен­ные со­об­ще­ния.  Но нам все ма­ло. Да­вайте при­де­ла­ем воз­мож­ность взять труб­ку и по­го­во­рить го­ло­сом с за­де­лом на кросс­плат­фор­мен­ность, све­дя за­ви­си­мо­сти и слож­ность ко­да к ми­ни­му­му. Для это­го мы бу­дем ис­поль­зо­вать 2 би­нар­ни­ка, ко­то­рые со­би­ра­ют­ся под все­ми си­сте­ма­ми, и 2 нео­фи­ци­аль­ных APIш­ки от Google. Вни­ма­ние, код и опи­са­ние предо­став­ле­ны ис­клю­чи­тель­но для озна­ком­ле­ния. Я на­сто­я­тель­но не ре­ко­мен­дую на­ру­шать ли­цен­зионное со­гла­ше­ние. Помни, каж­дый раз, когда ты от­прав­ляешь запрос по этим ссыл­кам, Эрик Шмидт уби­ва­ет ко­тен­ка. Нуж­но бы­ло на­пи­сать, уже бы­ли пре­це­ден­ты. Вер­нем­ся к на­шим API. Пер­вый - TTS, ко­то­рый ис­поль­зу­ет­ся в Google Translate и пере­во­дит текст в MP3. Как это ра­бо­та­ет, мо­же­те по­смот­реть в ко­де. Впро­чем, ра­но ра­до­вать­ся - наш Skype не пой­мет, если ему в Output ка­нал мы бу­дем за­со­вы­вать не теп­лый лам­по­вый WAV (16Khz, 256kb/s, Mono), а ужа­тый MPEG. Я пы­тал­ся де­ко­ди­ро­вать с по­мо­щью ме­диа­ком­бай­на ffmpeg, но Скайп наот­рез отка­зы­вал­ся по­ни­мать по­лу­чен­ный файл. Имен­но поэто­му, мы и бу­дем ис­поль­зо­вать mpg123, ко­то­рый очень бы­стро справ­ляет­ся с по­став­лен­ной за­да­чей. Вот так у нас и по­лу­чи­лась функ­ция пере­во­да тек­ста в речь, ко­то­рую вы мо­же­те ис­поль­зо­вать в лю­бом проек­те. Идем дальше - за­пи­сы­ва­ем 10 се­кунд ре­чи на­ше­го со­бе­сед­ни­ка и тут бы не по­ме­ша­ло пере­ве­сти ее в текст. Нам опять по­мо­жет Google и API, выдран­ное из Хро­ми­у­ма, ко­то­рое как раз этим и за­ни­ма­ет­ся. Тут воз­ни­кает сле­ду­ю­щая пробле­ма -  отда­вать нуж­но не WAV, a FLAC. К сча­стью, есть од­но­имен­ный проект на сурсфор­же, ко­то­рый ма­ло то­го, что кросс­плат­фор­мен­ный, так еще и бы­стрый, как во­об­ра­же­ние школь­ни­ка в жен­ской раз­де­вал­ке.

Итог запус­кает­ся вме­сте с скай­повским GUI в ка­ком-то Xvfb или да­же в Xvnc, что пред­по­чти­тель­ней, так как вам нуж­но бу­дет под­твердить пра­ва до­сту­па на­шей про­грам­мы к API кли­ком мы­ши. В ка­че­стве про­верки мо­же­те на­пи­сать или по­зво­нить на ID alice.mindcollapse. Она бу­дет до­ступ­на не круг­ло­су­точ­но. Если оста­ет­ся мол­ча­ли­вой - зна­чит ушла спать вме­сте со мной и от­ве­тит, глав­ное, ото­шли­те ей запрос на ав­то­ри­за­цию. Ах да, в блог, сле­дуя мо­де, вер­ну­лись со­ци­аль­ные кноп­ки. Те­перь все в ва­ших ру­ках: сто­ит ли мне пи­сать о сво­ем пер­вом сек­су­аль­ном опы­те со сле­пой уса­той про­сти­ту­кой, или расска­зы­вать о на­пи­са­нии мо­ду­ля ядра для Embedded Linux. Про­сто перейди­те на веб вер­сию по­ста и щел­к­ни­те ле­ни­во мыш­кой, по­ста­вив +1 или расска­зав бра­тю­ням. Ван лов, па­цан­ва.