<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bitácora de Vuelo (Publicaciones sobre scripts)</title><link>http://blog.taniquetil.com.ar/</link><description></description><atom:link href="http://blog.taniquetil.com.ar/categories/scripts.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2023 &lt;a href="mailto:facundo@taniquetil.com.ar"&gt;Facundo Batista&lt;/a&gt; CC BY-NC-SA</copyright><lastBuildDate>Mon, 29 May 2023 18:51:53 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Numeración de los contactos del teléfono</title><link>http://blog.taniquetil.com.ar/posts/0802/</link><dc:creator>Facundo Batista</dc:creator><description>&lt;p&gt;Hace rato me pasaba que cuando recibía llamadas en el celular, en la mayoría (no todos) de los casos me mostraba el número que me llamaba, pero no el contacto correspondiente (teniendo cargado ese número en mi lista de contactos, claro).&lt;/p&gt;
&lt;p&gt;El otro día me pasó nuevamente, y me &lt;a class="reference external" href="https://twitter.com/facundobatista/status/1221788401667649537"&gt;quejé públicamente&lt;/a&gt;, y me sugirieron que podía ser por la forma en que estaba anotado el número.&lt;/p&gt;
&lt;p&gt;Yo había pensado en eso, pero como a los números los tenía cargado "bien" (entendiéndose por "bien" a lo que indica el &lt;a class="reference external" href="https://www.enacom.gob.ar/numeracion_p136"&gt;PFNN&lt;/a&gt;), pensé que era otra cosa. Pero en ese hilo de Twitter me sugirieron una forma de anotar el número, que a priori no tiene sentido porque tenía números "de marcado" (como el 15, o el +, que no forman realmente parte del número), pero decían que funcionaba.&lt;/p&gt;
&lt;p&gt;Hice varios experimentos y en efecto, para que el teléfono me reconociera el número entrante, tenía que escribirlo de formas particulares. Probé casi todo, y al final declaré ganador a los formatos &lt;code class="docutils literal"&gt;+54 9 PFNN&lt;/code&gt; (para celulares) y &lt;code class="docutils literal"&gt;+54 PFNN&lt;/code&gt; (para el resto), siendo PFNN el número "real sin detalles de marcado", y esos obviamente para numeración de Argentina.&lt;/p&gt;
&lt;p&gt;Con ese formato tengo las ventajas de que el teléfono me reconoce el contacto del número entrante, y que al mismo tiempo yo puedo usar ese número para llamar al contacto, estando dentro o afuera del país.&lt;/p&gt;
&lt;img alt="Números, formas de marcado, formatos..." src="http://blog.taniquetil.com.ar/images/celunros-formatos.jpeg"&gt;
&lt;p&gt;¿El problema? Obvio que no iba a corregir todos mis contactos &lt;em&gt;a mano&lt;/em&gt;. Como los contactos del teléfono los tengo en una cuenta de Google, decidí hacer un pequeño script que lo haga automáticamente, no sin cierto pesar porque las APIs de Google dejan mucho que desear.&lt;/p&gt;
&lt;p&gt;Bah, no es que las APIs en sí sean malas. A veces son complicadas o rebuscadas, pero no más. El inconveniente es que son muchas, van cambiando con el tiempo, y la mayoría de la documentación es pobre, está desactualizada, tienen ejemplos que no funcionan, etc.&lt;/p&gt;
&lt;p&gt;Pero me puse, y luego de revisar mil páginas, pelearme un poco, leer código fuente, probar distintas alternativas, y eso, terminé haciendo &lt;a class="reference external" href="http://taniquetil.com.ar/homedevel/devel/contacts_fixer.py"&gt;este programín&lt;/a&gt; que efectivamente baja toda la info de mis contactos, procesa los números de teléfono, y cuando corresponde los vuelve a grabar &lt;em&gt;en la nube&lt;/em&gt;.&lt;/p&gt;
&lt;img alt="Regla número 1: evitar en lo posible laburar a mano" src="http://blog.taniquetil.com.ar/images/celunros-automatizar.jpeg"&gt;
&lt;p&gt;Péguenle una mirada al código ese, y pruébenlo con el cuidado correspondiente, pero debería funcionar. Les dejo algunos consejos con respecto a esta API de contactos en particular, por si quieren hacer algo parecido...&lt;/p&gt;
&lt;p&gt;Antes que nada, vayan &lt;a class="reference external" href="https://developers.google.com/people/api/rest"&gt;a esta versión&lt;/a&gt;, que ya autentica con OAuth, porque la forma vieja (con usuario y clave) ya está apagada. Van a tener que &lt;a class="reference external" href="https://console.developers.google.com/start/api?id=people.googleapis.com&amp;amp;credential=client_key"&gt;crear un proyecto&lt;/a&gt;, y poner los &lt;code class="docutils literal"&gt;client_id&lt;/code&gt; y &lt;code class="docutils literal"&gt;client_secret&lt;/code&gt; correspondientes en el script, luego la primera vez que lo ejecuten van a tener que darle permisos a través del navegador (es bastante automático, no tienen que hacer nada raro), y las próximas veces va a reusar esos permisos.&lt;/p&gt;
&lt;p&gt;Tengan en cuenta que ese permiso es en función del &lt;code class="docutils literal"&gt;scope&lt;/code&gt; que elijan (sólo lectura, que es una buena forma de empezar teniendo la seguridad que no van a romper nada, o lectura/escritura). Si autentican con un &lt;em&gt;scope&lt;/em&gt; y luego lo cambian, borren el &lt;code class="docutils literal"&gt;auth_info.dat&lt;/code&gt; así el script autentica nuevamente con el &lt;em&gt;scope&lt;/em&gt; cambiado.&lt;/p&gt;
&lt;p&gt;Entonces, les decía que &lt;a class="reference external" href="https://developers.google.com/people/api/rest"&gt;la API está descripta acá&lt;/a&gt;, pero está &lt;a class="reference external" href="https://developers.google.com/people"&gt;contada de forma más genérica acá&lt;/a&gt;. Ojo que faltan ejemplos de Python, y lo que muestra de "Protocolo" y de "Java" no se corresponden entre sí.&lt;/p&gt;
&lt;p&gt;En ese sentido me sirvió mucho &lt;a class="reference external" href="http://googleapis.github.io/google-api-python-client/docs/dyn/people_v1.html"&gt;esta referencia de la API a nivel Python&lt;/a&gt;. Y ojo con los ejemplos que hay por ahí, incluso los más oficiales y actualizados que encontré tenían errores en los &lt;em&gt;imports&lt;/em&gt; o en las funciones que llamaban.&lt;/p&gt;
&lt;p&gt;En fin. Si van a hacer algo parecido, arranquen &lt;a class="reference external" href="http://taniquetil.com.ar/homedevel/devel/contacts_fixer.py"&gt;del programa que ya dejé andando&lt;/a&gt;, y modifiquen desde ahí. Que les aproveche.&lt;/p&gt;</description><category>API</category><category>caller id</category><category>celular</category><category>contactos</category><category>formato</category><category>Google</category><category>numero</category><category>Python</category><category>scripts</category><category>teléfono</category><guid>http://blog.taniquetil.com.ar/posts/0802/</guid><pubDate>Fri, 31 Jan 2020 14:07:00 GMT</pubDate></item></channel></rss>