{"id":656,"date":"2005-04-04T01:22:00","date_gmt":"2005-04-04T08:22:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=656"},"modified":"2005-04-04T01:22:00","modified_gmt":"2005-04-04T08:22:00","slug":"echando-codigo-respaldando-las-fotografias-de-flickr-usando-java-y-xml-rpc","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2005\/04\/04\/echando-codigo-respaldando-las-fotografias-de-flickr-usando-java-y-xml-rpc\/","title":{"rendered":"Echando c\u00f3digo: Respaldando las fotograf\u00edas de Flickr usando Java y XML-RPC"},"content":{"rendered":"<p><a href=\"http:\/\/www.flickr.com\/services\/api\/\"><img decoding=\"async\" src=\"http:\/\/www.flickr.com\/images\/flickr_logo_beta.gif\" \/><\/a><\/p>\n<p>Ya <a href=\"http:\/\/elangelnegro.blogspot.com\/2005\/03\/echando-cdigo-ms-de-flickr-con-java-y.html\">en otra oportunidad<\/a> les habia mostrado como ver la lista de fotos en Flickr utilizando Java y XML-RPC; El principio de bajarse las imagenes es muy sencillo:<\/p>\n<ol>\n<li>Obtener el NSID de flickr, dada la direcci\u00f3n de correo<\/li>\n<li>Buscar la informaci\u00f3n de todas las imagenes asociadas a este NSID y construir un URL<\/li>\n<li>Por cada imagen, bajarsela de Flickr usando el URL de el paso anterior<\/li>\n<li>Repetir hasta que no hayan m\u00e1s imagenes.<\/li>\n<\/ol>\n<p> La primera versi\u00f3n hace el trabajo:<\/p>\n<blockquote><p>[josevnz@localhost FlickrBackup]$ <span style=\"color: rgb(0, 153, 0);\">time java -jar \/home\/josevnz\/java\/FlickrBackup\/dist\/FlickrBackup-1.0.jar disposablehero3000-flickr3@yahoo.com <span style=\"font-style: italic;\">password<\/span> \/home\/josevnz\/tmp\/fotos<\/span><br \/>Connecting as: disposablehero3000-flickr3@yahoo.com<br \/>Pictures found: <span style=\"color: rgb(255, 0, 0);\">53<\/span><\/p>\n<p>real    <span style=\"color: rgb(0, 0, 153);\">1m52.368s<\/span><br \/>user    0m4.103s<br \/>sys     0m0.642s<\/p><\/blockquote>\n<p>Me toma <span style=\"font-style: italic;\">casi dos minutos bajarme 53 fotos<\/span>, asi que <span style=\"font-style: italic;\">\u00bfComo lo puedo hacer m\u00e1s r\u00e1pido?<\/span>; Aparte de tener un buffer m\u00e1s grande para las imagenes (escritura \/ lectura) se me ocurre que puedo crear m\u00e1s &#8216;threads&#8217;, asumiendo que no me importa gastar todo mi ancho de banda bajandome imagenes, adem\u00e1s de crear un mont\u00f3n de procesos en mi computadora. Cambiando solamente la forma en como guardo los datos (buffer m\u00e1s grande):<\/p>\n<blockquote><p>Connecting as: disposablehero3000-flickr3@yahoo.com<br \/>Pictures found: <span style=\"color: rgb(204, 0, 0);\">53<\/span><\/p>\n<p><span style=\"color: rgb(0, 0, 153);\">real    1m42.083s<\/span><br \/>user    0m7.394s<br \/>sys     0m0.696s<br \/>[josevnz@localhost FlickrBackup]$<\/p><\/blockquote>\n<p>No se gan\u00f3 mucho. Pero quizas pudiera utilizar una t\u00e9cnica comunmente utilizada en los navegadores, la cual es utilizar varias hebras para traerse los recursos a trav\u00e9s de lared, en este caso mis fotos. Para utilizar &#8216;threads&#8217; debo hacer un cambio no tan trivial en la aplicaci\u00f3n; Esta deber\u00e1 controlar cuantas hebras son creadas, y deber\u00e1 esperar a que todas ellas terminen antes de matar a la hebra principal. En resumen la estrategia es la siguiente:<\/p>\n<ol>\n<li>Cree no m\u00e1s de &#8216;n&#8217; hebras de ejecuci\u00f3n simultaneamente.<\/li>\n<li>Cada hebra se baja una foto en particular y le reporta a la clase controladora como le fu\u00e9 en el proceso.<\/li>\n<li>Al final la clase controladora indica como le fu\u00e9 a cada una de las hebras.<\/li>\n<\/ol>\n<p>Cualquiera que le diga que utilizar &#8216;Threads&#8217; es f\u00e1cil le est\u00e1 mintiendo. Si bien vienen incluidas con el lenguaje, lo cual hace su uso m\u00e1s f\u00e1cil, no subestime sus potenciales problemas de mantenimiento, adem\u00e1s de que no todos los programas se benefician de esta t\u00e9cnica (aqui estamos asumiendo que bajarse una imagen de la red es mucho m\u00e1s lento que generar otra hebra de ejecuci\u00f3n para hacer lo mismo).<\/p>\n<p>Primero el c\u00f3digo de la clase que se baja las imagenes:<\/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: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">package<\/span> com.blogspot.elangelnegro.flickr;<br \/><span class=\"gutter\">   2:<\/span><br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax9\">import<\/span> java.net.URL;<br \/><span class=\"gutter\">   4:<\/span><br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax9\">import<\/span> java.io.IOException;<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax9\">import<\/span> java.io.ByteArrayInputStream;<br \/><span class=\"gutter\">   7:<\/span><span class=\"syntax9\">import<\/span> java.io.File;<br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax9\">import<\/span> java.io.FileOutputStream;<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax9\">import<\/span> java.io.BufferedOutputStream;<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax9\">import<\/span> java.io.InputStream;<br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax9\">import<\/span> java.net.MalformedURLException;<br \/><span class=\"gutter\">  12:<\/span><br \/><span class=\"gutter\">  13:<\/span><span class=\"syntax9\">import<\/span> java.util.concurrent.CountDownLatch;<br \/><span class=\"gutter\">  14:<\/span><span class=\"syntax9\">import<\/span> java.util.concurrent.BrokenBarrierException;<br \/><span class=\"gutterH\">  15:<\/span><br \/><span class=\"gutter\">  16:<\/span><span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">class<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">downloads<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">image<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">from<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">given<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">URL<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">  18:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">For<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">more<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">information<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">please<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">check<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">following<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">URLS<\/span><span class=\"syntax3\">:<\/span><br \/><span class=\"gutter\">  19:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutterH\">  20:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Java<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">API<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  21:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/java.sun.com\/j2se\/1.5.0\/docs\/guide\/2d\/spec\/j2d-bookTOC.html<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Programmer<\/span><span class=\"syntax3\">'<\/span><span class=\"syntax3\">s<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Guide<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">JavaTM<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">2D<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">API<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  22:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  23:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">License<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GPL<\/span><br \/><span class=\"gutter\">  24:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Blog<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">http<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">elangelnegro<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">blogspot<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">com<\/span><br \/><span class=\"gutterH\">  25:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jose<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Vicente<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Nunez<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Zuleta<\/span><br \/><span class=\"gutter\">  26:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">04<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">03<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2005<\/span><br \/><span class=\"gutter\">  27:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  28:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">class<\/span> Download <span class=\"syntax8\">implements<\/span> Runnable <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  29:<\/span>            <br \/><span class=\"gutterH\">  30:<\/span>        <span class=\"syntax8\">private<\/span> String server;<br \/><span class=\"gutter\">  31:<\/span>        <span class=\"syntax8\">private<\/span> String id;<br \/><span class=\"gutter\">  32:<\/span>        <span class=\"syntax8\">private<\/span> String secret;<br \/><span class=\"gutter\">  33:<\/span>        <span class=\"syntax8\">private<\/span> String title;<br \/><span class=\"gutter\">  34:<\/span>        <span class=\"syntax8\">private<\/span> File dir;<br \/><span class=\"gutterH\">  35:<\/span>        <span class=\"syntax8\">private<\/span> URL url;<br \/><span class=\"gutter\">  36:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">boolean<\/span> downloadStatus;<br \/><span class=\"gutter\">  37:<\/span>        <span class=\"syntax8\">private<\/span> CountDownLatch startSignal;<br \/><span class=\"gutter\">  38:<\/span>        <span class=\"syntax8\">private<\/span> CountDownLatch endSignal;<br \/><span class=\"gutter\">  39:<\/span>    <br \/><span class=\"gutterH\">  40:<\/span>        <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutter\">  41:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Buffer<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">size<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">for<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">network<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">reading<\/span><br \/><span class=\"gutter\">  42:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\">  43:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">int<\/span> BUFFER_SIZE <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">819200<\/span>;<br \/><span class=\"gutter\">  44:<\/span>    <br \/><span class=\"gutterH\">  45:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> NullPointerException NULLEXCEPTION <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">NullPointerException<\/span>();<br \/><span class=\"gutter\">  46:<\/span>    <br \/><span class=\"gutter\">  47:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  48:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Class<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">constructor<\/span><br \/><span class=\"gutter\">  49:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">server<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">server<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">name<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">where<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">picture<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">stored<\/span><br \/><span class=\"gutterH\">  50:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">secret<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">secret<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">defines<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">image<\/span><br \/><span class=\"gutter\">  51:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">title<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Title<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">given<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">by<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">user<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">image<\/span><br \/><span class=\"gutter\">  52:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">dir<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Local<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">directory<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">where<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">image<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">be<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">stored<\/span><br \/><span class=\"gutter\">  53:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">barrier<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Barrier<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">object<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">used<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">notify<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">controler<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">than<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">thread<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">finished<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">attempting<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">downloading<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">resource<\/span><br \/><span class=\"gutter\">  54:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">MalformedURLException<\/span><br \/><span class=\"gutterH\">  55:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">NullPointerException<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">If<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">any<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">required<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">parameter<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">missing<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">All<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">them<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><br \/><span class=\"gutter\">  56:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  57:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax6\">Download<\/span>(String server, String id, String secret, String title, File dir, CountDownLatch startSignal, CountDownLatch endSignal) <span class=\"syntax8\">throws<\/span> MalformedURLException <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  58:<\/span>                <span class=\"syntax8\">if<\/span> (server <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  59:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutterH\">  60:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  61:<\/span>                <span class=\"syntax14\">this<\/span>.server <span class=\"syntax18\">=<\/span> server;<br \/><span class=\"gutter\">  62:<\/span>                <span class=\"syntax8\">if<\/span> (id <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  63:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutter\">  64:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  65:<\/span>                <span class=\"syntax14\">this<\/span>.id <span class=\"syntax18\">=<\/span> id;<br \/><span class=\"gutter\">  66:<\/span>                <span class=\"syntax8\">if<\/span> (secret <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  67:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutter\">  68:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  69:<\/span>                <span class=\"syntax14\">this<\/span>.secret <span class=\"syntax18\">=<\/span> secret;<br \/><span class=\"gutterH\">  70:<\/span>                <span class=\"syntax8\">if<\/span> (title <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  71:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutter\">  72:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  73:<\/span>                <span class=\"syntax14\">this<\/span>.title <span class=\"syntax18\">=<\/span> title;<br \/><span class=\"gutter\">  74:<\/span>                <span class=\"syntax8\">if<\/span> (dir <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\">  75:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutter\">  76:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  77:<\/span>                <span class=\"syntax14\">this<\/span>.dir <span class=\"syntax18\">=<\/span> dir;<br \/><span class=\"gutter\">  78:<\/span>                <span class=\"syntax8\">if<\/span> (startSignal <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  79:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutterH\">  80:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  81:<\/span>                <span class=\"syntax14\">this<\/span>.startSignal <span class=\"syntax18\">=<\/span> startSignal;<br \/><span class=\"gutter\">  82:<\/span>                <span class=\"syntax8\">if<\/span> (endSignal <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  83:<\/span>                        <span class=\"syntax8\">throw<\/span> NULLEXCEPTION;<br \/><span class=\"gutter\">  84:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  85:<\/span>                <span class=\"syntax14\">this<\/span>.endSignal <span class=\"syntax18\">=<\/span> endSignal;<br \/><span class=\"gutter\">  86:<\/span>                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Construct<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">actual<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">URL<\/span><br \/><span class=\"gutter\">  87:<\/span>                url <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">URL<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/photos<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> server <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">.flickr.com\/<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> id <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">_<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> secret <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">_o.jpg<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\">  88:<\/span>                downloadStatus <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">false<\/span>;<br \/><span class=\"gutter\">  89:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  90:<\/span><br \/><span class=\"gutter\">  91:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  92:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Tell<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">class<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">was<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">able<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">download<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">resource<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">  93:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">It<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">false<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">getPhoto<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">has<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">not<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">been<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">called<\/span><br \/><span class=\"gutter\">  94:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@see<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">#<\/span><span class=\"syntax3\">getPhoto<\/span><br \/><span class=\"gutterH\">  95:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">@returns<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">boolean<\/span><br \/><span class=\"gutter\">  96:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  97:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">boolean<\/span> <span class=\"syntax6\">getStatus<\/span>() <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  98:<\/span>                <span class=\"syntax8\">return<\/span> downloadStatus;<br \/><span class=\"gutter\">  99:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\"> 100:<\/span><br \/><span class=\"gutter\"> 101:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\"> 102:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Download<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">given<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">picture<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">into<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">local<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">filesystem<\/span><br \/><span class=\"gutter\"> 103:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">IOException<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Reading<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">writting<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">image<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">data<\/span><br \/><span class=\"gutter\"> 104:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutterH\"> 105:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">getPhoto<\/span>() <span class=\"syntax8\">throws<\/span> IOException <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 106:<\/span>                        <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutter\"> 107:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Grab<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">all<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">picture<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">metadata<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">information.<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">It<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">will<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">be<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">required<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">if<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">we<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">want<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">upload<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">picture<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">back<\/span><br \/><span class=\"gutter\"> 108:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Flickr.<\/span><br \/><span class=\"gutter\"> 109:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Check:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">http:\/\/www.flickr.com\/services\/api\/flickr.photos.getInfo.html<\/span><br \/><span class=\"gutterH\"> 110:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\"> 111:<\/span>                         BufferedOutputStream image <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\"> 112:<\/span>                         InputStream data <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\"> 113:<\/span>                         <span class=\"syntax10\">byte<\/span> [] buffer <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\"> 114:<\/span>                         <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 115:<\/span>                                 <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Prepare<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">a<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">file<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">for<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">writting<\/span><br \/><span class=\"gutter\"> 116:<\/span>                                 image <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">BufferedOutputStream<\/span>(<br \/><span class=\"gutter\"> 117:<\/span>                                        <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">FileOutputStream<\/span>(<br \/><span class=\"gutter\"> 118:<\/span>                                                dir.<span class=\"syntax6\">getCanonicalPath<\/span>() <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 119:<\/span>                                                System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">file.separator<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span><br \/><span class=\"gutterH\"> 120:<\/span>                                                id <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 121:<\/span>                                                <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">_<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 122:<\/span>                                                secret <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 123:<\/span>                                                <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">_o.jpg<\/span><span class=\"syntax13\">\"<\/span><br \/><span class=\"gutter\"> 124:<\/span>                                        )<br \/><span class=\"gutterH\"> 125:<\/span>                                 );<br \/><span class=\"gutter\"> 126:<\/span>                                 data <span class=\"syntax18\">=<\/span> url.<span class=\"syntax6\">openStream<\/span>();<br \/><span class=\"gutter\"> 127:<\/span>                                 <span class=\"syntax10\">int<\/span> bytes <span class=\"syntax18\">=<\/span> <span class=\"syntax18\">-<\/span><span class=\"syntax5\">1<\/span>;<br \/><span class=\"gutter\"> 128:<\/span>                                 buffer <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax10\">byte<\/span>[BUFFER_SIZE];<br \/><span class=\"gutter\"> 129:<\/span>                                 <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Save<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">image<\/span><br \/><span class=\"gutterH\"> 130:<\/span>                                 <span class=\"syntax8\">while<\/span>( (bytes <span class=\"syntax18\">=<\/span> data.<span class=\"syntax6\">read<\/span>(buffer, <span class=\"syntax5\">0<\/span>, buffer.length)) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax18\">-<\/span><span class=\"syntax5\">1<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 131:<\/span>                                         image.<span class=\"syntax6\">write<\/span>(buffer, <span class=\"syntax5\">0<\/span>, bytes);<br \/><span class=\"gutter\"> 132:<\/span>                                 <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 133:<\/span>                                 <span class=\"syntax8\">if<\/span> (image <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 134:<\/span>                                         image.<span class=\"syntax6\">flush<\/span>();<br \/><span class=\"gutterH\"> 135:<\/span>                                 <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 136:<\/span>                                 downloadStatus <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">true<\/span>;<br \/><span class=\"gutter\"> 137:<\/span>                         <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (IOException ioexp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 138:<\/span>                                 <span class=\"syntax8\">throw<\/span> ioexp;<br \/><span class=\"gutter\"> 139:<\/span>                         <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 140:<\/span>                                 buffer <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\"> 141:<\/span>                                 <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 142:<\/span>                                         <span class=\"syntax8\">if<\/span> (image <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 143:<\/span>                                                 image.<span class=\"syntax6\">close<\/span>();<br \/><span class=\"gutter\"> 144:<\/span>                                         <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\"> 145:<\/span>                                 <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (IOException ioexp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 146:<\/span>                                         ioexp.<span class=\"syntax6\">printStackTrace<\/span>();<br \/><span class=\"gutter\"> 147:<\/span>                                 <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 148:<\/span>                             <br \/><span class=\"gutter\"> 149:<\/span>                                 <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 150:<\/span>                                         <span class=\"syntax8\">if<\/span> (data <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 151:<\/span>                                                 data.<span class=\"syntax6\">close<\/span>();<br \/><span class=\"gutter\"> 152:<\/span>                                         <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 153:<\/span>                                 <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (IOException ioexp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 154:<\/span>                                         ioexp.<span class=\"syntax6\">printStackTrace<\/span>();<br \/><span class=\"gutterH\"> 155:<\/span>                                 <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 156:<\/span>                         <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 157:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 158:<\/span><br \/><span class=\"gutter\"> 159:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutterH\"> 160:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">called<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">by<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Thread<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">manager<\/span><br \/><span class=\"gutter\"> 161:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\"> 162:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">void<\/span> run () <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 163:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 164:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Wait<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">to<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">be<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">awaken...<\/span><br \/><span class=\"gutterH\"> 165:<\/span>                        startSignal.<span class=\"syntax6\">await<\/span>();<br \/><span class=\"gutter\"> 166:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Wrap<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">call<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">to<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">download<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">photo<\/span><br \/><span class=\"gutter\"> 167:<\/span>                        <span class=\"syntax6\">getPhoto<\/span>();<br \/><span class=\"gutter\"> 168:<\/span>                        endSignal.<span class=\"syntax6\">countDown<\/span>();<br \/><span class=\"gutter\"> 169:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (InterruptedException intExp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 170:<\/span>                        intExp.<span class=\"syntax6\">printStackTrace<\/span>();<br \/><span class=\"gutter\"> 171:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (Exception exp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 172:<\/span>                        exp.<span class=\"syntax6\">printStackTrace<\/span>();<br \/><span class=\"gutter\"> 173:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 174:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Don't<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">do<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">anything<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">here<\/span><br \/><span class=\"gutterH\"> 175:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 176:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 177:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Aqui utilizamos una barrera (en el caso de Java 1.5.0, un <span style=\"font-style: italic;\">Latch<\/span>), la cual nos permite notificarle a las dem\u00e1s hebras en Java que ya terminamos de &#8216;tratar&#8217; de bajar la imagen. Ahora el c\u00f3digo de la clase que se encarga de obtener la informaci\u00f3n de las imagenes y de coordinar la ejecuci\u00f3n de las hebras:<\/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: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">package<\/span> com.blogspot.elangelnegro.flickr;<br \/><span class=\"gutter\">   2:<\/span><br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax9\">import<\/span> java.util.ResourceBundle;<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax9\">import<\/span> java.util.Properties;<br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax9\">import<\/span> java.util.Vector;<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax9\">import<\/span> java.util.Hashtable;<br \/><span class=\"gutter\">   7:<\/span><br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax9\">import<\/span> javax.xml.parsers.DocumentBuilder;<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax9\">import<\/span> javax.xml.parsers.DocumentBuilderFactory;<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax9\">import<\/span> javax.xml.parsers.FactoryConfigurationError;<br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax9\">import<\/span> javax.xml.parsers.ParserConfigurationException;<br \/><span class=\"gutter\">  12:<\/span><br \/><span class=\"gutter\">  13:<\/span><span class=\"syntax9\">import<\/span> org.xml.sax.SAXException;<br \/><span class=\"gutter\">  14:<\/span><span class=\"syntax9\">import<\/span> org.xml.sax.SAXParseException;<br \/><span class=\"gutterH\">  15:<\/span><br \/><span class=\"gutter\">  16:<\/span><span class=\"syntax9\">import<\/span> org.w3c.dom.Document;<br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax9\">import<\/span> org.w3c.dom.DOMException;<br \/><span class=\"gutter\">  18:<\/span><span class=\"syntax9\">import<\/span> org.w3c.dom.NodeList;<br \/><span class=\"gutter\">  19:<\/span><span class=\"syntax9\">import<\/span> org.w3c.dom.Node;<br \/><span class=\"gutterH\">  20:<\/span><br \/><span class=\"gutter\">  21:<\/span><span class=\"syntax9\">import<\/span> java.net.URL;<br \/><span class=\"gutter\">  22:<\/span><br \/><span class=\"gutter\">  23:<\/span><span class=\"syntax9\">import<\/span> java.io.IOException;<br \/><span class=\"gutter\">  24:<\/span><span class=\"syntax9\">import<\/span> java.io.ByteArrayInputStream;<br \/><span class=\"gutterH\">  25:<\/span><span class=\"syntax9\">import<\/span> java.io.File;<br \/><span class=\"gutter\">  26:<\/span><span class=\"syntax9\">import<\/span> java.io.FileOutputStream;<br \/><span class=\"gutter\">  27:<\/span><span class=\"syntax9\">import<\/span> java.io.BufferedOutputStream;<br \/><span class=\"gutter\">  28:<\/span><span class=\"syntax9\">import<\/span> java.io.InputStream;<br \/><span class=\"gutter\">  29:<\/span><br \/><span class=\"gutterH\">  30:<\/span><span class=\"syntax9\">import<\/span> org.apache.xmlrpc.XmlRpcClient;<br \/><span class=\"gutter\">  31:<\/span><span class=\"syntax9\">import<\/span> org.apache.xmlrpc.XmlRpcException;<br \/><span class=\"gutter\">  32:<\/span><span class=\"syntax9\">import<\/span> org.apache.xmlrpc.XmlRpc;<br \/><span class=\"gutter\">  33:<\/span><br \/><span class=\"gutter\">  34:<\/span><span class=\"syntax9\">import<\/span> java.util.concurrent.CountDownLatch;<br \/><span class=\"gutterH\">  35:<\/span><span class=\"syntax9\">import<\/span> java.util.concurrent.BrokenBarrierException;<br \/><span class=\"gutter\">  36:<\/span><span class=\"syntax9\">import<\/span> java.util.concurrent.TimeUnit;<br \/><span class=\"gutter\">  37:<\/span><br \/><span class=\"gutter\">  38:<\/span><span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  39:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">I<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">wrote<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">application<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">because<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Flickr<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">doesn<\/span><span class=\"syntax3\">'<\/span><span class=\"syntax3\">t<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">have<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">an<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">automatic<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">way<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">do<\/span><br \/><span class=\"gutterH\">  40:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">backups<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">original<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">images<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">For<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">reason<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">I<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">decided<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">make<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">quick<\/span><span class=\"syntax3\"> <\/span><br \/><span class=\"gutter\">  41:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">backup<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">utility<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">uses<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Flickr<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">API<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">list<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">photos<\/span><br \/><span class=\"gutter\">  42:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><br \/><span class=\"gutter\">  43:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">For<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">more<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">information<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">please<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">check<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">following<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">URLS<\/span><span class=\"syntax3\">:<\/span><br \/><span class=\"gutter\">  44:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutterH\">  45:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/www.flickr.com\/services\/api\/misc.urls.html<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Flickr<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">URL<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">format<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  46:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/www.flickr.com\/services\/api\/<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Description<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">API<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  47:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/www.flickr.com\/forums\/help\/5304\/<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">The<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">problem<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">I<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">had<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">solve<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  48:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/ws.apache.org\/xmlrpc\/client.html<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Apache<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">XML<\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\">RPC<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  49:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">href<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">http:\/\/prdownloads.sourceforge.net\/elangelnegro\/DownloadPublicPictures.plx?download<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\">Original<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Perl<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">I<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">wrote<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">a<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutterH\">  50:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  51:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">License<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GPL<\/span><br \/><span class=\"gutter\">  52:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Blog<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">http<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">elangelnegro<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">blogspot<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">com<\/span><br \/><span class=\"gutter\">  53:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jose<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Vicente<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Nunez<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Zuleta<\/span><br \/><span class=\"gutter\">  54:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">04<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">01<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2005<\/span><br \/><span class=\"gutterH\">  55:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  56:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">class<\/span> FlickrBackup <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  57:<\/span>    <br \/><span class=\"gutter\">  58:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> ResourceBundle BUNDLE <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\">  59:<\/span>                ResourceBundle.<span class=\"syntax6\">getBundle<\/span>(FlickrBackup.<span class=\"syntax10\">class<\/span>.<span class=\"syntax6\">getName<\/span>());<br \/><span class=\"gutterH\">  60:<\/span>            <br \/><span class=\"gutter\">  61:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> Properties CONFIG <span class=\"syntax18\">=<\/span> System.<span class=\"syntax6\">getProperties<\/span>();<br \/><span class=\"gutter\">  62:<\/span>    <br \/><span class=\"gutter\">  63:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  64:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Maximun<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">pictures<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">per<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">page<\/span><br \/><span class=\"gutterH\">  65:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  66:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">int<\/span> MAX_PICTURES_PER_PAGE <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">15<\/span>;<br \/><span class=\"gutter\">  67:<\/span>    <br \/><span class=\"gutter\">  68:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  69:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Hide<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">constructor<\/span><br \/><span class=\"gutterH\">  70:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><br \/><span class=\"gutter\">  71:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  72:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax6\">FlickrBackup<\/span>() <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  73:<\/span>                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Empty<\/span><br \/><span class=\"gutter\">  74:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  75:<\/span>    <br \/><span class=\"gutter\">  76:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  77:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Command<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">line<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">invocation<\/span><br \/><span class=\"gutter\">  78:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Command<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">line<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><br \/><span class=\"gutter\">  79:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutterH\">  80:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\">[<\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">]<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Flickr<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">user<\/span><br \/><span class=\"gutter\">  81:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\">[<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\">]<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">password<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">account<\/span><br \/><span class=\"gutter\">  82:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">li<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\">[<\/span><span class=\"syntax3\">2<\/span><span class=\"syntax3\">]<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">directory<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">where<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">we<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">save<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">all<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">photos<\/span><br \/><span class=\"gutter\">  83:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">ul<\/span><span class=\"syntax17\">&gt;<\/span><br \/><span class=\"gutter\">  84:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Exception<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">there<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">any<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">error<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">while<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">downloading<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">pictures<\/span><br \/><span class=\"gutterH\">  85:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  86:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">main<\/span>(String [] args) <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  87:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> ( (args <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span> (args.length <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax5\">3<\/span>) )) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  88:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalArgumentException<\/span>(<br \/><span class=\"gutter\">  89:<\/span>                                BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages.allparam<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutterH\">  90:<\/span>                        );<br \/><span class=\"gutter\">  91:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  92:<\/span>                File dir <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">File<\/span>(args[<span class=\"syntax5\">2<\/span>]);<br \/><span class=\"gutter\">  93:<\/span>                <span class=\"syntax8\">if<\/span> ( dir.<span class=\"syntax6\">exists<\/span>() <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span> <span class=\"syntax18\">!<\/span> dir.<span class=\"syntax6\">isDirectory<\/span>() ) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  94:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalArgumentException<\/span>(<br \/><span class=\"gutterH\">  95:<\/span>                                BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages.dirNotFound<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutter\">  96:<\/span>                        );<br \/><span class=\"gutter\">  97:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  98:<\/span>                Vector params <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Vector<\/span>();<br \/><span class=\"gutter\">  99:<\/span>                Hashtable struct <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Hashtable<\/span>();<br \/><span class=\"gutterH\"> 100:<\/span>                DocumentBuilderFactory factory <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\"> 101:<\/span>                                DocumentBuilderFactory.<span class=\"syntax6\">newInstance<\/span>();<br \/><span class=\"gutter\"> 102:<\/span>                DocumentBuilder builder <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\"> 103:<\/span>                                factory.<span class=\"syntax6\">newDocumentBuilder<\/span>();<br \/><span class=\"gutter\"> 104:<\/span>                Document document <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutterH\"> 105:<\/span>                XmlRpcClient xmlrpc <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutter\"> 106:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 107:<\/span>                                xmlrpc <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">XmlRpcClient<\/span>(<br \/><span class=\"gutter\"> 108:<\/span>                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.url<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutter\"> 109:<\/span>                                );<br \/><span class=\"gutterH\"> 110:<\/span>                            <br \/><span class=\"gutter\"> 111:<\/span>                                <span class=\"syntax1\">\/*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Get<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Flickr<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">numeric<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">user<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">ID<\/span><br \/><span class=\"gutter\"> 112:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">http:\/\/www.flickr.com\/services\/api\/flickr.people.findByUsername.html<\/span><br \/><span class=\"gutter\"> 113:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\"> 114:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<br \/><span class=\"gutterH\"> 115:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">api_key<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 116:<\/span>                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutter\"> 117:<\/span>                                );<br \/><span class=\"gutter\"> 118:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<br \/><span class=\"gutter\"> 119:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">find_email<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutterH\"> 120:<\/span>                                        args[<span class=\"syntax5\">0<\/span>]<br \/><span class=\"gutter\"> 121:<\/span>                                );<br \/><span class=\"gutter\"> 122:<\/span>                                params.<span class=\"syntax6\">add<\/span>(struct);<br \/><span class=\"gutter\"> 123:<\/span>                                String result <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\"> 124:<\/span>                                        (String) xmlrpc.execute (<br \/><span class=\"gutterH\"> 125:<\/span>                                                <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">flickr.people.findByEmail<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 126:<\/span>                                                params<br \/><span class=\"gutter\"> 127:<\/span>                                );<br \/><span class=\"gutter\"> 128:<\/span>                                document <span class=\"syntax18\">=<\/span> builder.<span class=\"syntax6\">parse<\/span>(<br \/><span class=\"gutter\"> 129:<\/span>                                        <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">ByteArrayInputStream<\/span>(<br \/><span class=\"gutterH\"> 130:<\/span>                                                result.<span class=\"syntax6\">getBytes<\/span>()));<br \/><span class=\"gutter\"> 131:<\/span>                                NodeList nodes <span class=\"syntax18\">=<\/span> document.<span class=\"syntax6\">getElementsByTagName<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">user<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\"> 132:<\/span>                                String userId <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\"> 133:<\/span>                                        nodes.<span class=\"syntax6\">item<\/span>(<span class=\"syntax5\">0<\/span>).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">nsid<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>();<br \/><span class=\"gutter\"> 134:<\/span>                                System.out.<span class=\"syntax6\">println<\/span>(<br \/><span class=\"gutterH\"> 135:<\/span>                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages.connecting<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 136:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 137:<\/span>                                        args[<span class=\"syntax5\">0<\/span>]<br \/><span class=\"gutter\"> 138:<\/span>                                );<br \/><span class=\"gutter\"> 139:<\/span>                                struct.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutterH\"> 140:<\/span>                                params.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutter\"> 141:<\/span>                                <span class=\"syntax10\">int<\/span> currentPage <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">1<\/span>;<br \/><span class=\"gutter\"> 142:<\/span>                                <span class=\"syntax10\">int<\/span> totalCount <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;<br \/><span class=\"gutter\"> 143:<\/span>                                <span class=\"syntax10\">int<\/span> totalPages <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">1<\/span>;<br \/><span class=\"gutter\"> 144:<\/span>                                String maxPages <span class=\"syntax18\">=<\/span> String.<span class=\"syntax6\">valueOf<\/span>(MAX_PICTURES_PER_PAGE);<br \/><span class=\"gutterH\"> 145:<\/span>                                <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutter\"> 146:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Get<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">total<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">number<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">of<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photos<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">and<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">pages.<\/span><span class=\"syntax1\"> <\/span><br \/><span class=\"gutter\"> 147:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">This<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">will<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">control<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">how<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">many<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photos<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">are<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">downloaded<\/span><br \/><span class=\"gutter\"> 148:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">at<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">same<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">time.<\/span><br \/><span class=\"gutter\"> 149:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">The<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">only<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">way<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">know<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">that<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">is<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">search<\/span><br \/><span class=\"gutterH\"> 150:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\"> 151:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<br \/><span class=\"gutter\"> 152:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">api_key<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 153:<\/span>                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutter\"> 154:<\/span>                                );<br \/><span class=\"gutterH\"> 155:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">user_id<\/span><span class=\"syntax13\">\"<\/span>, userId);<br \/><span class=\"gutter\"> 156:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">per_page<\/span><span class=\"syntax13\">\"<\/span>, maxPages);<br \/><span class=\"gutter\"> 157:<\/span>                                struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">page<\/span><span class=\"syntax13\">\"<\/span>, String.<span class=\"syntax6\">valueOf<\/span>(currentPage));<br \/><span class=\"gutter\"> 158:<\/span>                                params.<span class=\"syntax6\">add<\/span>(struct);<br \/><span class=\"gutter\"> 159:<\/span>                                result <span class=\"syntax18\">=<\/span> (String) xmlrpc.execute (<br \/><span class=\"gutterH\"> 160:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">flickr.photos.search<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 161:<\/span>                                        params<br \/><span class=\"gutter\"> 162:<\/span>                                );<br \/><span class=\"gutter\"> 163:<\/span>                                struct.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutter\"> 164:<\/span>                                params.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutterH\"> 165:<\/span>                                <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutter\"> 166:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Get<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photo<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">and<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">page<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">count.<\/span><br \/><span class=\"gutter\"> 167:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\"> 168:<\/span>                                document <span class=\"syntax18\">=<\/span> builder.<span class=\"syntax6\">parse<\/span>(<br \/><span class=\"gutter\"> 169:<\/span>                                        <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">ByteArrayInputStream<\/span>(<br \/><span class=\"gutterH\"> 170:<\/span>                                                result.<span class=\"syntax6\">getBytes<\/span>()));<br \/><span class=\"gutter\"> 171:<\/span>                                nodes <span class=\"syntax18\">=<\/span> document.<span class=\"syntax6\">getElementsByTagName<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">photos<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\"> 172:<\/span>                                totalCount <span class=\"syntax18\">=<\/span><br \/><span class=\"gutter\"> 173:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(nodes.<span class=\"syntax6\">item<\/span>(<span class=\"syntax5\">0<\/span>).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">total<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>());<br \/><span class=\"gutter\"> 174:<\/span>                                totalPages <span class=\"syntax18\">=<\/span><br \/><span class=\"gutterH\"> 175:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(nodes.<span class=\"syntax6\">item<\/span>(<span class=\"syntax5\">0<\/span>).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">pages<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>());<br \/><span class=\"gutter\"> 176:<\/span>                                System.out.<span class=\"syntax6\">println<\/span>(<br \/><span class=\"gutter\"> 177:<\/span>                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages.found<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 178:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 179:<\/span>                                        totalCount <span class=\"syntax18\">+<\/span><br \/><span class=\"gutterH\"> 180:<\/span>                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 181:<\/span>                                        totalPages<br \/><span class=\"gutter\"> 182:<\/span>                                );<br \/><span class=\"gutter\"> 183:<\/span>                                <span class=\"syntax8\">for<\/span> (currentPage <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">1<\/span>; currentPage <span class=\"syntax18\">&lt;=<\/span> totalPages; currentPage<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 184:<\/span>                                        <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutterH\"> 185:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Get<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">now<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photo<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">list.<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Flickr<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">has<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">a<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">limit<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">of<\/span><br \/><span class=\"gutter\"> 186:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">how<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">many<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photos<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">can<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">show<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">on<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">a<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">list<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">(500)<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">so<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">get<\/span><br \/><span class=\"gutter\"> 187:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">first<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">page,<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">find<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">how<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">many<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photos<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">are<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">and<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">then<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">iterate<\/span><br \/><span class=\"gutter\"> 188:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">all<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">pages.<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">This<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">number<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">is<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">an<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">upper<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">limit.<\/span><br \/><span class=\"gutter\"> 189:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">For<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">that<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">we<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">have<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">repeat<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">search<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">on<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">a<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">loop.<\/span><br \/><span class=\"gutterH\"> 190:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutter\"> 191:<\/span>                                        struct.<span class=\"syntax6\">put<\/span>(<br \/><span class=\"gutter\"> 192:<\/span>                                                <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">api_key<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 193:<\/span>                                                BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key<\/span><span class=\"syntax13\">\"<\/span>)<br \/><span class=\"gutter\"> 194:<\/span>                                        );<br \/><span class=\"gutterH\"> 195:<\/span>                                        struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">user_id<\/span><span class=\"syntax13\">\"<\/span>, userId);<br \/><span class=\"gutter\"> 196:<\/span>                                        struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">per_page<\/span><span class=\"syntax13\">\"<\/span>, maxPages);<br \/><span class=\"gutter\"> 197:<\/span>                                        struct.<span class=\"syntax6\">put<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">page<\/span><span class=\"syntax13\">\"<\/span>, String.<span class=\"syntax6\">valueOf<\/span>(currentPage));<br \/><span class=\"gutter\"> 198:<\/span>                                        params.<span class=\"syntax6\">add<\/span>(struct);<br \/><span class=\"gutter\"> 199:<\/span>                                        result <span class=\"syntax18\">=<\/span><br \/><span class=\"gutterH\"> 200:<\/span>                                                (String) xmlrpc.execute (<br \/><span class=\"gutter\"> 201:<\/span>                                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">flickr.photos.search<\/span><span class=\"syntax13\">\"<\/span>,<br \/><span class=\"gutter\"> 202:<\/span>                                                        params<br \/><span class=\"gutter\"> 203:<\/span>                                        );<br \/><span class=\"gutter\"> 204:<\/span>                                        struct.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutterH\"> 205:<\/span>                                        params.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutter\"> 206:<\/span>                                        <span class=\"syntax1\">\/*<\/span><br \/><span class=\"gutter\"> 207:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Get<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">photo<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">list.<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Using<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">this<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">information,<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">construct<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">phot<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">URL<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">as<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">indicated<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">here:<\/span><br \/><span class=\"gutter\"> 208:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">http:\/\/www.flickr.com\/services\/api\/misc.urls.html<\/span><br \/><span class=\"gutter\"> 209:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">*\/<\/span><br \/><span class=\"gutterH\"> 210:<\/span>                                        ByteArrayInputStream xmlStream <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">ByteArrayInputStream<\/span>(result.<span class=\"syntax6\">getBytes<\/span>());<br \/><span class=\"gutter\"> 211:<\/span>                                        document <span class=\"syntax18\">=<\/span> builder.<span class=\"syntax6\">parse<\/span>(xmlStream);<br \/><span class=\"gutter\"> 212:<\/span>                                        xmlStream.<span class=\"syntax6\">close<\/span>();<br \/><span class=\"gutter\"> 213:<\/span>                                        nodes <span class=\"syntax18\">=<\/span> document.<span class=\"syntax6\">getElementsByTagName<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">photo<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\"> 214:<\/span>                                        System.out.<span class=\"syntax6\">println<\/span>(<br \/><span class=\"gutterH\"> 215:<\/span>                                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\\t<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 216:<\/span>                                                        BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages.currPage<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 217:<\/span>                                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 218:<\/span>                                                        currentPage <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\"> 219:<\/span>                                                        <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutterH\"> 220:<\/span>                                                        nodes.<span class=\"syntax6\">getLength<\/span>()<br \/><span class=\"gutter\"> 221:<\/span>                                        );<br \/><span class=\"gutter\"> 222:<\/span>                                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Prepare<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">latch<\/span><br \/><span class=\"gutter\"> 223:<\/span>                                        CountDownLatch startSignal <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">CountDownLatch<\/span>(<span class=\"syntax5\">1<\/span>);<br \/><span class=\"gutter\"> 224:<\/span>                                        CountDownLatch doneSignal <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">CountDownLatch<\/span>(nodes.<span class=\"syntax6\">getLength<\/span>());<br \/><span class=\"gutterH\"> 225:<\/span>                                        <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> i <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; i <span class=\"syntax18\">&lt;<\/span> nodes.<span class=\"syntax6\">getLength<\/span>(); i<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 226:<\/span>                                                String  server <span class=\"syntax18\">=<\/span> (String) nodes.<span class=\"syntax6\">item<\/span>(i).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>();<br \/><span class=\"gutter\"> 227:<\/span>                                                String  secret <span class=\"syntax18\">=<\/span> (String) nodes.<span class=\"syntax6\">item<\/span>(i).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">secret<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>();<br \/><span class=\"gutter\"> 228:<\/span>                                                String  title <span class=\"syntax18\">=<\/span> (String) nodes.<span class=\"syntax6\">item<\/span>(i).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">title<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>();<br \/><span class=\"gutter\"> 229:<\/span>                                                String  id <span class=\"syntax18\">=<\/span> (String) nodes.<span class=\"syntax6\">item<\/span>(i).<span class=\"syntax6\">getAttributes<\/span>().<span class=\"syntax6\">getNamedItem<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">id<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">getNodeValue<\/span>();<br \/><span class=\"gutterH\"> 230:<\/span>                                                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Download<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">picture<\/span><br \/><span class=\"gutter\"> 231:<\/span>                                                Thread thread <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Thread<\/span>(<br \/><span class=\"gutter\"> 232:<\/span>                                                        <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Download<\/span>(server, id, secret, title, dir, startSignal, doneSignal),<br \/><span class=\"gutter\"> 233:<\/span>                                                        server <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> id <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> secret<br \/><span class=\"gutter\"> 234:<\/span>                                                );<br \/><span class=\"gutterH\"> 235:<\/span>                                                thread.<span class=\"syntax6\">start<\/span>();<br \/><span class=\"gutter\"> 236:<\/span>                                        <span class=\"syntax18\">}<\/span> <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">End<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">for<\/span><br \/><span class=\"gutter\"> 237:<\/span>                                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Start<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">all<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">threads<\/span><br \/><span class=\"gutter\"> 238:<\/span>                                        startSignal.<span class=\"syntax6\">countDown<\/span>();<br \/><span class=\"gutter\"> 239:<\/span>                                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">We<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">could<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">do<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">something<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">else<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">here,<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">but<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">we<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">wont<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">:)<\/span><br \/><span class=\"gutterH\"> 240:<\/span>                                    <br \/><span class=\"gutter\"> 241:<\/span>                                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Wait<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">for<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">all<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">other<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">threads<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">to<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">finish<\/span><br \/><span class=\"gutter\"> 242:<\/span>                                        doneSignal.<span class=\"syntax6\">await<\/span>(<span class=\"syntax5\">60<\/span><span class=\"syntax18\">*<\/span><span class=\"syntax5\">5<\/span>, TimeUnit.SECONDS);<br \/><span class=\"gutter\"> 243:<\/span>                                <span class=\"syntax18\">}<\/span> <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">End<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">launching<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">threads<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">-<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">while<\/span><br \/><span class=\"gutter\"> 244:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (XmlRpcException xmlexp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 245:<\/span>                                <span class=\"syntax8\">throw<\/span> xmlexp;<br \/><span class=\"gutter\"> 246:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (SAXException sxe) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 247:<\/span>                                Exception  exp <span class=\"syntax18\">=<\/span> sxe;<br \/><span class=\"gutter\"> 248:<\/span>                                <span class=\"syntax8\">if<\/span> (sxe.<span class=\"syntax6\">getException<\/span>() <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 249:<\/span>                                        exp <span class=\"syntax18\">=<\/span> sxe.<span class=\"syntax6\">getException<\/span>();<br \/><span class=\"gutterH\"> 250:<\/span>                                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 251:<\/span>                                exp.<span class=\"syntax6\">printStackTrace<\/span>();<br \/><span class=\"gutter\"> 252:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (IOException ioexp) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\"> 253:<\/span>                                <span class=\"syntax8\">throw<\/span> ioexp;<br \/><span class=\"gutter\"> 254:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutterH\"> 255:<\/span>                                struct.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutter\"> 256:<\/span>                                params.<span class=\"syntax6\">clear<\/span>();<br \/><span class=\"gutter\"> 257:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 258:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\"> 259:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Despu\u00e9s de unos cambios, este es el tiempo de ejecuci\u00f3n:<\/p>\n<blockquote><p>&#8230;<br \/>Connecting as: disposablehero3000-flickr3@yahoo.com<br \/>Pictures found: <span style=\"color: rgb(204, 0, 0);\">53<\/span><\/p>\n<p><span style=\"color: rgb(0, 153, 0);\">real    0m32.087s<\/span><br \/>user    0m1.969s<br \/>sys     0m0.788s<br \/>[josevnz@localhost FlickrBackup]$<\/p><\/blockquote>\n<p>!Mucho m\u00e1s r\u00e1pida!<\/p>\n<p>La aplicaci\u00f3n a\u00fan no est\u00e1 completa, s\u00f3lo me concentr\u00e9 esta vez en mejorar su ejecuci\u00f3n:<\/p>\n<ul>\n<li>La versi\u00f3n final guarda tambien la metadata de cada foto adem\u00e1s de la imagen, por lo que en teor\u00eda deberia ser f\u00e1cil escribir una aplicaci\u00f3n que pueda restaurar las imagenes de vuelta en Flickr.<\/li>\n<li>La aplicaci\u00f3n reportar\u00e1 si pudo bajar o no cada una de las imagenes.<\/li>\n<li>La aplicaci\u00f3n utilizar\u00e1 una interfaz gr\u00e1fica (Swing?) lo cual har\u00e1 m\u00e1s f\u00e1cil su uso.<\/li>\n<li>Averiguar correctamente la extensi\u00f3n de la imagen original. Ahorita asumo que todas son JPG lo cual es falso (<span style=\"font-style: italic;\">el API de Flickr no soporta eso actualmente<\/span>. <a href=\"http:\/\/www.flickr.com\/services\/api\/flickr.photos.getSizes.html\">Aunque hay una forma de saber<\/a>.).<\/li>\n<\/ul>\n<p>Les dejo un par de tutoriales sobre Threads (<a href=\"http:\/\/www.onjava.com\/pub\/a\/onjava\/excerpt\/jthreads3_ch6\/index1.html\">1<\/a>, <a href=\"http:\/\/www.onjava.com\/pub\/a\/onjava\/2004\/10\/20\/threads2.html\">2<\/a>), y por supuesto <a href=\"https:\/\/sourceforge.net\/project\/shownotes.php?release_id=317640\">con el enlace a el c\u00f3digo<\/a>. Pienso acomodarlo ahora para usar Swing de manera que sea m\u00e1s amigable para que pueda hacer sus respaldos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ya en otra oportunidad les habia mostrado como ver la lista de fotos en Flickr utilizando Java y XML-RPC; El principio de bajarse las imagenes es muy sencillo: Obtener el NSID de flickr, dada la direcci\u00f3n de correo Buscar la informaci\u00f3n de todas las imagenes asociadas a este NSID y construir un URL Por cada <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2005\/04\/04\/echando-codigo-respaldando-las-fotografias-de-flickr-usando-java-y-xml-rpc\/\">[&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\/656"}],"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=656"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/656\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}