Haciendo hablar a Twitter
Hace tiempo que tenia pendiente hacer un mashup de la librería javascript de Twitter, Google Translate y las nuevas oportunidades de HTML5. Pues al final me he animado y no ha sido muy complicado: por un lado detectar el idioma del tweet, por otro lanzar la ejecución del el audio, y por ultimo integrar estas dos funciones el la librería widget.js que ofrece Twitter.
Esta es una primera aproximación, que puede ser mejorada considerablemente. A continuación el código y ejemplo (esta probado que funciona en chrome).
El widget.js modificado se puede descargar aqui.
<br />
<html><br />
<head><br />
</head><br />
<body><br />
<script type="text/javascript" src="http://www.google.com/jsapi?key=AIzaSyBMhwGvMwDbGgXIVU4SI_aVy7AjeGFnorw"></script><br />
<script type="text/javascript"><br />
google.load("language", "1");</p>
<p> var auxtest = "";<br />
var elapsedtww = 0;</p>
<p> function cleanHtml(html){<br />
var result = html.replace(/<.*?>(.*?)<\/.*?>/g, function(a,s){return s;});<br />
var result2 = result.replace(/#(.*?)/g, function(a,s){return s;});<br />
var result3 = result2.replace(/@(.*?)/g, function(a,s){return s;});<br />
return cleanLinks(result3);<br />
}</p>
<p> function cleanLinks(text){<br />
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;<br />
return text.replace(exp,"");<br />
}</p>
<p> function sleep(milliSeconds){<br />
var startTime = new Date().getTime(); // get the current time<br />
while (new Date().getTime() < startTime + milliSeconds); // hog cpu<br />
}</p>
<p> function submitGtext(text) {<br />
while (elapsedtww > 0){<br />
sleep(1000);<br />
}<br />
elapsedtww = 1;<br />
auxtest = cleanHtml(text);<br />
google.language.detect(auxtest, playVoice);<br />
return false;<br />
}</p>
<p> function playVoice(result){<br />
var langcode = ‘en’;<br />
if (result.language) {<br />
var language = ‘unnamed’;<br />
for (l in google.language.Languages) {<br />
if (google.language.Languages[l] == result.language) {<br />
language = l;<br />
break;<br />
}<br />
}</p>
<p> if(language == "SPANISH"){<br />
langcode = ‘es’;<br />
}<br />
if(language == "PORTUGUESE"){<br />
langcode = ‘pt’;<br />
}<br />
if(language == "GERMAN"){<br />
langcode = ‘de’;<br />
}<br />
}<br />
var audio_file = document.getElementById(‘voice’);<br />
while(audio_file.currentTime < audio_file.duration && audio_file.currentTime != 0){<br />
sleep(100);<br />
}<br />
audio_file.src = ‘http://translate.google.com/translate_tts?q=’+escape(html_entity_decode(auxtest))+’&tl=’+langcode;<br />
document.getElementById(‘audiopaths’).value = document.getElementById(‘audiopaths’).value +"\r\n\r\n"+html_entity_decode(auxtest);<br />
audio_file.load();<br />
audio_file.play();<br />
elapsedtww = 0;<br />
}</p>
<p> function html_entity_decode(str)<br />
{<br />
try<br />
{<br />
var tarea=document.createElement(‘textarea’);<br />
tarea.innerHTML = str; return tarea.value;<br />
tarea.parentNode.removeChild(tarea);<br />
}<br />
catch(e)<br />
{<br />
//for IE add <div id="htmlconverter" style="display:none;"></div> to the page<br />
document.getElementById("htmlconverter").innerHTML = ‘<textarea id="innerConverter">’ + str + ‘</textarea>’;<br />
var content = document.getElementById("innerConverter").value;<br />
document.getElementById("htmlconverter").innerHTML = "";<br />
return content;<br />
}<br />
}<br />
</script><br />
<script src="http://www.ikeralbeniz.net/wp-content/uploads/2010/12/widget.js"></script><br />
<script><br />
new TWTR.Widget({<br />
version: 2,<br />
type: ‘search’,<br />
search: ‘meneame_net’,<br />
interval: 9000,<br />
title: ‘Test’,<br />
subject: ‘Test de GoogleTranslate + twiiter’,<br />
width: 250,<br />
height: 300,<br />
theme: {<br />
shell: {<br />
background: ‘#8ec1da’,<br />
color: ‘#ffffff’<br />
},<br />
tweets: {<br />
background: ‘#ffffff’,<br />
color: ‘#444444′,<br />
links: ‘#1985b5′<br />
}<br />
},<br />
features: {<br />
scrollbar: false,<br />
loop: true,<br />
live: true,<br />
hashtags: true,<br />
timestamp: true,<br />
avatars: true,<br />
toptweets: true,<br />
behavior: ‘default’<br />
}<br />
}).render().start();<br />
</script><br />
<audio id="voice" src=""><br />
<h3>Este ejemplo solo funciona con navegadores que soportan HTML5 como CHROME</h3><br />
</audio><br />
<body><br />
</html><br />
Este ejemplo solo funciona con navegadores que soportan HTML5 como CHROME