{"id":613,"date":"2005-03-17T15:30:00","date_gmt":"2005-03-17T22:30:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=613"},"modified":"2005-03-17T15:30:00","modified_gmt":"2005-03-17T22:30:00","slug":"echando-codigo-%c2%bfcomo-mandar-mensajes-a-mi-cuenta-de-yahoo-messenger-desde-java","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2005\/03\/17\/echando-codigo-%c2%bfcomo-mandar-mensajes-a-mi-cuenta-de-yahoo-messenger-desde-java\/","title":{"rendered":"Echando c\u00f3digo: \u00bfComo mandar mensajes a mi cuenta de Yahoo Messenger desde Java?"},"content":{"rendered":"<p><a href=\"http:\/\/jymsg9.sourceforge.net\/\"><img decoding=\"async\" src=\"http:\/\/jymsg9.sourceforge.net\/jYMSG-logo.gif\" \/><\/a><\/p>\n<p>Si bien yo soy un fan\u00e1tico de el protocolo <a href=\"http:\/\/www.jabber.org\/\">Jabber<\/a>, por ser abierto, tengo que admitir que lo que uso en el trabajo y con mi familia en <a href=\"http:\/\/messenger.yahoo.com\/\">Yahoo Messenger<\/a>; Si bien el cliente de Linux es una porquer\u00eda, eso lo compenso utilizando un cliente Open Source llamado <a href=\"http:\/\/gaim.sourceforge.net\/\">Gaim<\/a>, \u00a1el cual es arrechisimo!<\/p>\n<p>Una de mis tareas como SA es monitorear aplicaciones en tiempo real y algo que he querido hacer desde hace tiempo es enviarme los mensajes de ciertas bitacoras (como \/var\/log\/messages) a mi sesi\u00f3n de messenger. Es una aplicaci\u00f3n perfecta, ya que el cliente ya est\u00e1 escrito, s\u00f3lo tengo que redireccionar la salida a mi cliente y listo.<\/p>\n<p>Como buen fanatico de Java, me consegu\u00ed en Source Forge una librer\u00eda llamada <a href=\"http:\/\/jymsg9.sourceforge.net\/\">JYMGS<\/a> la cual habla el protocolo de Yahoo Messenger utilizando Java. Ahora la pregunta era: \u00bfQue t\u00e1n f\u00e1cil es de usar?<\/p>\n<p>Bueno, me tom\u00f3 s\u00f3lo dos clases hacer un &#8220;HelloWorld&#8221; en Java. Primero, <a href=\"http:\/\/jymsg9.sourceforge.net\/docs\/ymsg\/network\/Session.html\">por razones de abstraci\u00f3n de el API,<\/a> necesito un listener el cual va a reaccionar a los eventos de Yahoo (como desconexi\u00f3n, conexiones, etc). La implementaci\u00f3n m\u00e1s sencilla es simplemente esta (heredo de un &#8216;Adaptor&#8217;):<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #666699; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">import<\/span> ymsg.network.event.SessionAdapter;<br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> YahooSession <span class=\"syntax8\">extends<\/span> SessionAdapter <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">   3:<\/span>        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Empty<\/span><br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Y luego la clase que hace las llamadas:<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #666699; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">import<\/span> ymsg.network.Session;<br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax9\">import<\/span> ymsg.network.StatusConstants;<br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax9\">import<\/span> ymsg.network.event.SessionAdapter;<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">class<\/span> YahooPing <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\">   5:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">void<\/span> main (String [] args) <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">   6:<\/span>                Session session <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\">   7:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">   8:<\/span>                        session <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Session<\/span>();<br \/><span class=\"gutter\">   9:<\/span>                        session.<span class=\"syntax6\">addSessionListener<\/span>(<span class=\"syntax8\">new<\/span> <span class=\"syntax6\">YahooSession<\/span>());<br \/><span class=\"gutterH\">  10:<\/span>                        session.<span class=\"syntax6\">setStatus<\/span>(StatusConstants.STATUS_INVISIBLE);<br \/><span class=\"gutter\">  11:<\/span>                        session.<span class=\"syntax6\">login<\/span>(args[<span class=\"syntax5\">0<\/span>], args[<span class=\"syntax5\">1<\/span>]);<br \/><span class=\"gutter\">  12:<\/span>                        <span class=\"syntax8\">if<\/span> (session.<span class=\"syntax6\">getSessionStatus<\/span>() <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> StatusConstants.MESSAGING) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  13:<\/span>                                session.<span class=\"syntax6\">sendMessage<\/span>(args[<span class=\"syntax5\">2<\/span>], args[<span class=\"syntax5\">3<\/span>]);<br \/><span class=\"gutter\">  14:<\/span>                                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\">  15:<\/span>                                        Thread.<span class=\"syntax6\">sleep<\/span>(<span class=\"syntax5\">5<\/span><span class=\"syntax18\">*<\/span><span class=\"syntax5\">1000<\/span>);<br \/><span class=\"gutter\">  16:<\/span>                                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span>(InterruptedException e) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  17:<\/span>                                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Empty<\/span><br \/><span class=\"gutter\">  18:<\/span>                                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  19:<\/span>                                session.<span class=\"syntax6\">logout<\/span>();<br \/><span class=\"gutterH\">  20:<\/span>                        <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">else<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  21:<\/span>                                session.<span class=\"syntax6\">reset<\/span>();<br \/><span class=\"gutter\">  22:<\/span>                        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  23:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span>(Exception e) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  24:<\/span>                        <span class=\"syntax8\">if<\/span> (session <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\">  25:<\/span>                                session.<span class=\"syntax6\">reset<\/span>();<br \/><span class=\"gutter\">  26:<\/span>                        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  27:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  28:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  29:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Aqu\u00ed les muestro como mandar un mensaje como el usuario &#8216;robot&#8217; a el usuario &#8216;angelnegro&#8217;:<\/p>\n<blockquote><p>[josevnz@XXX YahooPing]$ <span style=\"color: rgb(0, 153, 0);\">java YahooPing robota password angelnegro &#8220;\u00a1Hola bicho!&#8221;<\/span><\/p><\/blockquote>\n<p>Es muy f\u00e1cil de usar, dentro de poco sacar\u00e9 un programita que me permita hacer lo que estoy buscando \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si bien yo soy un fan\u00e1tico de el protocolo Jabber, por ser abierto, tengo que admitir que lo que uso en el trabajo y con mi familia en Yahoo Messenger; Si bien el cliente de Linux es una porquer\u00eda, eso lo compenso utilizando un cliente Open Source llamado Gaim, \u00a1el cual es arrechisimo! Una de <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2005\/03\/17\/echando-codigo-%c2%bfcomo-mandar-mensajes-a-mi-cuenta-de-yahoo-messenger-desde-java\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/613"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=613"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/613\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}